@projectcor/maia-components 2.30.3-0 → 2.31.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.
@@ -96,15 +96,21 @@ export var ChatAIModal = function ChatAIModal() {
96
96
  var shouldRestoreExpanded = (_savedSessionOnMountR = (_savedSessionOnMountR2 = savedSessionOnMountRef.current) === null || _savedSessionOnMountR2 === void 0 ? void 0 : _savedSessionOnMountR2.isExpanded) !== null && _savedSessionOnMountR !== void 0 ? _savedSessionOnMountR : false;
97
97
  var pendingSessionRestoreRef = useRef(shouldRestoreExpanded ? savedSessionOnMountRef.current : null);
98
98
  var sessionRestoreStartedRef = useRef(false);
99
+ var _useState = useState(function () {
100
+ return pendingSessionRestoreRef.current != null;
101
+ }),
102
+ _useState2 = _slicedToArray(_useState, 2),
103
+ isRestoringSession = _useState2[0],
104
+ setIsRestoringSession = _useState2[1];
99
105
  var sidebarOpenRef = useRef((_savedSessionOnMountR3 = (_savedSessionOnMountR4 = savedSessionOnMountRef.current) === null || _savedSessionOnMountR4 === void 0 ? void 0 : _savedSessionOnMountR4.sidebarOpen) !== null && _savedSessionOnMountR3 !== void 0 ? _savedSessionOnMountR3 : false);
100
106
 
101
107
  // Tras navegar en el host (full page reload), restauramos el panel si estaba abierto.
102
- var _useState = useState(function () {
108
+ var _useState3 = useState(function () {
103
109
  return !shouldRestoreExpanded;
104
110
  }),
105
- _useState2 = _slicedToArray(_useState, 2),
106
- isMinimized = _useState2[0],
107
- setIsMinimized = _useState2[1];
111
+ _useState4 = _slicedToArray(_useState3, 2),
112
+ isMinimized = _useState4[0],
113
+ setIsMinimized = _useState4[1];
108
114
  var setChatViewVisible = useChatsStore(function (state) {
109
115
  return state.setChatViewVisible;
110
116
  });
@@ -154,74 +160,74 @@ export var ChatAIModal = function ChatAIModal() {
154
160
  document.dispatchEvent(new CustomEvent('maia-input-refocus'));
155
161
  }, 100);
156
162
  }, []);
157
- var _useState3 = useState({
163
+ var _useState5 = useState({
158
164
  message: '',
159
165
  attachments: []
160
166
  }),
161
- _useState4 = _slicedToArray(_useState3, 2),
162
- userInitialMessage = _useState4[0],
163
- setUserInitialMessage = _useState4[1];
164
- var _useState5 = useState(null),
165
167
  _useState6 = _slicedToArray(_useState5, 2),
166
- initialChatId = _useState6[0],
167
- setInitialChatId = _useState6[1];
168
- var _useState7 = useState(0),
168
+ userInitialMessage = _useState6[0],
169
+ setUserInitialMessage = _useState6[1];
170
+ var _useState7 = useState(null),
169
171
  _useState8 = _slicedToArray(_useState7, 2),
170
- newChatKey = _useState8[0],
171
- setNewChatKey = _useState8[1];
172
- var _useState9 = useState(null),
172
+ initialChatId = _useState8[0],
173
+ setInitialChatId = _useState8[1];
174
+ var _useState9 = useState(0),
173
175
  _useState0 = _slicedToArray(_useState9, 2),
174
- sessionMeta = _useState0[0],
175
- setSessionMeta = _useState0[1];
176
+ newChatKey = _useState0[0],
177
+ setNewChatKey = _useState0[1];
176
178
  var _useState1 = useState(null),
177
179
  _useState10 = _slicedToArray(_useState1, 2),
178
- sendMessageFunction = _useState10[0],
179
- setSendMessageFunction = _useState10[1];
180
+ sessionMeta = _useState10[0],
181
+ setSessionMeta = _useState10[1];
180
182
  var _useState11 = useState(null),
181
183
  _useState12 = _slicedToArray(_useState11, 2),
182
- stopGenerationFunction = _useState12[0],
183
- setStopGenerationFunction = _useState12[1];
184
- var _useState13 = useState(false),
184
+ sendMessageFunction = _useState12[0],
185
+ setSendMessageFunction = _useState12[1];
186
+ var _useState13 = useState(null),
185
187
  _useState14 = _slicedToArray(_useState13, 2),
186
- isStreaming = _useState14[0],
187
- setIsStreaming = _useState14[1];
188
+ stopGenerationFunction = _useState14[0],
189
+ setStopGenerationFunction = _useState14[1];
188
190
  var _useState15 = useState(false),
189
191
  _useState16 = _slicedToArray(_useState15, 2),
190
- isWriting = _useState16[0],
191
- setIsWriting = _useState16[1];
192
+ isStreaming = _useState16[0],
193
+ setIsStreaming = _useState16[1];
192
194
  var _useState17 = useState(false),
193
195
  _useState18 = _slicedToArray(_useState17, 2),
194
- refetchChats = _useState18[0],
195
- setRefetchChats = _useState18[1];
196
- var _useState19 = useState(function () {
196
+ isWriting = _useState18[0],
197
+ setIsWriting = _useState18[1];
198
+ var _useState19 = useState(false),
199
+ _useState20 = _slicedToArray(_useState19, 2),
200
+ refetchChats = _useState20[0],
201
+ setRefetchChats = _useState20[1];
202
+ var _useState21 = useState(function () {
197
203
  var saved = savedSessionOnMountRef.current;
198
204
  if ((saved === null || saved === void 0 ? void 0 : saved.agentsNavActive) === 'myAgents') return options.myAgents;
199
205
  if ((saved === null || saved === void 0 ? void 0 : saved.agentsNavActive) === 'mySkills') return options.mySkills;
200
206
  var savedOption = saved === null || saved === void 0 ? void 0 : saved.currentOption;
201
207
  return savedOption && isValidMaiaPanelOption(savedOption) ? savedOption : options.home;
202
208
  }),
203
- _useState20 = _slicedToArray(_useState19, 2),
204
- currentOption = _useState20[0],
205
- setCurrentOption = _useState20[1];
206
- var _useState21 = useState(false),
207
209
  _useState22 = _slicedToArray(_useState21, 2),
208
- hasError = _useState22[0],
209
- setHasError = _useState22[1];
210
+ currentOption = _useState22[0],
211
+ setCurrentOption = _useState22[1];
212
+ var _useState23 = useState(false),
213
+ _useState24 = _slicedToArray(_useState23, 2),
214
+ hasError = _useState24[0],
215
+ setHasError = _useState24[1];
210
216
  // En project/client/task: el usuario reinició el contexto del orchestrator (lo limpió y pasó por
211
217
  // el selector de contextos recientes). Habilita el botón "volver" en el home paso 2 de esas
212
218
  // secciones. Se resetea al cerrar/reabrir el modal (el componente se desmonta).
213
- var _useState23 = useState(false),
214
- _useState24 = _slicedToArray(_useState23, 2),
215
- didResetContextInSection = _useState24[0],
216
- setDidResetContextInSection = _useState24[1];
219
+ var _useState25 = useState(false),
220
+ _useState26 = _slicedToArray(_useState25, 2),
221
+ didResetContextInSection = _useState26[0],
222
+ setDidResetContextInSection = _useState26[1];
217
223
  var prevHasPinnedContextRef = useRef(false);
218
224
  var handlers = useMemo(function () {
219
225
  return buildHandlers(setCurrentOption, setHasError);
220
226
  }, []);
221
- var _useState25 = useState(false),
222
- _useState26 = _slicedToArray(_useState25, 2),
223
- sidebarHasError = _useState26[0],
224
- setSidebarHasError = _useState26[1];
227
+ var _useState27 = useState(false),
228
+ _useState28 = _slicedToArray(_useState27, 2),
229
+ sidebarHasError = _useState28[0],
230
+ setSidebarHasError = _useState28[1];
225
231
  var resetSelectedChatRef = useRef(null);
226
232
  var lang = i18n.language === 'br' ? 'pt-br' : i18n.language;
227
233
  moment.locale(lang);
@@ -324,15 +330,15 @@ export var ChatAIModal = function ChatAIModal() {
324
330
 
325
331
  // Task panel, planner y banner de proyecto abren en flotante por default (no tapar el contexto detrás).
326
332
  // Fuera de esos contextos se respeta la preferencia guardada en localStorage.
327
- var _useState27 = useState(function () {
333
+ var _useState29 = useState(function () {
328
334
  return resolveInitialMaiaChatLayoutMode({
329
335
  section: section,
330
336
  bannerEntryFaq: bannerEntryFaq
331
337
  });
332
338
  }),
333
- _useState28 = _slicedToArray(_useState27, 2),
334
- layoutMode = _useState28[0],
335
- setLayoutMode = _useState28[1];
339
+ _useState30 = _slicedToArray(_useState29, 2),
340
+ layoutMode = _useState30[0],
341
+ setLayoutMode = _useState30[1];
336
342
  var handleLayoutModeChange = useCallback(function (mode) {
337
343
  setStoredMaiaChatLayoutMode(mode);
338
344
  setLayoutMode(mode);
@@ -340,13 +346,13 @@ export var ChatAIModal = function ChatAIModal() {
340
346
  var expanded = layoutMode === 'fullscreen';
341
347
  var isFloating = layoutMode === 'floating';
342
348
  var contentWrapperRef = useRef(null);
343
- var _useState29 = useState(function () {
349
+ var _useState31 = useState(function () {
344
350
  var _savedSessionOnMountR5, _savedSessionOnMountR6;
345
351
  return (_savedSessionOnMountR5 = (_savedSessionOnMountR6 = savedSessionOnMountRef.current) === null || _savedSessionOnMountR6 === void 0 ? void 0 : _savedSessionOnMountR6.dragPosition) !== null && _savedSessionOnMountR5 !== void 0 ? _savedSessionOnMountR5 : null;
346
352
  }),
347
- _useState30 = _slicedToArray(_useState29, 2),
348
- dragPosition = _useState30[0],
349
- setDragPosition = _useState30[1];
353
+ _useState32 = _slicedToArray(_useState31, 2),
354
+ dragPosition = _useState32[0],
355
+ setDragPosition = _useState32[1];
350
356
  var _useFloatingPanelDrag = useFloatingPanelDragTilt(isFloating),
351
357
  tiltMotion = _useFloatingPanelDrag.tiltMotion,
352
358
  startPointerTracking = _useFloatingPanelDrag.startPointerTracking,
@@ -1102,19 +1108,33 @@ export var ChatAIModal = function ChatAIModal() {
1102
1108
  var isHeaderHomeStep2 = isGlobalMaiaSection(section) && isHomeStep2;
1103
1109
  var isSectionResetHomeStep2 = !isGlobalMaiaSection(section) && isHomeStep2 && didResetContextInSection;
1104
1110
  var showBackButton = (agent === null || agent === void 0 ? void 0 : agent.type) === 'orchestrator' && !hasError && !loading && (isChatView || isHeaderHomeStep2 || isSectionResetHomeStep2);
1105
- var handleOpenMarketplace = useCallback(function () {
1106
- if (!window.MAIA_CHAT_AI_FEATURE_ACCESS_MULTI_AGENTS) {
1107
- return;
1108
- }
1109
- clearAgent();
1110
- setCurrentOption(options.myAgents);
1111
- patchMaiaPanelSession(user.id, {
1112
- agentsNavActive: 'myAgents',
1113
- currentOption: options.myAgents,
1114
- activeChatId: null,
1115
- agentId: null
1116
- });
1117
- }, [clearAgent, user.id]);
1111
+ var handleOpenMarketplace = useCallback(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee3() {
1112
+ return _regeneratorRuntime.wrap(function (_context3) {
1113
+ while (1) switch (_context3.prev = _context3.next) {
1114
+ case 0:
1115
+ if (window.MAIA_CHAT_AI_FEATURE_ACCESS_MULTI_AGENTS) {
1116
+ _context3.next = 1;
1117
+ break;
1118
+ }
1119
+ return _context3.abrupt("return");
1120
+ case 1:
1121
+ _context3.next = 2;
1122
+ return ensureAgentsLoaded();
1123
+ case 2:
1124
+ clearAgent();
1125
+ setCurrentOption(options.myAgents);
1126
+ patchMaiaPanelSession(user.id, {
1127
+ agentsNavActive: 'myAgents',
1128
+ currentOption: options.myAgents,
1129
+ activeChatId: null,
1130
+ agentId: null
1131
+ });
1132
+ case 3:
1133
+ case "end":
1134
+ return _context3.stop();
1135
+ }
1136
+ }, _callee3);
1137
+ })), [clearAgent, ensureAgentsLoaded, user.id]);
1118
1138
  var handleOpenSkills = useCallback(function () {
1119
1139
  if (!window.MAIA_CHAT_AI_FEATURE_ACCESS_MULTI_AGENTS) {
1120
1140
  return;
@@ -1127,46 +1147,46 @@ export var ChatAIModal = function ChatAIModal() {
1127
1147
  currentOption: options.mySkills
1128
1148
  });
1129
1149
  }, [handleGetSkills, user.id]);
1130
- var handleGoToMaiaker = useCallback(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee3() {
1150
+ var handleGoToMaiaker = useCallback(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee4() {
1131
1151
  var maiakerAgent, response, data, _t;
1132
- return _regeneratorRuntime.wrap(function (_context3) {
1133
- while (1) switch (_context3.prev = _context3.next) {
1152
+ return _regeneratorRuntime.wrap(function (_context4) {
1153
+ while (1) switch (_context4.prev = _context4.next) {
1134
1154
  case 0:
1135
1155
  setHasError(false);
1136
1156
  maiakerAgent = agents.data.find(function (a) {
1137
1157
  return isMarketplaceGlobalCloneAgent(a);
1138
1158
  });
1139
1159
  if (maiakerAgent) {
1140
- _context3.next = 5;
1160
+ _context4.next = 5;
1141
1161
  break;
1142
1162
  }
1143
- _context3.prev = 1;
1144
- _context3.next = 2;
1163
+ _context4.prev = 1;
1164
+ _context4.next = 2;
1145
1165
  return fetchMaia({
1146
1166
  path: "agents?agent_type=clone&entity=global&lang=".concat(mapCORLang(i18n.language)),
1147
1167
  method: 'GET'
1148
1168
  });
1149
1169
  case 2:
1150
- response = _context3.sent;
1151
- _context3.next = 3;
1170
+ response = _context4.sent;
1171
+ _context4.next = 3;
1152
1172
  return response.json();
1153
1173
  case 3:
1154
- data = _context3.sent;
1174
+ data = _context4.sent;
1155
1175
  maiakerAgent = (data.data || []).find(function (a) {
1156
1176
  return isMarketplaceGlobalCloneAgent(a);
1157
1177
  });
1158
- _context3.next = 5;
1178
+ _context4.next = 5;
1159
1179
  break;
1160
1180
  case 4:
1161
- _context3.prev = 4;
1162
- _t = _context3["catch"](1);
1163
- return _context3.abrupt("return");
1181
+ _context4.prev = 4;
1182
+ _t = _context4["catch"](1);
1183
+ return _context4.abrupt("return");
1164
1184
  case 5:
1165
1185
  if (maiakerAgent) {
1166
- _context3.next = 6;
1186
+ _context4.next = 6;
1167
1187
  break;
1168
1188
  }
1169
- return _context3.abrupt("return");
1189
+ return _context4.abrupt("return");
1170
1190
  case 6:
1171
1191
  setProject(null);
1172
1192
  setClient === null || setClient === void 0 || setClient(null);
@@ -1184,66 +1204,66 @@ export var ChatAIModal = function ChatAIModal() {
1184
1204
  });
1185
1205
  case 7:
1186
1206
  case "end":
1187
- return _context3.stop();
1207
+ return _context4.stop();
1188
1208
  }
1189
- }, _callee3, null, [[1, 4]]);
1209
+ }, _callee4, null, [[1, 4]]);
1190
1210
  })), [agents.data, i18n.language, selectAgent, setClient, setProject, setTask, user.id]);
1191
1211
  var loadAgentsForSessionRestore = useCallback(/*#__PURE__*/function () {
1192
- var _ref9 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee4(snapshot) {
1212
+ var _ref0 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee5(snapshot) {
1193
1213
  var agentToSelect, _t2;
1194
- return _regeneratorRuntime.wrap(function (_context4) {
1195
- while (1) switch (_context4.prev = _context4.next) {
1214
+ return _regeneratorRuntime.wrap(function (_context5) {
1215
+ while (1) switch (_context5.prev = _context5.next) {
1196
1216
  case 0:
1197
- if (!(snapshot.agentsNavActive === 'myAgents' || snapshot.agentsNavActive === 'mySkills')) {
1198
- _context4.next = 1;
1217
+ if (!(snapshot.agentsNavActive === 'mySkills')) {
1218
+ _context5.next = 1;
1199
1219
  break;
1200
1220
  }
1201
- return _context4.abrupt("return");
1221
+ return _context5.abrupt("return");
1202
1222
  case 1:
1203
- if (!snapshot.agentId) {
1204
- _context4.next = 5;
1223
+ if (!(snapshot.agentId && snapshot.agentsNavActive !== 'myAgents')) {
1224
+ _context5.next = 5;
1205
1225
  break;
1206
1226
  }
1207
- _context4.prev = 2;
1208
- _context4.next = 3;
1227
+ _context5.prev = 2;
1228
+ _context5.next = 3;
1209
1229
  return fetchAgentDetail(snapshot.agentId);
1210
1230
  case 3:
1211
- agentToSelect = _context4.sent;
1212
- _context4.next = 5;
1231
+ agentToSelect = _context5.sent;
1232
+ _context5.next = 5;
1213
1233
  break;
1214
1234
  case 4:
1215
- _context4.prev = 4;
1216
- _t2 = _context4["catch"](2);
1235
+ _context5.prev = 4;
1236
+ _t2 = _context5["catch"](2);
1217
1237
  agentToSelect = undefined;
1218
1238
  case 5:
1219
1239
  if (agentsFetchedRef.current) {
1220
- _context4.next = 7;
1240
+ _context5.next = 7;
1221
1241
  break;
1222
1242
  }
1223
1243
  agentsFetchedRef.current = true;
1224
- _context4.next = 6;
1225
- return handleGetAgents(agentToSelect);
1244
+ _context5.next = 6;
1245
+ return handleGetAgents(snapshot.agentsNavActive === 'myAgents' ? undefined : agentToSelect);
1226
1246
  case 6:
1227
- return _context4.abrupt("return");
1247
+ return _context5.abrupt("return");
1228
1248
  case 7:
1229
- if (agentToSelect) {
1249
+ if (agentToSelect && snapshot.agentsNavActive !== 'myAgents') {
1230
1250
  selectAgent(agentToSelect);
1231
1251
  }
1232
1252
  case 8:
1233
1253
  case "end":
1234
- return _context4.stop();
1254
+ return _context5.stop();
1235
1255
  }
1236
- }, _callee4, null, [[2, 4]]);
1256
+ }, _callee5, null, [[2, 4]]);
1237
1257
  }));
1238
1258
  return function (_x) {
1239
- return _ref9.apply(this, arguments);
1259
+ return _ref0.apply(this, arguments);
1240
1260
  };
1241
1261
  }(), [handleGetAgents, selectAgent]);
1242
1262
  var applySessionRestore = useCallback(/*#__PURE__*/function () {
1243
- var _ref0 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee5(snapshot) {
1263
+ var _ref1 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee6(snapshot) {
1244
1264
  var _snapshot$hostContext;
1245
- return _regeneratorRuntime.wrap(function (_context5) {
1246
- while (1) switch (_context5.prev = _context5.next) {
1265
+ return _regeneratorRuntime.wrap(function (_context6) {
1266
+ while (1) switch (_context6.prev = _context6.next) {
1247
1267
  case 0:
1248
1268
  setIsMinimized(false);
1249
1269
  setChatViewVisible(true);
@@ -1251,34 +1271,36 @@ export var ChatAIModal = function ChatAIModal() {
1251
1271
  setChipsProject(snapshot.hostContext.chipsProject);
1252
1272
  }
1253
1273
  if (!(snapshot.agentsNavActive === 'myAgents')) {
1254
- _context5.next = 1;
1274
+ _context6.next = 2;
1255
1275
  break;
1256
1276
  }
1257
- handleOpenMarketplace();
1277
+ _context6.next = 1;
1278
+ return handleOpenMarketplace();
1279
+ case 1:
1258
1280
  focusChatInput();
1259
1281
  syncPanelSession();
1260
- return _context5.abrupt("return");
1261
- case 1:
1282
+ return _context6.abrupt("return");
1283
+ case 2:
1262
1284
  if (!(snapshot.agentsNavActive === 'mySkills')) {
1263
- _context5.next = 2;
1285
+ _context6.next = 3;
1264
1286
  break;
1265
1287
  }
1266
1288
  handleOpenSkills();
1267
1289
  focusChatInput();
1268
1290
  syncPanelSession();
1269
- return _context5.abrupt("return");
1270
- case 2:
1291
+ return _context6.abrupt("return");
1292
+ case 3:
1271
1293
  if (!(snapshot.agentsNavActive === 'maiaker')) {
1272
- _context5.next = 4;
1294
+ _context6.next = 5;
1273
1295
  break;
1274
1296
  }
1275
- _context5.next = 3;
1297
+ _context6.next = 4;
1276
1298
  return handleGoToMaiaker();
1277
- case 3:
1299
+ case 4:
1278
1300
  focusChatInput();
1279
1301
  syncPanelSession();
1280
- return _context5.abrupt("return");
1281
- case 4:
1302
+ return _context6.abrupt("return");
1303
+ case 5:
1282
1304
  if (snapshot.currentOption === options.chat && snapshot.activeChatId) {
1283
1305
  setUserInitialMessage({
1284
1306
  message: '',
@@ -1293,14 +1315,14 @@ export var ChatAIModal = function ChatAIModal() {
1293
1315
  }
1294
1316
  focusChatInput();
1295
1317
  syncPanelSession();
1296
- case 5:
1318
+ case 6:
1297
1319
  case "end":
1298
- return _context5.stop();
1320
+ return _context6.stop();
1299
1321
  }
1300
- }, _callee5);
1322
+ }, _callee6);
1301
1323
  }));
1302
1324
  return function (_x2) {
1303
- return _ref0.apply(this, arguments);
1325
+ return _ref1.apply(this, arguments);
1304
1326
  };
1305
1327
  }(), [focusChatInput, handleGoToMaiaker, handleOpenMarketplace, handleOpenSkills, handlers, setChatViewVisible, setChipsProject, syncPanelSession]);
1306
1328
  useEffect(function () {
@@ -1309,24 +1331,29 @@ export var ChatAIModal = function ChatAIModal() {
1309
1331
  sessionRestoreStartedRef.current = true;
1310
1332
  setChatViewVisible(true);
1311
1333
  var runRestore = /*#__PURE__*/function () {
1312
- var _ref1 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee6() {
1313
- return _regeneratorRuntime.wrap(function (_context6) {
1314
- while (1) switch (_context6.prev = _context6.next) {
1334
+ var _ref10 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee7() {
1335
+ return _regeneratorRuntime.wrap(function (_context7) {
1336
+ while (1) switch (_context7.prev = _context7.next) {
1315
1337
  case 0:
1316
- _context6.next = 1;
1338
+ _context7.prev = 0;
1339
+ _context7.next = 1;
1317
1340
  return loadAgentsForSessionRestore(snapshot);
1318
1341
  case 1:
1319
1342
  pendingSessionRestoreRef.current = null;
1320
- _context6.next = 2;
1343
+ _context7.next = 2;
1321
1344
  return applySessionRestore(snapshot);
1322
1345
  case 2:
1346
+ _context7.prev = 2;
1347
+ setIsRestoringSession(false);
1348
+ return _context7.finish(2);
1349
+ case 3:
1323
1350
  case "end":
1324
- return _context6.stop();
1351
+ return _context7.stop();
1325
1352
  }
1326
- }, _callee6);
1353
+ }, _callee7, null, [[0,, 2, 3]]);
1327
1354
  }));
1328
1355
  return function runRestore() {
1329
- return _ref1.apply(this, arguments);
1356
+ return _ref10.apply(this, arguments);
1330
1357
  };
1331
1358
  }();
1332
1359
  runRestore()["catch"](function () {
@@ -1419,7 +1446,8 @@ export var ChatAIModal = function ChatAIModal() {
1419
1446
  onDeleteSkill: removeSkill,
1420
1447
  onSearchAgents: searchCustomAgents,
1421
1448
  searchLoadingAgents: searchLoading,
1422
- agentError: agentError
1449
+ agentError: agentError,
1450
+ isRestoringSession: isRestoringSession
1423
1451
  }) : /*#__PURE__*/_jsx(ProjectSummaryContent, {
1424
1452
  onRestartSummary: handlers.home
1425
1453
  }), (computedCurrentOption === options.home && !!(agents !== null && agents !== void 0 && (_agents$data = agents.data) !== null && _agents$data !== void 0 && _agents$data.length) || computedCurrentOption === options.chat) && !isMaiakerCreatorHome && !hasError && !loading && validateAccessByFeature(section, user) && /*#__PURE__*/_jsx(ChatAiModalFooter, {
@@ -1473,4 +1501,4 @@ export var ChatAIModal = function ChatAIModal() {
1473
1501
  }), userHasPermissions && /*#__PURE__*/_jsx(AbmSkillGenerateModal, {}), /*#__PURE__*/_jsx(Snackbar, {})]
1474
1502
  }), selector);
1475
1503
  };
1476
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZU1lbW8iLCJ1c2VTdGF0ZSIsInVzZVJlZiIsInVzZUVmZmVjdCIsInVzZUxheW91dEVmZmVjdCIsIlJlYWN0RE9NIiwibW9tZW50IiwidXNlVHJhbnNsYXRpb24iLCJ1c2VVc2VyIiwiY2FuQWNjZXNzVG9DaGF0QUkiLCJNQUlBRXJyb3IiLCJ1c2VNYWlhVGFza1BhbmVsWkluZGV4IiwiQ2hhdEFJQ29udGVudCIsImJ1aWxkSGFuZGxlcnMiLCJvcHRpb25zIiwiU2lkZWJhciIsInVzZUdldEFnZW50cyIsInVzZUdldFNraWxscyIsInVzZUdsb2JhbENvbnRleHQiLCJDaGF0QUlNb2RhbEhlYWRlciIsIlNuYWNrYmFyIiwiUHJvamVjdFN1bW1hcnlDb250ZW50IiwiQWJtQWdlbnRNb2RhbCIsIkFibVNraWxsTW9kYWwiLCJBYm1Ta2lsbEdlbmVyYXRlTW9kYWwiLCJTRUNUSU9OUyIsIlNDQ0FJTUNvbnRlbnQiLCJTQ0NBSU1Db250ZW50V3JhcHBlciIsIlNDQ0FJTU1pbmltaXplZEhpZGUiLCJTQ0NBSU1XcmFwcGVyIiwiTWFpYU1pbmltaXplZFBpbGwiLCJnZXRNYWlhRmxvYXRpbmdQYW5lbFdpZHRoUHgiLCJyZXNvbHZlSW5pdGlhbE1haWFDaGF0TGF5b3V0TW9kZSIsInNldFN0b3JlZE1haWFDaGF0TGF5b3V0TW9kZSIsIkZsb2F0aW5nUGFuZWxNb3Rpb24iLCJ1c2VGbG9hdGluZ1BhbmVsRHJhZ1RpbHQiLCJDaGF0QWlNb2RhbEZvb3RlciIsInZhbGlkYXRlSXNNYWlhIiwiaXNNYXJrZXRwbGFjZUdsb2JhbENsb25lQWdlbnQiLCJ1c2VGYXFzU3RvcmUiLCJnZXRDaGF0c1N0b3JlU3RhdGUiLCJ1c2VDaGF0c1N0b3JlIiwicmVhZExhc3RBY3RpdmVDaGF0SWQiLCJ3cml0ZUxhc3RBY3RpdmVDaGF0SWQiLCJjbGVhck1haWFQYW5lbFNlc3Npb24iLCJpc1ZhbGlkTWFpYVBhbmVsT3B0aW9uIiwicGF0Y2hNYWlhUGFuZWxTZXNzaW9uIiwicmVhZE1haWFQYW5lbFNlc3Npb24iLCJ3cml0ZU1haWFQYW5lbFNlc3Npb24iLCJ1c2VTZXNzaW9uc1N0b3JlIiwiaXNBY3RpdmVTZXNzaW9uU3RhdHVzIiwiZmV0Y2hNYWlhIiwiZmV0Y2hBZ2VudERldGFpbCIsIm1hcENPUkxhbmciLCJFVkVOVFMiLCJ1c2VFdmVudCIsIk1BSUFfT1BFTl9GUk9NX0hPU1RfRVZFTlQiLCJqc3giLCJfanN4IiwianN4cyIsIl9qc3hzIiwiRnJhZ21lbnQiLCJfRnJhZ21lbnQiLCJMRUdBQ1lfQ09OVEVYVF9FTlRJVElFUyIsImlzR2xvYmFsTWFpYVNlY3Rpb24iLCJzZWN0aW9uIiwicmVzb2x2ZUFpQ2hhdEJhY2tEZXN0aW5hdGlvbiIsImFnZW50VHlwZSIsImN1cnJlbnRPcHRpb24iLCJob21lT3B0aW9uIiwiSURfTU9EQUxfQ0hBVF9BR0VOVCIsInZhbGlkYXRlQWNjZXNzQnlGZWF0dXJlIiwidXNlciIsIkJvb2xlYW4iLCJ3aW5kb3ciLCJNQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1MiLCJNQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1NfTVVMVElfQUdFTlRTIiwiQ2hhdEFJTW9kYWwiLCJfc2F2ZWRTZXNzaW9uT25Nb3VudFIiLCJfc2F2ZWRTZXNzaW9uT25Nb3VudFIyIiwiX3NhdmVkU2Vzc2lvbk9uTW91bnRSMyIsIl9zYXZlZFNlc3Npb25Pbk1vdW50UjQiLCJfdXNlciRwZXJtaXNzaW9ucyIsIl91c2VyJHBlcm1pc3Npb25zMiIsIl91c2VyJHBlcm1pc3Npb25zMyIsIl9zYXZlZFNlc3Npb25Pbk1vdW50UjciLCJfc2F2ZWRTZXNzaW9uT25Nb3VudFI4IiwiX2FnZW50cyRkYXRhIiwiX3VzZVRyYW5zbGF0aW9uIiwiYWJtQWdlbnQiLCJpMThuIiwiYW1wbGl0dWRFdmVudCIsInNhdmVkU2Vzc2lvbk9uTW91bnRSZWYiLCJpZCIsInNob3VsZFJlc3RvcmVFeHBhbmRlZCIsImN1cnJlbnQiLCJpc0V4cGFuZGVkIiwicGVuZGluZ1Nlc3Npb25SZXN0b3JlUmVmIiwic2Vzc2lvblJlc3RvcmVTdGFydGVkUmVmIiwic2lkZWJhck9wZW5SZWYiLCJzaWRlYmFyT3BlbiIsIl91c2VTdGF0ZSIsIl91c2VTdGF0ZTIiLCJfc2xpY2VkVG9BcnJheSIsImlzTWluaW1pemVkIiwic2V0SXNNaW5pbWl6ZWQiLCJzZXRDaGF0Vmlld1Zpc2libGUiLCJzdGF0ZSIsInVucmVhZENvdW50IiwiYWN0aXZlQ2hhdElkIiwiaGFzQWN0aXZlU3RyZWFtIiwiT2JqZWN0IiwidmFsdWVzIiwibWV0YSIsInNvbWUiLCJzdGF0dXMiLCJnb1RvQ2hhdFJlZiIsImdvSG9tZVJlZiIsImhhbmRsZU1pbmltaXplIiwiYWlDaGF0TWluaW1pemUiLCJmb2N1c0NoYXRJbnB1dCIsInNldFRpbWVvdXQiLCJkb2N1bWVudCIsImRpc3BhdGNoRXZlbnQiLCJDdXN0b21FdmVudCIsIl91c2VTdGF0ZTMiLCJtZXNzYWdlIiwiYXR0YWNobWVudHMiLCJfdXNlU3RhdGU0IiwidXNlckluaXRpYWxNZXNzYWdlIiwic2V0VXNlckluaXRpYWxNZXNzYWdlIiwiX3VzZVN0YXRlNSIsIl91c2VTdGF0ZTYiLCJpbml0aWFsQ2hhdElkIiwic2V0SW5pdGlhbENoYXRJZCIsIl91c2VTdGF0ZTciLCJfdXNlU3RhdGU4IiwibmV3Q2hhdEtleSIsInNldE5ld0NoYXRLZXkiLCJfdXNlU3RhdGU5IiwiX3VzZVN0YXRlMCIsInNlc3Npb25NZXRhIiwic2V0U2Vzc2lvbk1ldGEiLCJfdXNlU3RhdGUxIiwiX3VzZVN0YXRlMTAiLCJzZW5kTWVzc2FnZUZ1bmN0aW9uIiwic2V0U2VuZE1lc3NhZ2VGdW5jdGlvbiIsIl91c2VTdGF0ZTExIiwiX3VzZVN0YXRlMTIiLCJzdG9wR2VuZXJhdGlvbkZ1bmN0aW9uIiwic2V0U3RvcEdlbmVyYXRpb25GdW5jdGlvbiIsIl91c2VTdGF0ZTEzIiwiX3VzZVN0YXRlMTQiLCJpc1N0cmVhbWluZyIsInNldElzU3RyZWFtaW5nIiwiX3VzZVN0YXRlMTUiLCJfdXNlU3RhdGUxNiIsImlzV3JpdGluZyIsInNldElzV3JpdGluZyIsIl91c2VTdGF0ZTE3IiwiX3VzZVN0YXRlMTgiLCJyZWZldGNoQ2hhdHMiLCJzZXRSZWZldGNoQ2hhdHMiLCJfdXNlU3RhdGUxOSIsInNhdmVkIiwiYWdlbnRzTmF2QWN0aXZlIiwibXlBZ2VudHMiLCJteVNraWxscyIsInNhdmVkT3B0aW9uIiwiaG9tZSIsIl91c2VTdGF0ZTIwIiwic2V0Q3VycmVudE9wdGlvbiIsIl91c2VTdGF0ZTIxIiwiX3VzZVN0YXRlMjIiLCJoYXNFcnJvciIsInNldEhhc0Vycm9yIiwiX3VzZVN0YXRlMjMiLCJfdXNlU3RhdGUyNCIsImRpZFJlc2V0Q29udGV4dEluU2VjdGlvbiIsInNldERpZFJlc2V0Q29udGV4dEluU2VjdGlvbiIsInByZXZIYXNQaW5uZWRDb250ZXh0UmVmIiwiaGFuZGxlcnMiLCJfdXNlU3RhdGUyNSIsIl91c2VTdGF0ZTI2Iiwic2lkZWJhckhhc0Vycm9yIiwic2V0U2lkZWJhckhhc0Vycm9yIiwicmVzZXRTZWxlY3RlZENoYXRSZWYiLCJsYW5nIiwibGFuZ3VhZ2UiLCJsb2NhbGUiLCJfdXNlR2xvYmFsQ29udGV4dCIsInNlbGVjdEFnZW50IiwiY2xlYXJBZ2VudCIsImFnZW50IiwicHJvamVjdCIsImNsaWVudCIsInRhc2siLCJjaGlwc1Byb2plY3QiLCJ0b2dnbGVXZWJTZWFyY2giLCJpc1dlYlNlYXJjaEFjdGl2ZSIsInNldENoaXBzUHJvamVjdCIsInNldENsaWVudCIsInNldFByb2plY3QiLCJiYW5uZXJFbnRyeUZhcSIsInNldFRhc2siLCJ0b29sdGlwWkluZGV4IiwiX3VzZUdldEFnZW50cyIsImhhbmRsZUdvSG9tZSIsImFnZW50cyIsImxvYWRpbmciLCJsb2FkaW5nTW9yZSIsImFnZW50RXJyb3IiLCJlcnJvciIsImhhbmRsZUdldEFnZW50cyIsImxvYWRNb3JlQWdlbnRzIiwic2VhcmNoQ3VzdG9tQWdlbnRzIiwic2VhcmNoTG9hZGluZyIsImFkZEFnZW50IiwicmVtb3ZlQWdlbnQiLCJ1cGRhdGVBZ2VudCIsInVwZGF0ZUFnZW50RmF2b3JpdGUiLCJzZWxlY3RGaXJzdEFnZW50Iiwic29ydEFnZW50c0xpc3QiLCJfdXNlR2V0U2tpbGxzIiwic2tpbGxzIiwibG9hZGluZ1NraWxscyIsImhhbmRsZUdldFNraWxscyIsImFkZFNraWxsIiwidXBkYXRlU2tpbGxJbkxpc3QiLCJyZW1vdmVTa2lsbCIsImlzTUFJQSIsInVzZXJIYXNQZXJtaXNzaW9ucyIsInBlcm1pc3Npb25zIiwiYWlfYWdlbnRzIiwiY3JlYXRlIiwiZWRpdCIsImNvbXB1dGVkQ3VycmVudE9wdGlvbiIsImlzR2xvYmFsU3BlY2lhbGlzdCIsImVudGl0eSIsImlzUHJvamVjdFNwZWNpYWxpc3QiLCJpc0NsaWVudFNwZWNpYWxpc3QiLCJpc01haWFrZXIiLCJ0eXBlIiwiY2hhdCIsInNob3VsZFNob3dQcm9qZWN0U2VsZWN0b3IiLCJzaG91bGRTaG93Q2xpZW50U2VsZWN0b3IiLCJwcm9qZWN0U2VsZWN0b3IiLCJjbGllbnRTZWxlY3RvciIsIm5hbWUiLCJpc01haWFrZXJBZ2VudFNlbGVjdGVkIiwic2lkZWJhckFnZW50c05hdkFjdGl2ZSIsImFnZW50c0ZldGNoZWRSZWYiLCJzZWxlY3RvciIsInF1ZXJ5U2VsZWN0b3IiLCJjb25jYXQiLCJfdXNlU3RhdGUyNyIsIl91c2VTdGF0ZTI4IiwibGF5b3V0TW9kZSIsInNldExheW91dE1vZGUiLCJoYW5kbGVMYXlvdXRNb2RlQ2hhbmdlIiwibW9kZSIsImV4cGFuZGVkIiwiaXNGbG9hdGluZyIsImNvbnRlbnRXcmFwcGVyUmVmIiwiX3VzZVN0YXRlMjkiLCJfc2F2ZWRTZXNzaW9uT25Nb3VudFI1IiwiX3NhdmVkU2Vzc2lvbk9uTW91bnRSNiIsImRyYWdQb3NpdGlvbiIsIl91c2VTdGF0ZTMwIiwic2V0RHJhZ1Bvc2l0aW9uIiwiX3VzZUZsb2F0aW5nUGFuZWxEcmFnIiwidGlsdE1vdGlvbiIsInN0YXJ0UG9pbnRlclRyYWNraW5nIiwic2FtcGxlUG9pbnRlck1vdmUiLCJlbmRQb2ludGVyVHJhY2tpbmciLCJkcmFnU3RhdGVSZWYiLCJjbGFtcERyYWdQb3NpdGlvbiIsIngiLCJ5IiwiY29udGVudFdyYXBwZXIiLCJfY29udGVudFdyYXBwZXIkZ2V0Qm8iLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJ3aWR0aCIsImhlaWdodCIsIm9mZnNldCIsIm1heFgiLCJNYXRoIiwibWF4IiwiaW5uZXJXaWR0aCIsIm1heFkiLCJpbm5lckhlaWdodCIsIm1pbiIsInByZXYiLCJwYWQiLCJoYW5kbGVEcmFnRW5kIiwiZXZlbnQiLCJfZHJhZ1N0YXRlUmVmJGN1cnJlbnQiLCJwb2ludGVySWQiLCJib2R5Iiwic3R5bGUiLCJ1c2VyU2VsZWN0IiwiY3Vyc29yIiwicmVjdCIsImxlZnQiLCJ0b3AiLCJoYW5kbGVEcmFnTW92ZSIsImRyYWdTdGF0ZSIsImNsaWVudFgiLCJjbGllbnRZIiwibmV4dFBvc2l0aW9uIiwib2Zmc2V0WCIsIm9mZnNldFkiLCJyZXNvbHZlZERyYWdQb3NpdGlvbiIsImhhbmRsZURyYWdTdGFydCIsImJ1dHRvbiIsInRhcmdldCIsImNsb3Nlc3QiLCJpbml0aWFsUG9zaXRpb24iLCJwb2ludGVyT2Zmc2V0WCIsInBvaW50ZXJPZmZzZXRZIiwiY3VycmVudFRhcmdldCIsInNldFBvaW50ZXJDYXB0dXJlIiwicHJldmVudERlZmF1bHQiLCJhaUNoYXREcmFnZ2FibGUiLCJzdGFydENoYXQiLCJmYXFJZCIsImFnZW50U3VnZ2VzdGlvbklkIiwibWVudGlvbnMiLCJmdWFJZCIsInNjSWQiLCJjb250ZXh0RGF0YSIsIl9vYmplY3RTcHJlYWQiLCJsZW5ndGgiLCJiYW5uZXJGYXFBdXRvU2VudFJlZiIsIl9iYW5uZXJFbnRyeUZhcSRmYXFUaSIsImVudGl0eVJlYWR5IiwiZmFxVGl0bGUiLCJ0cmltIiwidW5kZWZpbmVkIiwiZ29Ub0NoYXQiLCJzZXNzaW9uRXh0ZXJuYWxJZCIsInNlbGVjdGVkQWdlbnQiLCJkYXRhIiwiZmluZCIsImFnZW50SXRlbSIsImFnZW50SWQiLCJoYW5kbGVTaWRlYmFyT3BlbkNoYW5nZSIsIm9wZW4iLCJzeW5jUGFuZWxTZXNzaW9uIiwiX2FnZW50JGlkIiwiaG9zdENvbnRleHQiLCJlbnN1cmVBZ2VudHNMb2FkZWQiLCJfYXN5bmNUb0dlbmVyYXRvciIsIl9yZWdlbmVyYXRvclJ1bnRpbWUiLCJtYXJrIiwiX2NhbGxlZSIsIndyYXAiLCJfY29udGV4dCIsIm5leHQiLCJhYnJ1cHQiLCJzdG9wIiwidGltZXIiLCJjbGVhclRpbWVvdXQiLCJvblBhZ2VIaWRlIiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJoYW5kbGVSZXN0b3JlRnJvbU1pbmltaXplZCIsImFpQ2hhdE9wZW4iLCJvcHRpb24iLCJ0aGVuIiwiX2NoYXRzJGZpbmQiLCJfZ2V0Q2hhdHNTdG9yZVN0YXRlIiwiY2hhdHMiLCJsYXN0QWN0aXZlQ2hhdElkIiwiaXNSZWFkIiwiX2dvVG9DaGF0UmVmJGN1cnJlbnQiLCJjYWxsIiwiX2dvSG9tZVJlZiRjdXJyZW50IiwiYXBwbHlFeHBhbmRlZEhvc3RUYWtlb3ZlciIsImRldGFpbCIsIl9yZXNldFNlbGVjdGVkQ2hhdFJlZiIsIl9hZ2VudCRpZDIiLCJfZGV0YWlsJHByb2plY3QyIiwiX2RldGFpbCRjbGllbnQyIiwiX2RldGFpbCR0YXNrMiIsImdldFN0YXRlIiwiY2xlYXJGYXFzIiwic2V0QWN0aXZlQ2hhdElkIiwiX2RldGFpbCRwcm9qZWN0IiwiX2RldGFpbCRjbGllbnQiLCJfZGV0YWlsJHRhc2siLCJuZXh0TGF5b3V0IiwiZmFxIiwiaGFuZGxlU2VuZE1lc3NhZ2VSZWFkeSIsInNlbmRNZXNzYWdlIiwic3RvcEdlbmVyYXRpb24iLCJzdHJlYW1pbmciLCJ3cml0aW5nIiwiaGFuZGxlU2VuZE1lc3NhZ2UiLCJpc19kZWxldGVkIiwiaGFzX25vdF9wZXJtaXNzaW9ucyIsImhhc19ub3RfYWNjZXNzIiwicHJvamVjdF9kZWxldGVkIiwiaGFuZGxlU3RhcnROZXdDaGF0IiwiZnJvbU15QWdlbnRzIiwiZnJvbU1haWFrZXJIb21lIiwiX3Jlc2V0U2VsZWN0ZWRDaGF0UmVmMiIsImZpcnN0QWdlbnQiLCJoYW5kbGVSZXNldENoYXQiLCJfY2FsbGVlMiIsIl9jb250ZXh0MiIsImhhbmRsZUJhY2siLCJ0byIsImFpQ2hhdEJhY2siLCJwaW5uZWQiLCJwcm9qZWN0SWQiLCJ3YXNQaW5uZWQiLCJvbk1lcmdlQ3JlYXRlZEFnZW50IiwiZXZ0IiwiX3JlZjMiLCJuZXh0QWdlbnQiLCJuYXZpZ2F0ZUhvbWUiLCJvblN5bmNFZGl0ZWRBZ2VudCIsIl9yZWY0Iiwib3BlbkNoYXRWaWV3Iiwib3BlbkhvbWUiLCJjbGllbnRJZCIsIm9wZW5Gcm9tSG9zdCIsIl9yZWY1Iiwib3Blbk5ld0NoYXRXaXRoQWdlbnQiLCJfZGV0YWlsJHByb2plY3QzIiwiX2RldGFpbCRjbGllbnQzIiwiX3JlZjYiLCJvblNlc3Npb25NZXRhIiwiX3JlZjciLCJsZWdhY3lDb250ZXh0U2Vzc2lvbiIsImFnZW50RW50aXR5IiwiaW5jbHVkZXMiLCJjb250ZXh0TmFtZSIsInRhc2tOYW1lIiwicHJvamVjdE5hbWUiLCJjbGllbnROYW1lIiwiZW50aXR5VHlwZSIsImlzX2xlZ2FjeV9jb250ZXh0IiwiaGFuZGxlQ29udGludWVMZWdhY3lDb250ZXh0SW5OZXdDaGF0IiwicElkIiwicE5hbWUiLCJjSWQiLCJjTmFtZSIsInRJZCIsInRhc2tJZCIsInROYW1lIiwib3JjaGVzdHJhdG9yIiwiYSIsIlN0cmluZyIsInNob3dOZXdDaGF0IiwiaGlkZUhlYWRlckFnZW50U2VsZWN0b3IiLCJpc015QWdlbnRzU2VjdGlvbiIsImhhc1Bpbm5lZENvbnRleHQiLCJpc0NoYXRWaWV3IiwiaXNIb21lU3RlcDIiLCJpc0hlYWRlckhvbWVTdGVwMiIsImlzU2VjdGlvblJlc2V0SG9tZVN0ZXAyIiwic2hvd0JhY2tCdXR0b24iLCJoYW5kbGVPcGVuTWFya2V0cGxhY2UiLCJoYW5kbGVPcGVuU2tpbGxzIiwiaGFuZGxlR29Ub01haWFrZXIiLCJfY2FsbGVlMyIsIm1haWFrZXJBZ2VudCIsInJlc3BvbnNlIiwiX3QiLCJfY29udGV4dDMiLCJwYXRoIiwibWV0aG9kIiwic2VudCIsImpzb24iLCJsb2FkQWdlbnRzRm9yU2Vzc2lvblJlc3RvcmUiLCJfcmVmOSIsIl9jYWxsZWU0Iiwic25hcHNob3QiLCJhZ2VudFRvU2VsZWN0IiwiX3QyIiwiX2NvbnRleHQ0IiwiX3giLCJhcHBseSIsImFyZ3VtZW50cyIsImFwcGx5U2Vzc2lvblJlc3RvcmUiLCJfcmVmMCIsIl9jYWxsZWU1IiwiX3NuYXBzaG90JGhvc3RDb250ZXh0IiwiX2NvbnRleHQ1IiwiX3gyIiwicnVuUmVzdG9yZSIsIl9yZWYxIiwiX2NhbGxlZTYiLCJfY29udGV4dDYiLCJoYW5kbGVEZWxldGVBZ2VudEZyb21NeUFnZW50cyIsImlzTWFpYWtlckNyZWF0b3JIb21lIiwibW9kYWxQYW5lbCIsImNoaWxkcmVuIiwib25Hb1RvQ2hhdCIsIm9uRXJyb3IiLCJoYW5kbGVHb1RvSG9tZSIsImhhbmRsZVNldFJlZmV0Y2hDaGF0cyIsIm9uT3Blbk1haWFrZXJDcmVhdG9yIiwiaXNMZWdhY3lDb250ZXh0U2Vzc2lvbiIsImluaXRpYWxPcGVuIiwib25PcGVuQ2hhbmdlIiwiZmxvYXRpbmciLCJvbkxheW91dE1vZGVDaGFuZ2UiLCJkcmFnZ2FibGUiLCJvbkRyYWdTdGFydCIsIm9uRHJhZ01vdmUiLCJvbkRyYWdFbmQiLCJoYXNNb3JlIiwiaGFzX21vcmUiLCJvbkFnZW50VXBkYXRlIiwiaXNNYWlha2VyU2VjdGlvbiIsImhpZGVBZ2VudFNlbGVjdG9yIiwib25CYWNrIiwicmVmcyIsIm9uU2VuZE1lc3NhZ2VSZWFkeSIsImxvYWRpbmdBZ2VudHMiLCJvbkRlbGV0ZUFnZW50Iiwib25GYXZvcml0ZUFnZW50VXBkYXRlIiwiaGFzTW9yZUFnZW50cyIsImxvYWRpbmdNb3JlQWdlbnRzIiwib25Mb2FkTW9yZUFnZW50cyIsIm9uR29Ub01haWFrZXIiLCJvbkRlbGV0ZVNraWxsIiwib25TZWFyY2hBZ2VudHMiLCJzZWFyY2hMb2FkaW5nQWdlbnRzIiwib25SZXN0YXJ0U3VtbWFyeSIsImhhbmRsZVN0b3BHZW5lcmF0aW9uIiwiY2hhdElkIiwib25Db250aW51ZUluTmV3Q2hhdCIsInJlZiIsImNyZWF0ZVBvcnRhbCIsImVsZXZhdGVkIiwiJG1pbmltaXplZCIsIiRoaWRkZW4iLCJ0aWx0Iiwib25SZXN0b3JlIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvbW9sZWN1bGVzL0NoYXRBSU1vZGFsL0NoYXRBSU1vZGFsLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby1uZXN0ZWQtdGVybmFyeSAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L2luZGVudCAqL1xuLyogZXNsaW50LWRpc2FibGUgcmVhY3QvanN4LW5vLXVzZWxlc3MtZnJhZ21lbnQgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbi8qIGVzbGludC1kaXNhYmxlIHJlYWN0L25vLWFycmF5LWluZGV4LWtleSAqL1xuLyogZXNsaW50LWRpc2FibGUganN4LWExMXkvY2xpY2stZXZlbnRzLWhhdmUta2V5LWV2ZW50cyAqL1xuLyogZXNsaW50LWRpc2FibGUganN4LWExMXkvbm8tc3RhdGljLWVsZW1lbnQtaW50ZXJhY3Rpb25zICovXG4vKiBlc2xpbnQtZGlzYWJsZSByZWFjdC9mdW5jdGlvbi1jb21wb25lbnQtZGVmaW5pdGlvbiAqL1xuLyogZXNsaW50LWRpc2FibGUgcmVhY3QvcmVxdWlyZS1kZWZhdWx0LXByb3BzICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1jb25zb2xlICovXG5pbXBvcnQge1xuICB1c2VDYWxsYmFjayxcbiAgdXNlTWVtbyxcbiAgdXNlU3RhdGUsXG4gIHVzZVJlZixcbiAgdXNlRWZmZWN0LFxuICB1c2VMYXlvdXRFZmZlY3QsXG4gIFBvaW50ZXJFdmVudCBhcyBSZWFjdFBvaW50ZXJFdmVudCxcbn0gZnJvbSAncmVhY3QnXG5pbXBvcnQgUmVhY3RET00gZnJvbSAncmVhY3QtZG9tJ1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnXG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJ3JlYWN0LWkxOG5leHQnXG5pbXBvcnQgeyB1c2VVc2VyIH0gZnJvbSAnLi4vLi4vLi4vY29udGV4dC9jb3ItdXNlcidcbmltcG9ydCB7IGNhbkFjY2Vzc1RvQ2hhdEFJIH0gZnJvbSAnLi4vLi4vLi4vY29uc3RhbnRzL3Blcm1pc3Npb25zJ1xuaW1wb3J0IHsgTUFJQUVycm9yIH0gZnJvbSAnLi4vLi4vYXRvbXMvTUFJQUVycm9yJ1xuaW1wb3J0IHsgdXNlTWFpYVRhc2tQYW5lbFpJbmRleCB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZU1haWFUYXNrUGFuZWxaSW5kZXgnXG5cbmltcG9ydCB7IENoYXRBSUNvbnRlbnQgfSBmcm9tICcuLi9DaGF0QUlDb250ZW50J1xuaW1wb3J0IHsgYnVpbGRIYW5kbGVycywgb3B0aW9ucyB9IGZyb20gJy4vY29uc3RhbnRzJ1xuaW1wb3J0IHsgU2lkZWJhciB9IGZyb20gJy4uL1NpZGViYXInXG5pbXBvcnQgeyB1c2VHZXRBZ2VudHMgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9tYWlhL0FnZW50cy9nZXRBZ2VudHMnXG5pbXBvcnQgeyB1c2VHZXRTa2lsbHMgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9tYWlhL1NraWxscy9nZXRTa2lsbHMnXG5pbXBvcnQgeyB1c2VHbG9iYWxDb250ZXh0LCB0eXBlIFNlY3Rpb24gfSBmcm9tICcuLi8uLi8uLi9jb250ZXh0L2dsb2JhbC1jb250ZXh0J1xuaW1wb3J0IHsgQXR0YWNobWVudEZpbGUgfSBmcm9tICcuLi9DaGF0Rm9vdGVyL0NoYXRGb290ZXInXG5pbXBvcnQgeyBDb250ZXh0TWVudGlvbiB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL2NvbnRleHRNZW50aW9uJ1xuaW1wb3J0IHsgQ2hhdEFJTW9kYWxIZWFkZXIgfSBmcm9tICcuL2NvbXBvbmVudHMvQ2hhdEFpTW9kYWxIZWFkZXIvQ2hhdEFpTW9kYWxIZWFkZXInXG5pbXBvcnQgeyBTbmFja2JhciB9IGZyb20gJy4uLy4uL29yZ2FuaXNtcy9TbmFja0Jhci9TbmFja2JhcidcbmltcG9ydCB7IFByb2plY3RTdW1tYXJ5Q29udGVudCB9IGZyb20gJy4uL1Byb2plY3RTdW1tYXJ5Q29udGVudCdcbmltcG9ydCB7IEFibUFnZW50TW9kYWwgfSBmcm9tICcuLi8uLi9vcmdhbmlzbXMvQWJtQWdlbnRNb2RhbC9BYm1BZ2VudE1vZGFsJ1xuaW1wb3J0IHsgQWJtU2tpbGxNb2RhbCB9IGZyb20gJy4uLy4uL29yZ2FuaXNtcy9BYm1Ta2lsbE1vZGFsL0FibVNraWxsTW9kYWwnXG5pbXBvcnQgeyBBYm1Ta2lsbEdlbmVyYXRlTW9kYWwgfSBmcm9tICcuLi8uLi9vcmdhbmlzbXMvQWJtU2tpbGxHZW5lcmF0ZU1vZGFsL0FibVNraWxsR2VuZXJhdGVNb2RhbCdcbmltcG9ydCB7IFNFQ1RJT05TIH0gZnJvbSAnLi4vLi4vLi4vY29uc3RhbnRzL2NvbmZpZydcbmltcG9ydCB7IFNDQ0FJTUNvbnRlbnQsIFNDQ0FJTUNvbnRlbnRXcmFwcGVyLCBTQ0NBSU1NaW5pbWl6ZWRIaWRlLCBTQ0NBSU1XcmFwcGVyIH0gZnJvbSAnLi9DaGF0QUlNb2RhbC5zdHlsZXMnXG5pbXBvcnQgeyBNYWlhTWluaW1pemVkUGlsbCB9IGZyb20gJy4vY29tcG9uZW50cy9NYWlhTWluaW1pemVkUGlsbCdcbmltcG9ydCB7XG4gIGdldE1haWFGbG9hdGluZ1BhbmVsV2lkdGhQeCxcbiAgTWFpYUNoYXRNb2RhbExheW91dE1vZGUsXG4gIHJlc29sdmVJbml0aWFsTWFpYUNoYXRMYXlvdXRNb2RlLFxuICBzZXRTdG9yZWRNYWlhQ2hhdExheW91dE1vZGUsXG59IGZyb20gJy4vbGF5b3V0J1xuaW1wb3J0IHsgRmxvYXRpbmdQYW5lbE1vdGlvbiwgdXNlRmxvYXRpbmdQYW5lbERyYWdUaWx0IH0gZnJvbSAnLi9mbG9hdGluZ1BhbmVsTW90aW9uJ1xuaW1wb3J0IHsgQ2hhdEFpTW9kYWxGb290ZXIgfSBmcm9tICcuL2NvbXBvbmVudHMvQ2hhdEFpTW9kYWxGb290ZXInXG5pbXBvcnQgeyB2YWxpZGF0ZUlzTWFpYSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3V0aWxzL3ZhbGlkYXRlSXNNYWlhJ1xuaW1wb3J0IHsgaXNNYXJrZXRwbGFjZUdsb2JhbENsb25lQWdlbnQgfSBmcm9tICcuLi8uLi8uLi91dGlscy9hZ2VudERpc3BsYXlOYW1lJ1xuaW1wb3J0IHsgQWdlbnQgfSBmcm9tICcuLi8uLi8uLi90eXBlcy9hZ2VudCdcbmltcG9ydCB7IFByb2plY3QgfSBmcm9tICcuLi8uLi8uLi90eXBlcy9Qcm9qZWN0J1xuaW1wb3J0IHsgQ2xpZW50IH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvQ2xpZW50J1xuaW1wb3J0IHsgVGFzayB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL1Rhc2snXG5pbXBvcnQgeyB1c2VGYXFzU3RvcmUgfSBmcm9tICcuLi8uLi8uLi9zdG9yZS91c2VGYXFzU3RvcmUnXG5pbXBvcnQgeyBnZXRDaGF0c1N0b3JlU3RhdGUsIHVzZUNoYXRzU3RvcmUgfSBmcm9tICcuLi8uLi8uLi9zdG9yZS91c2VDaGF0c1N0b3JlJ1xuaW1wb3J0IHR5cGUgeyBDaGF0TGlzdEl0ZW0gfSBmcm9tICcuLi8uLi8uLi9zdG9yZS9jaGF0c1N0b3JlLnR5cGVzJ1xuaW1wb3J0IHsgcmVhZExhc3RBY3RpdmVDaGF0SWQsIHdyaXRlTGFzdEFjdGl2ZUNoYXRJZCB9IGZyb20gJy4uLy4uLy4uL3N0b3JlL21haWFMYXN0Q2hhdFBlcnNpc3RlbmNlJ1xuaW1wb3J0IHtcbiAgY2xlYXJNYWlhUGFuZWxTZXNzaW9uLFxuICBpc1ZhbGlkTWFpYVBhbmVsT3B0aW9uLFxuICBwYXRjaE1haWFQYW5lbFNlc3Npb24sXG4gIHJlYWRNYWlhUGFuZWxTZXNzaW9uLFxuICB0eXBlIE1haWFQYW5lbFNlc3Npb25TbmFwc2hvdCxcbiAgd3JpdGVNYWlhUGFuZWxTZXNzaW9uLFxufSBmcm9tICcuLi8uLi8uLi9zdG9yZS9tYWlhUGFuZWxTZXNzaW9uUGVyc2lzdGVuY2UnXG5pbXBvcnQgeyB1c2VTZXNzaW9uc1N0b3JlIH0gZnJvbSAnLi4vLi4vLi4vc3RvcmUvc2Vzc2lvbnMvdXNlU2Vzc2lvbnNTdG9yZSdcbmltcG9ydCB7IGlzQWN0aXZlU2Vzc2lvblN0YXR1cyB9IGZyb20gJy4uLy4uLy4uL3N0b3JlL3Nlc3Npb25zL3Nlc3Npb25zLnR5cGVzJ1xuaW1wb3J0IHsgZmV0Y2hNYWlhIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbWFpYS9jbGllbnQnXG5pbXBvcnQgeyBmZXRjaEFnZW50RGV0YWlsIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbWFpYS9BZ2VudHMvZmV0Y2hBZ2VudERldGFpbCdcbmltcG9ydCB7IG1hcENPUkxhbmcgfSBmcm9tICcuLi8uLi8uLi9sYW5nL3V0aWxzJ1xuaW1wb3J0IHsgRVZFTlRTLCB1c2VFdmVudCB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZUV2ZW50J1xuaW1wb3J0IHsgTUFJQV9PUEVOX0ZST01fSE9TVF9FVkVOVCwgdHlwZSBNYWlhSG9zdE9wZW5EZXRhaWwgfSBmcm9tICcuLi8uLi8uLi91dGlscy9tYWlhSG9zdE9wZW4nXG5cbi8qKiBNZXRhZGF0YSBkZSBsYSBzZXNzaW9uIGFiaWVydGEgKGVtaXRpZGEgcG9yIHVzZUNoYXRNZXNzYWdlcyBhbCBjYXJnYXIgdW5hIGNvbnZlcnNhY2nDs24pLiAqL1xudHlwZSBTZXNzaW9uTWV0YSA9IHtcbiAgY2hhdElkOiBzdHJpbmdcbiAgYWdlbnRUeXBlPzogc3RyaW5nXG4gIGFnZW50RW50aXR5Pzogc3RyaW5nXG4gIHByb2plY3RJZD86IG51bWJlclxuICBwcm9qZWN0TmFtZT86IHN0cmluZ1xuICBjbGllbnRJZD86IG51bWJlclxuICBjbGllbnROYW1lPzogc3RyaW5nXG4gIHRhc2tJZD86IG51bWJlclxuICB0YXNrTmFtZT86IHN0cmluZ1xufVxuXG5jb25zdCBMRUdBQ1lfQ09OVEVYVF9FTlRJVElFUyA9IFsncHJvamVjdCcsICd0YXNrJywgJ2NsaWVudCddIGFzIGNvbnN0XG50eXBlIExlZ2FjeUNvbnRleHRFbnRpdHkgPSAodHlwZW9mIExFR0FDWV9DT05URVhUX0VOVElUSUVTKVtudW1iZXJdXG5cbnR5cGUgQWlDaGF0QmFja0Rlc3RpbmF0aW9uID0gJ2dsb2JhbF9jb250ZXh0X2hvbWUnIHwgJ3Rhc2tfaG9tZScgfCAncGxhbm5lcl9ob21lJyB8ICdwcm9qZWN0X2hvbWUnIHwgJ2NsaWVudF9ob21lJ1xuXG4vKiogSG9tZSBnbG9iYWwgZGVsIG9yY2hlc3RyYXRvciAoc29sbyBoZWFkZXIpLiBQbGFubmVyIGVzIGhvbWUgZGUgRlVBcywgbm8gZGUgY29udGV4dG9zLiAqL1xuY29uc3QgaXNHbG9iYWxNYWlhU2VjdGlvbiA9IChzZWN0aW9uOiBTZWN0aW9uKTogYm9vbGVhbiA9PiBzZWN0aW9uID09PSAnaGVhZGVyJ1xuXG5jb25zdCByZXNvbHZlQWlDaGF0QmFja0Rlc3RpbmF0aW9uID0gKFxuICBzZWN0aW9uOiBTZWN0aW9uLFxuICBhZ2VudFR5cGU6IEFnZW50Wyd0eXBlJ10gfCB1bmRlZmluZWQsXG4gIGN1cnJlbnRPcHRpb246IHN0cmluZyxcbiAgaG9tZU9wdGlvbjogc3RyaW5nXG4pOiBBaUNoYXRCYWNrRGVzdGluYXRpb24gPT4ge1xuICBpZiAoaXNHbG9iYWxNYWlhU2VjdGlvbihzZWN0aW9uKSAmJiBhZ2VudFR5cGUgPT09ICdvcmNoZXN0cmF0b3InICYmIGN1cnJlbnRPcHRpb24gPT09IGhvbWVPcHRpb24pIHtcbiAgICByZXR1cm4gJ2dsb2JhbF9jb250ZXh0X2hvbWUnXG4gIH1cbiAgaWYgKHNlY3Rpb24gPT09ICd0YXNrJykgcmV0dXJuICd0YXNrX2hvbWUnXG4gIGlmIChzZWN0aW9uID09PSAncGxhbm5lcicpIHJldHVybiAncGxhbm5lcl9ob21lJ1xuICBpZiAoc2VjdGlvbiA9PT0gJ3Byb2plY3QnKSByZXR1cm4gJ3Byb2plY3RfaG9tZSdcbiAgaWYgKHNlY3Rpb24gPT09ICdjbGllbnQnKSByZXR1cm4gJ2NsaWVudF9ob21lJ1xuICByZXR1cm4gJ2dsb2JhbF9jb250ZXh0X2hvbWUnXG59XG5cbmV4cG9ydCBjb25zdCBJRF9NT0RBTF9DSEFUX0FHRU5UID0gJ21vZGFscy1wb3J0YWwtbWFpYS1jaGF0LWFnZW50J1xuXG5jb25zdCB2YWxpZGF0ZUFjY2Vzc0J5RmVhdHVyZSA9IChzZWN0aW9uOiBTZWN0aW9uIHwgbnVsbCB8IHVuZGVmaW5lZCwgdXNlcjogUmV0dXJuVHlwZTx0eXBlb2YgdXNlVXNlcj4pID0+IHtcbiAgaWYgKCFzZWN0aW9uIHx8ICFjYW5BY2Nlc3NUb0NoYXRBSSh1c2VyKSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLy8gUGxhbm5lciB5IHRhc2sgYWJyZW4gc2llbXByZSBlbCBjaGF0IChob21lIGRlIEZVQXMpLCBudW5jYSByZXN1bWVuIGRlIHByb3llY3Rvcy5cbiAgaWYgKHNlY3Rpb24gPT09ICdwbGFubmVyJyB8fCBzZWN0aW9uID09PSAndGFzaycpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgaWYgKHNlY3Rpb24gPT09ICdoZWFkZXInKSB7XG4gICAgcmV0dXJuIEJvb2xlYW4od2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTUyB8fCB3aW5kb3cuTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UUylcbiAgfVxuXG4gIHJldHVybiBCb29sZWFuKHdpbmRvdy5NQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1MpXG59XG5cbmV4cG9ydCBjb25zdCBDaGF0QUlNb2RhbCA9ICgpID0+IHtcbiAgY29uc3QgdXNlciA9IHVzZVVzZXIoKVxuICBjb25zdCB7IGkxOG4gfSA9IHVzZVRyYW5zbGF0aW9uKFtTRUNUSU9OUy5hYm1BZ2VudF0pXG4gIGNvbnN0IGFtcGxpdHVkRXZlbnQgPSB1c2VFdmVudCgpXG5cbiAgY29uc3Qgc2F2ZWRTZXNzaW9uT25Nb3VudFJlZiA9IHVzZVJlZjxNYWlhUGFuZWxTZXNzaW9uU25hcHNob3QgfCBudWxsPihyZWFkTWFpYVBhbmVsU2Vzc2lvbih1c2VyLmlkKSlcbiAgY29uc3Qgc2hvdWxkUmVzdG9yZUV4cGFuZGVkID0gc2F2ZWRTZXNzaW9uT25Nb3VudFJlZi5jdXJyZW50Py5pc0V4cGFuZGVkID8/IGZhbHNlXG4gIGNvbnN0IHBlbmRpbmdTZXNzaW9uUmVzdG9yZVJlZiA9IHVzZVJlZjxNYWlhUGFuZWxTZXNzaW9uU25hcHNob3QgfCBudWxsPihcbiAgICBzaG91bGRSZXN0b3JlRXhwYW5kZWQgPyBzYXZlZFNlc3Npb25Pbk1vdW50UmVmLmN1cnJlbnQgOiBudWxsXG4gIClcbiAgY29uc3Qgc2Vzc2lvblJlc3RvcmVTdGFydGVkUmVmID0gdXNlUmVmKGZhbHNlKVxuICBjb25zdCBzaWRlYmFyT3BlblJlZiA9IHVzZVJlZihzYXZlZFNlc3Npb25Pbk1vdW50UmVmLmN1cnJlbnQ/LnNpZGViYXJPcGVuID8/IGZhbHNlKVxuXG4gIC8vIFRyYXMgbmF2ZWdhciBlbiBlbCBob3N0IChmdWxsIHBhZ2UgcmVsb2FkKSwgcmVzdGF1cmFtb3MgZWwgcGFuZWwgc2kgZXN0YWJhIGFiaWVydG8uXG4gIGNvbnN0IFtpc01pbmltaXplZCwgc2V0SXNNaW5pbWl6ZWRdID0gdXNlU3RhdGUoKCkgPT4gIXNob3VsZFJlc3RvcmVFeHBhbmRlZClcbiAgY29uc3Qgc2V0Q2hhdFZpZXdWaXNpYmxlID0gdXNlQ2hhdHNTdG9yZShzdGF0ZSA9PiBzdGF0ZS5zZXRDaGF0Vmlld1Zpc2libGUpXG4gIGNvbnN0IHVucmVhZENvdW50ID0gdXNlQ2hhdHNTdG9yZShzdGF0ZSA9PiBzdGF0ZS51bnJlYWRDb3VudClcbiAgY29uc3QgYWN0aXZlQ2hhdElkID0gdXNlQ2hhdHNTdG9yZShzdGF0ZSA9PiBzdGF0ZS5hY3RpdmVDaGF0SWQpXG4gIC8vIExvcyBcIi4uLlwiIGRlbCBwaWxsIHNhbGVuIGRlbCBtb3Rvciwgbm8gZGUgaXNTdHJlYW1pbmcvaXNXcml0aW5nOiBlc29zIHJlZmxlamFuXG4gIC8vIGxhIHNlc2nDs24gYWN0aXZhIHkgcXVlZGFuIHN0YWxlIGN1YW5kbyB1bmEgcmVzcHVlc3RhIHRlcm1pbmEgZW4gYmFja2dyb3VuZC5cbiAgY29uc3QgaGFzQWN0aXZlU3RyZWFtID0gdXNlU2Vzc2lvbnNTdG9yZShzdGF0ZSA9PlxuICAgIE9iamVjdC52YWx1ZXMoc3RhdGUubWV0YSkuc29tZShtZXRhID0+IGlzQWN0aXZlU2Vzc2lvblN0YXR1cyhtZXRhLnN0YXR1cykpXG4gIClcblxuICAvKiogZ29Ub0NoYXQgLyBoYW5kbGVHb0hvbWUgc2UgZGVmaW5lbiBtw6FzIGFiYWpvOyBsb3MgcmVmcyBldml0YW4gZGVwZW5kZXIgZGVsIG9yZGVuIGRlIGRlY2xhcmFjacOzbi4gKi9cbiAgY29uc3QgZ29Ub0NoYXRSZWYgPSB1c2VSZWY8KChjaGF0OiBDaGF0TGlzdEl0ZW0pID0+IHZvaWQpIHwgbnVsbD4obnVsbClcbiAgY29uc3QgZ29Ib21lUmVmID0gdXNlUmVmPCgoKSA9PiB2b2lkKSB8IG51bGw+KG51bGwpXG5cbiAgLy8gTW9udGEgY2VycmFkYSBzYWx2byByZXN0YXVyYWNpw7NuIGRlIHNlc2nDs246IHNpIGVsIHBhbmVsIG5vIGVzdMOhIHZpc2libGUsIGxhcyByZXNwdWVzdGFzXG4gIC8vIG51ZXZhcyBxdWVkYW4gY29tbyBubyBsZcOtZGFzLlxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghcGVuZGluZ1Nlc3Npb25SZXN0b3JlUmVmLmN1cnJlbnQpIHtcbiAgICAgIHNldENoYXRWaWV3VmlzaWJsZShmYWxzZSlcbiAgICB9XG4gIH0sIFtzZXRDaGF0Vmlld1Zpc2libGVdKVxuXG4gIC8vIFBlcnNpc3RpbW9zIGxhIGNvbnZlcnNhY2nDs24gYWJpZXJ0YSBwYXJhIHBvZGVyIHZvbHZlciBhIGVsbGEgZGVzZGUgZWwgcGlsbCBkZXNwdcOpc1xuICAvLyBkZSBuYXZlZ2FyIG8gcmVmcmVzY2FyLiBFbCB0YWtlb3ZlciBkZXNkZSB1biBob3N0IGxhIGxpbXBpYSAodmEgYWwgSG9tZSkuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGFjdGl2ZUNoYXRJZCkge1xuICAgICAgd3JpdGVMYXN0QWN0aXZlQ2hhdElkKHVzZXIuaWQsIGFjdGl2ZUNoYXRJZClcbiAgICB9XG4gIH0sIFthY3RpdmVDaGF0SWQsIHVzZXIuaWRdKVxuXG4gIGNvbnN0IGhhbmRsZU1pbmltaXplID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGFtcGxpdHVkRXZlbnQoRVZFTlRTLmFpQ2hhdE1pbmltaXplKVxuICAgIHNldElzTWluaW1pemVkKHRydWUpXG4gICAgc2V0Q2hhdFZpZXdWaXNpYmxlKGZhbHNlKVxuICAgIHdyaXRlTWFpYVBhbmVsU2Vzc2lvbih1c2VyLmlkLCB7IGlzRXhwYW5kZWQ6IGZhbHNlIH0pXG4gIH0sIFthbXBsaXR1ZEV2ZW50LCBzZXRDaGF0Vmlld1Zpc2libGUsIHVzZXIuaWRdKVxuXG4gIGNvbnN0IGZvY3VzQ2hhdElucHV0ID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdtYWlhLWlucHV0LXJlZm9jdXMnKSlcbiAgICB9LCAxMDApXG4gIH0sIFtdKVxuXG4gIGNvbnN0IFt1c2VySW5pdGlhbE1lc3NhZ2UsIHNldFVzZXJJbml0aWFsTWVzc2FnZV0gPSB1c2VTdGF0ZTx7XG4gICAgbWVzc2FnZTogc3RyaW5nXG4gICAgYXR0YWNobWVudHM6IEF0dGFjaG1lbnRGaWxlW11cbiAgICBmYXFJZD86IHN0cmluZ1xuICAgIGFnZW50U3VnZ2VzdGlvbklkPzogc3RyaW5nXG4gICAgbWVudGlvbnM/OiBDb250ZXh0TWVudGlvbltdXG4gICAgZnVhSWQ/OiBzdHJpbmdcbiAgICBzY0lkPzogc3RyaW5nXG4gICAgY29udGV4dERhdGE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICB9Pih7XG4gICAgbWVzc2FnZTogJycsXG4gICAgYXR0YWNobWVudHM6IFtdLFxuICB9KVxuICBjb25zdCBbaW5pdGlhbENoYXRJZCwgc2V0SW5pdGlhbENoYXRJZF0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKVxuICBjb25zdCBbbmV3Q2hhdEtleSwgc2V0TmV3Q2hhdEtleV0gPSB1c2VTdGF0ZSgwKVxuICBjb25zdCBbc2Vzc2lvbk1ldGEsIHNldFNlc3Npb25NZXRhXSA9IHVzZVN0YXRlPFNlc3Npb25NZXRhIHwgbnVsbD4obnVsbClcbiAgY29uc3QgW3NlbmRNZXNzYWdlRnVuY3Rpb24sIHNldFNlbmRNZXNzYWdlRnVuY3Rpb25dID0gdXNlU3RhdGU8XG4gICAgfCAoKFxuICAgICAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgICAgIGF0dGFjaG1lbnRzPzogQXR0YWNobWVudEZpbGVbXSxcbiAgICAgICAgZmFxSWQ/OiBzdHJpbmcsXG4gICAgICAgIGFnZW50U3VnZ2VzdGlvbklkPzogc3RyaW5nLFxuICAgICAgICBtZW50aW9ucz86IENvbnRleHRNZW50aW9uW10sXG4gICAgICAgIGZ1YUlkPzogc3RyaW5nLFxuICAgICAgICBzY0lkPzogc3RyaW5nXG4gICAgICApID0+IHZvaWQpXG4gICAgfCBudWxsXG4gID4obnVsbClcbiAgY29uc3QgW3N0b3BHZW5lcmF0aW9uRnVuY3Rpb24sIHNldFN0b3BHZW5lcmF0aW9uRnVuY3Rpb25dID0gdXNlU3RhdGU8KCgpID0+IHZvaWQpIHwgbnVsbD4obnVsbClcbiAgY29uc3QgW2lzU3RyZWFtaW5nLCBzZXRJc1N0cmVhbWluZ10gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW2lzV3JpdGluZywgc2V0SXNXcml0aW5nXSA9IHVzZVN0YXRlKGZhbHNlKVxuXG4gIGNvbnN0IFtyZWZldGNoQ2hhdHMsIHNldFJlZmV0Y2hDaGF0c10gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW2N1cnJlbnRPcHRpb24sIHNldEN1cnJlbnRPcHRpb25dID0gdXNlU3RhdGU8b3B0aW9ucz4oKCkgPT4ge1xuICAgIGNvbnN0IHNhdmVkID0gc2F2ZWRTZXNzaW9uT25Nb3VudFJlZi5jdXJyZW50XG4gICAgaWYgKHNhdmVkPy5hZ2VudHNOYXZBY3RpdmUgPT09ICdteUFnZW50cycpIHJldHVybiBvcHRpb25zLm15QWdlbnRzXG4gICAgaWYgKHNhdmVkPy5hZ2VudHNOYXZBY3RpdmUgPT09ICdteVNraWxscycpIHJldHVybiBvcHRpb25zLm15U2tpbGxzXG4gICAgY29uc3Qgc2F2ZWRPcHRpb24gPSBzYXZlZD8uY3VycmVudE9wdGlvblxuICAgIHJldHVybiBzYXZlZE9wdGlvbiAmJiBpc1ZhbGlkTWFpYVBhbmVsT3B0aW9uKHNhdmVkT3B0aW9uKSA/IChzYXZlZE9wdGlvbiBhcyBvcHRpb25zKSA6IG9wdGlvbnMuaG9tZVxuICB9KVxuICBjb25zdCBbaGFzRXJyb3IsIHNldEhhc0Vycm9yXSA9IHVzZVN0YXRlKGZhbHNlKVxuICAvLyBFbiBwcm9qZWN0L2NsaWVudC90YXNrOiBlbCB1c3VhcmlvIHJlaW5pY2nDsyBlbCBjb250ZXh0byBkZWwgb3JjaGVzdHJhdG9yIChsbyBsaW1wacOzIHkgcGFzw7MgcG9yXG4gIC8vIGVsIHNlbGVjdG9yIGRlIGNvbnRleHRvcyByZWNpZW50ZXMpLiBIYWJpbGl0YSBlbCBib3TDs24gXCJ2b2x2ZXJcIiBlbiBlbCBob21lIHBhc28gMiBkZSBlc2FzXG4gIC8vIHNlY2Npb25lcy4gU2UgcmVzZXRlYSBhbCBjZXJyYXIvcmVhYnJpciBlbCBtb2RhbCAoZWwgY29tcG9uZW50ZSBzZSBkZXNtb250YSkuXG4gIGNvbnN0IFtkaWRSZXNldENvbnRleHRJblNlY3Rpb24sIHNldERpZFJlc2V0Q29udGV4dEluU2VjdGlvbl0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgcHJldkhhc1Bpbm5lZENvbnRleHRSZWYgPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IGhhbmRsZXJzID0gdXNlTWVtbygoKSA9PiBidWlsZEhhbmRsZXJzKHNldEN1cnJlbnRPcHRpb24sIHNldEhhc0Vycm9yKSwgW10pXG4gIGNvbnN0IFtzaWRlYmFySGFzRXJyb3IsIHNldFNpZGViYXJIYXNFcnJvcl0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgcmVzZXRTZWxlY3RlZENoYXRSZWYgPSB1c2VSZWY8KCgpID0+IHZvaWQpIHwgbnVsbD4obnVsbClcbiAgY29uc3QgbGFuZyA9IGkxOG4ubGFuZ3VhZ2UgPT09ICdicicgPyAncHQtYnInIDogaTE4bi5sYW5ndWFnZVxuXG4gIG1vbWVudC5sb2NhbGUobGFuZylcblxuICBjb25zdCB7XG4gICAgc2VsZWN0QWdlbnQsXG4gICAgY2xlYXJBZ2VudCxcbiAgICBzZWN0aW9uLFxuICAgIGFnZW50LFxuICAgIHByb2plY3QsXG4gICAgY2xpZW50LFxuICAgIHRhc2ssXG4gICAgY2hpcHNQcm9qZWN0LFxuICAgIHRvZ2dsZVdlYlNlYXJjaCxcbiAgICBpc1dlYlNlYXJjaEFjdGl2ZSxcbiAgICBzZXRDaGlwc1Byb2plY3QsXG4gICAgc2V0Q2xpZW50LFxuICAgIHNldFByb2plY3QsXG4gICAgYmFubmVyRW50cnlGYXEsXG4gICAgc2V0VGFzayxcbiAgfSA9IHVzZUdsb2JhbENvbnRleHQoKVxuXG4gIC8vIFotaW5kZXggcGFyYSB0b29sdGlwcyBlbiBzZWN0aW9uICd0YXNrJyAobW9kYWwgZmxvdGFudGUgZWxldmFkbylcbiAgY29uc3QgdG9vbHRpcFpJbmRleCA9IHVzZU1haWFUYXNrUGFuZWxaSW5kZXgoMTUwMCwgJ292ZXJsYXknKVxuXG4gIGNvbnN0IHtcbiAgICBhZ2VudHMsXG4gICAgbG9hZGluZyxcbiAgICBsb2FkaW5nTW9yZSxcbiAgICBlcnJvcjogYWdlbnRFcnJvcixcbiAgICBoYW5kbGVHZXRBZ2VudHMsXG4gICAgbG9hZE1vcmVBZ2VudHMsXG4gICAgc2VhcmNoQ3VzdG9tQWdlbnRzLFxuICAgIHNlYXJjaExvYWRpbmcsXG4gICAgYWRkQWdlbnQsXG4gICAgcmVtb3ZlQWdlbnQsXG4gICAgdXBkYXRlQWdlbnQsXG4gICAgdXBkYXRlQWdlbnRGYXZvcml0ZSxcbiAgICBzZWxlY3RGaXJzdEFnZW50LFxuICAgIHNvcnRBZ2VudHNMaXN0LFxuICB9ID0gdXNlR2V0QWdlbnRzKHsgc2VsZWN0QWdlbnQsIHNlY3Rpb24sIGFnZW50LCBoYW5kbGVHb0hvbWU6IGhhbmRsZXJzLmhvbWUgfSlcblxuICBjb25zdCB7IHNraWxscywgbG9hZGluZzogbG9hZGluZ1NraWxscywgaGFuZGxlR2V0U2tpbGxzLCBhZGRTa2lsbCwgdXBkYXRlU2tpbGxJbkxpc3QsIHJlbW92ZVNraWxsIH0gPSB1c2VHZXRTa2lsbHMoKVxuXG4gIGNvbnN0IGlzTUFJQSA9IHZhbGlkYXRlSXNNYWlhKGFnZW50IGFzIEFnZW50KVxuXG4gIGNvbnN0IHVzZXJIYXNQZXJtaXNzaW9ucyA9XG4gICAgKHVzZXI/LnBlcm1pc3Npb25zPy5haV9hZ2VudHM/LmNyZWF0ZSB8fFxuICAgICAgdXNlcj8ucGVybWlzc2lvbnM/LmFpX2FnZW50cz8uZWRpdCB8fFxuICAgICAgdXNlcj8ucGVybWlzc2lvbnM/LmFpX2FnZW50cz8uZGVsZXRlKSAmJlxuICAgIHdpbmRvdy5NQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1NfTVVMVElfQUdFTlRTXG5cbiAgY29uc3QgY29tcHV0ZWRDdXJyZW50T3B0aW9uID0gdXNlTWVtbygoKSA9PiB7XG4gICAgY29uc3QgaXNHbG9iYWxTcGVjaWFsaXN0ID0gaXNNQUlBICYmIGFnZW50Py5lbnRpdHkgPT09ICdnbG9iYWwnXG4gICAgY29uc3QgaXNQcm9qZWN0U3BlY2lhbGlzdCA9IGlzTUFJQSAmJiAoYWdlbnQ/LmVudGl0eSA9PT0gJ3Byb2plY3QnIHx8IGFnZW50Py5lbnRpdHkgPT0gbnVsbClcbiAgICBjb25zdCBpc0NsaWVudFNwZWNpYWxpc3QgPSBpc01BSUEgJiYgYWdlbnQ/LmVudGl0eSA9PT0gJ2NsaWVudCdcbiAgICBjb25zdCBpc01haWFrZXIgPSBpc01hcmtldHBsYWNlR2xvYmFsQ2xvbmVBZ2VudChhZ2VudClcblxuICAgIGlmIChjdXJyZW50T3B0aW9uID09PSBvcHRpb25zLm15QWdlbnRzICYmIHdpbmRvdy5NQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1NfTVVMVElfQUdFTlRTKSB7XG4gICAgICByZXR1cm4gb3B0aW9ucy5teUFnZW50c1xuICAgIH1cblxuICAgIGlmIChjdXJyZW50T3B0aW9uID09PSBvcHRpb25zLm15U2tpbGxzICYmIHdpbmRvdy5NQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1NfTVVMVElfQUdFTlRTKSB7XG4gICAgICByZXR1cm4gb3B0aW9ucy5teVNraWxsc1xuICAgIH1cblxuICAgIC8vIEVsIG9yY2hlc3RyYXRvciAoTUFJQSkgbXVlc3RyYSBzdSBob21lIGNvbiBGQVFzL2FjY2lvbmVzIGZyZWN1ZW50ZXM7IGVsIHJlc3RvIGRlXG4gICAgLy8gbG9zIGdsb2JhbCBzcGVjaWFsaXN0cyAoY2xvbmVzIGdsb2JhbGVzIG5vLW1haWFrZXIpIHNpZ3VlbiB5ZW5kbyBkaXJlY3RvIGFsIGNoYXQuXG4gICAgaWYgKGlzR2xvYmFsU3BlY2lhbGlzdCAmJiAhaXNNYWlha2VyICYmIGFnZW50Py50eXBlICE9PSAnb3JjaGVzdHJhdG9yJyAmJiBjdXJyZW50T3B0aW9uID09PSBvcHRpb25zLmhvbWUpIHtcbiAgICAgIHJldHVybiBvcHRpb25zLmNoYXRcbiAgICB9XG5cbiAgICBjb25zdCBzaG91bGRTaG93UHJvamVjdFNlbGVjdG9yID0gY3VycmVudE9wdGlvbiAhPT0gb3B0aW9ucy5jaGF0ICYmIGlzUHJvamVjdFNwZWNpYWxpc3QgJiYgIXByb2plY3RcbiAgICBjb25zdCBzaG91bGRTaG93Q2xpZW50U2VsZWN0b3IgPSBjdXJyZW50T3B0aW9uICE9PSBvcHRpb25zLmNoYXQgJiYgaXNDbGllbnRTcGVjaWFsaXN0ICYmICFjbGllbnRcblxuICAgIGlmIChzaG91bGRTaG93UHJvamVjdFNlbGVjdG9yKSB7XG4gICAgICByZXR1cm4gb3B0aW9ucy5wcm9qZWN0U2VsZWN0b3JcbiAgICB9XG4gICAgaWYgKHNob3VsZFNob3dDbGllbnRTZWxlY3Rvcikge1xuICAgICAgcmV0dXJuIG9wdGlvbnMuY2xpZW50U2VsZWN0b3JcbiAgICB9XG4gICAgcmV0dXJuIGN1cnJlbnRPcHRpb25cbiAgfSwgW2N1cnJlbnRPcHRpb24sIHByb2plY3QsIGNsaWVudCwgaXNNQUlBLCBhZ2VudD8uZW50aXR5LCBhZ2VudD8ubmFtZSwgYWdlbnQ/LnR5cGVdKVxuXG4gIGNvbnN0IGlzTWFpYWtlckFnZW50U2VsZWN0ZWQgPSB1c2VNZW1vKCgpID0+IGlzTWFya2V0cGxhY2VHbG9iYWxDbG9uZUFnZW50KGFnZW50KSwgW2FnZW50XSlcblxuICBjb25zdCBzaWRlYmFyQWdlbnRzTmF2QWN0aXZlID0gdXNlTWVtbygoKTogJ21haWFrZXInIHwgJ215QWdlbnRzJyB8ICdteVNraWxscycgfCBudWxsID0+IHtcbiAgICBpZiAoY29tcHV0ZWRDdXJyZW50T3B0aW9uID09PSBvcHRpb25zLm15U2tpbGxzKSByZXR1cm4gJ215U2tpbGxzJ1xuICAgIGlmIChjb21wdXRlZEN1cnJlbnRPcHRpb24gPT09IG9wdGlvbnMubXlBZ2VudHMpIHJldHVybiAnbXlBZ2VudHMnXG4gICAgaWYgKGlzTWFpYWtlckFnZW50U2VsZWN0ZWQpIHJldHVybiAnbWFpYWtlcidcbiAgICByZXR1cm4gbnVsbFxuICB9LCBbY29tcHV0ZWRDdXJyZW50T3B0aW9uLCBpc01haWFrZXJBZ2VudFNlbGVjdGVkXSlcblxuICAvKiBSZWFjdGl2YXIgY29uIGxhIGZpbGEg4oCcTWlzIGFnZW50ZXPigJ0gZW4gU2lkZWJhcjogbXlBZ2VudHNDb3VudCBwcm9wXG4gIGNvbnN0IHNpZGViYXJNeUFnZW50c0NvdW50ID0gdXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIGFnZW50cy5kYXRhLmZpbHRlcihcbiAgICAgIGEgPT4gIShhLnR5cGUgPT09ICdvcmNoZXN0cmF0b3InIHx8IChhLnR5cGUgPT09ICdjbG9uZScgJiYgYS5lbnRpdHkgPT09ICdnbG9iYWwnICYmIC8obWFpYWtlcnxtYXJrZXRwbGFjZSkvaS50ZXN0KGEubmFtZSB8fCAnJykpKVxuICAgIClcbiAgICAgIC5sZW5ndGhcbiAgfSwgW2FnZW50cy5kYXRhXSlcbiAgKi9cblxuICBjb25zdCBhZ2VudHNGZXRjaGVkUmVmID0gdXNlUmVmKGZhbHNlKVxuXG4gIGNvbnN0IHNlbGVjdG9yID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgIyR7SURfTU9EQUxfQ0hBVF9BR0VOVH1gKVxuXG4gIC8vIFRhc2sgcGFuZWwsIHBsYW5uZXIgeSBiYW5uZXIgZGUgcHJveWVjdG8gYWJyZW4gZW4gZmxvdGFudGUgcG9yIGRlZmF1bHQgKG5vIHRhcGFyIGVsIGNvbnRleHRvIGRldHLDoXMpLlxuICAvLyBGdWVyYSBkZSBlc29zIGNvbnRleHRvcyBzZSByZXNwZXRhIGxhIHByZWZlcmVuY2lhIGd1YXJkYWRhIGVuIGxvY2FsU3RvcmFnZS5cbiAgY29uc3QgW2xheW91dE1vZGUsIHNldExheW91dE1vZGVdID0gdXNlU3RhdGU8TWFpYUNoYXRNb2RhbExheW91dE1vZGU+KCgpID0+XG4gICAgcmVzb2x2ZUluaXRpYWxNYWlhQ2hhdExheW91dE1vZGUoeyBzZWN0aW9uLCBiYW5uZXJFbnRyeUZhcSB9KVxuICApXG5cbiAgY29uc3QgaGFuZGxlTGF5b3V0TW9kZUNoYW5nZSA9IHVzZUNhbGxiYWNrKChtb2RlOiBNYWlhQ2hhdE1vZGFsTGF5b3V0TW9kZSkgPT4ge1xuICAgIHNldFN0b3JlZE1haWFDaGF0TGF5b3V0TW9kZShtb2RlKVxuICAgIHNldExheW91dE1vZGUobW9kZSlcbiAgfSwgW10pXG4gIGNvbnN0IGV4cGFuZGVkID0gbGF5b3V0TW9kZSA9PT0gJ2Z1bGxzY3JlZW4nXG4gIGNvbnN0IGlzRmxvYXRpbmcgPSBsYXlvdXRNb2RlID09PSAnZmxvYXRpbmcnXG4gIGNvbnN0IGNvbnRlbnRXcmFwcGVyUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKVxuICBjb25zdCBbZHJhZ1Bvc2l0aW9uLCBzZXREcmFnUG9zaXRpb25dID0gdXNlU3RhdGU8eyB4OiBudW1iZXI7IHk6IG51bWJlciB9IHwgbnVsbD4oXG4gICAgKCkgPT4gc2F2ZWRTZXNzaW9uT25Nb3VudFJlZi5jdXJyZW50Py5kcmFnUG9zaXRpb24gPz8gbnVsbFxuICApXG4gIGNvbnN0IHsgdGlsdE1vdGlvbiwgc3RhcnRQb2ludGVyVHJhY2tpbmcsIHNhbXBsZVBvaW50ZXJNb3ZlLCBlbmRQb2ludGVyVHJhY2tpbmcgfSA9XG4gICAgdXNlRmxvYXRpbmdQYW5lbERyYWdUaWx0KGlzRmxvYXRpbmcpXG4gIGNvbnN0IGRyYWdTdGF0ZVJlZiA9IHVzZVJlZjx7XG4gICAgcG9pbnRlcklkOiBudW1iZXJcbiAgICBvZmZzZXRYOiBudW1iZXJcbiAgICBvZmZzZXRZOiBudW1iZXJcbiAgfSB8IG51bGw+KG51bGwpXG5cbiAgY29uc3QgY2xhbXBEcmFnUG9zaXRpb24gPSB1c2VDYWxsYmFjaygoeDogbnVtYmVyLCB5OiBudW1iZXIpID0+IHtcbiAgICBjb25zdCBjb250ZW50V3JhcHBlciA9IGNvbnRlbnRXcmFwcGVyUmVmLmN1cnJlbnRcbiAgICBpZiAoIWNvbnRlbnRXcmFwcGVyKSB7XG4gICAgICByZXR1cm4geyB4LCB5IH1cbiAgICB9XG5cbiAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IGNvbnRlbnRXcmFwcGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG4gICAgY29uc3Qgb2Zmc2V0ID0gMTZcbiAgICBjb25zdCBtYXhYID0gTWF0aC5tYXgob2Zmc2V0LCB3aW5kb3cuaW5uZXJXaWR0aCAtIHdpZHRoIC0gb2Zmc2V0KVxuICAgIGNvbnN0IG1heFkgPSBNYXRoLm1heChvZmZzZXQsIHdpbmRvdy5pbm5lckhlaWdodCAtIGhlaWdodCAtIG9mZnNldClcblxuICAgIHJldHVybiB7XG4gICAgICB4OiBNYXRoLm1pbihNYXRoLm1heCh4LCBvZmZzZXQpLCBtYXhYKSxcbiAgICAgIHk6IE1hdGgubWluKE1hdGgubWF4KHksIG9mZnNldCksIG1heFkpLFxuICAgIH1cbiAgfSwgW10pXG5cbiAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBpZiAobGF5b3V0TW9kZSAhPT0gJ2Zsb2F0aW5nJykge1xuICAgICAgc2V0RHJhZ1Bvc2l0aW9uKG51bGwpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBzZXREcmFnUG9zaXRpb24ocHJldiA9PiB7XG4gICAgICBpZiAocHJldikge1xuICAgICAgICByZXR1cm4gY2xhbXBEcmFnUG9zaXRpb24ocHJldi54LCBwcmV2LnkpXG4gICAgICB9XG4gICAgICBjb25zdCBwYWQgPSAxNlxuICAgICAgY29uc3QgeCA9IHdpbmRvdy5pbm5lcldpZHRoIC0gZ2V0TWFpYUZsb2F0aW5nUGFuZWxXaWR0aFB4KCkgLSBwYWRcbiAgICAgIHJldHVybiBjbGFtcERyYWdQb3NpdGlvbih4LCBwYWQpXG4gICAgfSlcbiAgfSwgW2xheW91dE1vZGUsIGNsYW1wRHJhZ1Bvc2l0aW9uXSlcblxuICBjb25zdCBoYW5kbGVEcmFnRW5kID0gdXNlQ2FsbGJhY2soXG4gICAgKGV2ZW50OiBSZWFjdFBvaW50ZXJFdmVudDxIVE1MRGl2RWxlbWVudD4pID0+IHtcbiAgICAgIGVuZFBvaW50ZXJUcmFja2luZygpXG4gICAgICBpZiAoZHJhZ1N0YXRlUmVmLmN1cnJlbnQ/LnBvaW50ZXJJZCAhPT0gZXZlbnQucG9pbnRlcklkKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBkcmFnU3RhdGVSZWYuY3VycmVudCA9IG51bGxcbiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUudXNlclNlbGVjdCA9ICcnXG4gICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLmN1cnNvciA9ICcnXG5cbiAgICAgIGlmIChsYXlvdXRNb2RlID09PSAnZmxvYXRpbmcnICYmIGNvbnRlbnRXcmFwcGVyUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgY29uc3QgcmVjdCA9IGNvbnRlbnRXcmFwcGVyUmVmLmN1cnJlbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgICAgICAgcGF0Y2hNYWlhUGFuZWxTZXNzaW9uKHVzZXIuaWQsIHsgZHJhZ1Bvc2l0aW9uOiB7IHg6IHJlY3QubGVmdCwgeTogcmVjdC50b3AgfSB9KVxuICAgICAgfVxuICAgIH0sXG4gICAgW2VuZFBvaW50ZXJUcmFja2luZywgbGF5b3V0TW9kZSwgdXNlci5pZF1cbiAgKVxuXG4gIGNvbnN0IGhhbmRsZURyYWdNb3ZlID0gdXNlQ2FsbGJhY2soXG4gICAgKGV2ZW50OiBSZWFjdFBvaW50ZXJFdmVudDxIVE1MRGl2RWxlbWVudD4pID0+IHtcbiAgICAgIGNvbnN0IGRyYWdTdGF0ZSA9IGRyYWdTdGF0ZVJlZi5jdXJyZW50XG4gICAgICBpZiAoIWRyYWdTdGF0ZSB8fCBkcmFnU3RhdGUucG9pbnRlcklkICE9PSBldmVudC5wb2ludGVySWQpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIHNhbXBsZVBvaW50ZXJNb3ZlKGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkpXG5cbiAgICAgIGNvbnN0IG5leHRQb3NpdGlvbiA9IGNsYW1wRHJhZ1Bvc2l0aW9uKGV2ZW50LmNsaWVudFggLSBkcmFnU3RhdGUub2Zmc2V0WCwgZXZlbnQuY2xpZW50WSAtIGRyYWdTdGF0ZS5vZmZzZXRZKVxuXG4gICAgICBzZXREcmFnUG9zaXRpb24ocHJldiA9PiB7XG4gICAgICAgIGlmIChwcmV2ICYmIHByZXYueCA9PT0gbmV4dFBvc2l0aW9uLnggJiYgcHJldi55ID09PSBuZXh0UG9zaXRpb24ueSkge1xuICAgICAgICAgIHJldHVybiBwcmV2XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5leHRQb3NpdGlvblxuICAgICAgfSlcbiAgICB9LFxuICAgIFtjbGFtcERyYWdQb3NpdGlvbiwgc2FtcGxlUG9pbnRlck1vdmVdXG4gIClcblxuICBjb25zdCByZXNvbHZlZERyYWdQb3NpdGlvbiA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmIChsYXlvdXRNb2RlICE9PSAnZmxvYXRpbmcnKSB7XG4gICAgICByZXR1cm4gZHJhZ1Bvc2l0aW9uXG4gICAgfVxuICAgIGlmIChkcmFnUG9zaXRpb24pIHtcbiAgICAgIHJldHVybiBkcmFnUG9zaXRpb25cbiAgICB9XG4gICAgY29uc3QgcGFkID0gMTZcbiAgICBjb25zdCB4ID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3cuaW5uZXJXaWR0aCAtIGdldE1haWFGbG9hdGluZ1BhbmVsV2lkdGhQeCgpIC0gcGFkIDogcGFkXG4gICAgcmV0dXJuIGNsYW1wRHJhZ1Bvc2l0aW9uKHgsIHBhZClcbiAgfSwgW2xheW91dE1vZGUsIGRyYWdQb3NpdGlvbiwgY2xhbXBEcmFnUG9zaXRpb25dKVxuXG4gIGNvbnN0IGhhbmRsZURyYWdTdGFydCA9IHVzZUNhbGxiYWNrKFxuICAgIChldmVudDogUmVhY3RQb2ludGVyRXZlbnQ8SFRNTERpdkVsZW1lbnQ+KSA9PiB7XG4gICAgICBpZiAoIWlzRmxvYXRpbmcgfHwgZXZlbnQuYnV0dG9uICE9PSAwKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnRcbiAgICAgIGlmICh0YXJnZXQuY2xvc2VzdCgnYnV0dG9uLCBhLCBpbnB1dCwgdGV4dGFyZWEsIHNlbGVjdCwgW3JvbGU9XCJidXR0b25cIl0sIFtkYXRhLW5vLWRyYWc9XCJ0cnVlXCJdJykpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNvbnRlbnRXcmFwcGVyID0gY29udGVudFdyYXBwZXJSZWYuY3VycmVudFxuICAgICAgaWYgKCFjb250ZW50V3JhcHBlcikge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVjdCA9IGNvbnRlbnRXcmFwcGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG4gICAgICBjb25zdCBpbml0aWFsUG9zaXRpb24gPSByZXNvbHZlZERyYWdQb3NpdGlvbiA/PyBjbGFtcERyYWdQb3NpdGlvbihyZWN0LmxlZnQsIHJlY3QudG9wKVxuICAgICAgY29uc3QgcG9pbnRlck9mZnNldFggPSBldmVudC5jbGllbnRYIC0gaW5pdGlhbFBvc2l0aW9uLnhcbiAgICAgIGNvbnN0IHBvaW50ZXJPZmZzZXRZID0gZXZlbnQuY2xpZW50WSAtIGluaXRpYWxQb3NpdGlvbi55XG5cbiAgICAgIHNldERyYWdQb3NpdGlvbihpbml0aWFsUG9zaXRpb24pXG4gICAgICBkcmFnU3RhdGVSZWYuY3VycmVudCA9IHtcbiAgICAgICAgcG9pbnRlcklkOiBldmVudC5wb2ludGVySWQsXG4gICAgICAgIG9mZnNldFg6IHBvaW50ZXJPZmZzZXRYLFxuICAgICAgICBvZmZzZXRZOiBwb2ludGVyT2Zmc2V0WSxcbiAgICAgIH1cblxuICAgICAgZXZlbnQuY3VycmVudFRhcmdldC5zZXRQb2ludGVyQ2FwdHVyZShldmVudC5wb2ludGVySWQpXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG5cbiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUudXNlclNlbGVjdCA9ICdub25lJ1xuICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5jdXJzb3IgPSAnZ3JhYmJpbmcnXG4gICAgICBhbXBsaXR1ZEV2ZW50KEVWRU5UUy5haUNoYXREcmFnZ2FibGUpXG4gICAgICBzdGFydFBvaW50ZXJUcmFja2luZyhldmVudC5jbGllbnRYLCBldmVudC5jbGllbnRZKVxuICAgIH0sXG4gICAgW2NsYW1wRHJhZ1Bvc2l0aW9uLCBpc0Zsb2F0aW5nLCByZXNvbHZlZERyYWdQb3NpdGlvbiwgc3RhcnRQb2ludGVyVHJhY2tpbmddXG4gIClcblxuICBjb25zdCBzdGFydENoYXQgPSB1c2VDYWxsYmFjayhcbiAgICAoXG4gICAgICBtZXNzYWdlPzogc3RyaW5nLFxuICAgICAgYXR0YWNobWVudHM/OiBBdHRhY2htZW50RmlsZVtdLFxuICAgICAgZmFxSWQ/OiBzdHJpbmcsXG4gICAgICBhZ2VudFN1Z2dlc3Rpb25JZD86IHN0cmluZyxcbiAgICAgIG1lbnRpb25zPzogQ29udGV4dE1lbnRpb25bXSxcbiAgICAgIGZ1YUlkPzogc3RyaW5nLFxuICAgICAgc2NJZD86IHN0cmluZyxcbiAgICAgIGNvbnRleHREYXRhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgICApID0+IHtcbiAgICAgIGlmIChzaWRlYmFySGFzRXJyb3IpIHtcbiAgICAgICAgc2V0U2lkZWJhckhhc0Vycm9yKGZhbHNlKVxuICAgICAgfVxuICAgICAgc2V0SW5pdGlhbENoYXRJZChudWxsKVxuICAgICAgc2V0TmV3Q2hhdEtleShwcmV2ID0+IHByZXYgKyAxKVxuICAgICAgc2V0VXNlckluaXRpYWxNZXNzYWdlKHtcbiAgICAgICAgbWVzc2FnZTogbWVzc2FnZSB8fCAnJyxcbiAgICAgICAgYXR0YWNobWVudHM6IGF0dGFjaG1lbnRzIHx8IFtdLFxuICAgICAgICAuLi4oZmFxSWQgPyB7IGZhcUlkIH0gOiB7fSksXG4gICAgICAgIC4uLihhZ2VudFN1Z2dlc3Rpb25JZCA/IHsgYWdlbnRTdWdnZXN0aW9uSWQgfSA6IHt9KSxcbiAgICAgICAgLi4uKG1lbnRpb25zICYmIG1lbnRpb25zLmxlbmd0aCA+IDAgPyB7IG1lbnRpb25zIH0gOiB7fSksXG4gICAgICAgIC4uLihmdWFJZCA/IHsgZnVhSWQgfSA6IHt9KSxcbiAgICAgICAgLi4uKHNjSWQgPyB7IHNjSWQgfSA6IHt9KSxcbiAgICAgICAgLi4uKGNvbnRleHREYXRhID8geyBjb250ZXh0RGF0YSB9IDoge30pLFxuICAgICAgfSlcbiAgICAgIGhhbmRsZXJzLmNoYXQoKVxuICAgIH0sXG4gICAgW2hhbmRsZXJzLCBzaWRlYmFySGFzRXJyb3JdXG4gIClcblxuICBjb25zdCBiYW5uZXJGYXFBdXRvU2VudFJlZiA9IHVzZVJlZihmYWxzZSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGVudGl0eVJlYWR5ID0gc2VjdGlvbiA9PT0gJ3Byb2plY3QnID8gQm9vbGVhbihwcm9qZWN0Py5pZCkgOiBzZWN0aW9uID09PSAnY2xpZW50JyA/IEJvb2xlYW4oY2xpZW50Py5pZCkgOiB0cnVlXG5cbiAgICBpZiAoIWJhbm5lckVudHJ5RmFxPy5mYXFUaXRsZT8udHJpbSgpIHx8IGJhbm5lckZhcUF1dG9TZW50UmVmLmN1cnJlbnQgfHwgbG9hZGluZyB8fCAhYWdlbnQ/LmlkIHx8ICFlbnRpdHlSZWFkeSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgYmFubmVyRmFxQXV0b1NlbnRSZWYuY3VycmVudCA9IHRydWVcbiAgICBzdGFydENoYXQoXG4gICAgICBiYW5uZXJFbnRyeUZhcS5mYXFUaXRsZSxcbiAgICAgIFtdLFxuICAgICAgYmFubmVyRW50cnlGYXEuZmFxSWQsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICBiYW5uZXJFbnRyeUZhcS5jb250ZXh0RGF0YVxuICAgIClcbiAgfSwgW1xuICAgIGJhbm5lckVudHJ5RmFxPy5mYXFJZCxcbiAgICBiYW5uZXJFbnRyeUZhcT8uZmFxVGl0bGUsXG4gICAgYmFubmVyRW50cnlGYXE/LmNvbnRleHREYXRhLFxuICAgIGxvYWRpbmcsXG4gICAgYWdlbnQ/LmlkLFxuICAgIGFnZW50Py5lbnRpdHksXG4gICAgcHJvamVjdD8uaWQsXG4gICAgY2xpZW50Py5pZCxcbiAgICBzZWN0aW9uLFxuICAgIHN0YXJ0Q2hhdCxcbiAgXSlcblxuICBjb25zdCBnb1RvQ2hhdCA9IHVzZUNhbGxiYWNrKFxuICAgIChjaGF0OiBhbnkpID0+IHtcbiAgICAgIHNldFVzZXJJbml0aWFsTWVzc2FnZSh7IG1lc3NhZ2U6ICcnLCBhdHRhY2htZW50czogW10gfSlcbiAgICAgIHNldEluaXRpYWxDaGF0SWQoY2hhdC5zZXNzaW9uRXh0ZXJuYWxJZClcbiAgICAgIGNvbnN0IHNlbGVjdGVkQWdlbnQgPSBhZ2VudHMuZGF0YS5maW5kKGFnZW50SXRlbSA9PiBhZ2VudEl0ZW0uaWQgPT09IGNoYXQuYWdlbnRJZClcbiAgICAgIGlmIChzZWxlY3RlZEFnZW50KSB7XG4gICAgICAgIHNlbGVjdEFnZW50KHNlbGVjdGVkQWdlbnQpXG4gICAgICB9XG4gICAgICAvLyBEaXNwYXRjaCBldmVudCB0byBjbGVhciB0aGUgaW5wdXQgdGV4dGFyZWFcbiAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdjaGF0LXNlc3Npb24tY2hhbmdlZCcpKVxuICAgICAgaGFuZGxlcnMuY2hhdCgpXG4gICAgfSxcbiAgICBbaGFuZGxlcnMsIGFnZW50cywgc2VsZWN0QWdlbnRdXG4gIClcblxuICBnb1RvQ2hhdFJlZi5jdXJyZW50ID0gZ29Ub0NoYXRcblxuICBjb25zdCBoYW5kbGVTaWRlYmFyT3BlbkNoYW5nZSA9IHVzZUNhbGxiYWNrKFxuICAgIChvcGVuOiBib29sZWFuKSA9PiB7XG4gICAgICBzaWRlYmFyT3BlblJlZi5jdXJyZW50ID0gb3BlblxuICAgICAgcGF0Y2hNYWlhUGFuZWxTZXNzaW9uKHVzZXIuaWQsIHsgc2lkZWJhck9wZW46IG9wZW4gfSlcbiAgICB9LFxuICAgIFt1c2VyLmlkXVxuICApXG5cbiAgY29uc3Qgc3luY1BhbmVsU2Vzc2lvbiA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAoaXNNaW5pbWl6ZWQpIHJldHVyblxuXG4gICAgcGF0Y2hNYWlhUGFuZWxTZXNzaW9uKHVzZXIuaWQsIHtcbiAgICAgIGlzRXhwYW5kZWQ6IHRydWUsXG4gICAgICBjdXJyZW50T3B0aW9uLFxuICAgICAgYWdlbnRzTmF2QWN0aXZlOiBzaWRlYmFyQWdlbnRzTmF2QWN0aXZlLFxuICAgICAgYWN0aXZlQ2hhdElkLFxuICAgICAgYWdlbnRJZDogYWdlbnQ/LmlkID8/IG51bGwsXG4gICAgICBzaWRlYmFyT3Blbjogc2lkZWJhck9wZW5SZWYuY3VycmVudCxcbiAgICAgIGRyYWdQb3NpdGlvbjogbGF5b3V0TW9kZSA9PT0gJ2Zsb2F0aW5nJyA/IGRyYWdQb3NpdGlvbiA6IG51bGwsXG4gICAgICBob3N0Q29udGV4dDoge1xuICAgICAgICBzZWN0aW9uLFxuICAgICAgICBwcm9qZWN0LFxuICAgICAgICBjbGllbnQsXG4gICAgICAgIHRhc2ssXG4gICAgICAgIGNoaXBzUHJvamVjdCxcbiAgICAgIH0sXG4gICAgfSlcbiAgfSwgW1xuICAgIGFjdGl2ZUNoYXRJZCxcbiAgICBhZ2VudD8uaWQsXG4gICAgY2hpcHNQcm9qZWN0LFxuICAgIGNsaWVudCxcbiAgICBjdXJyZW50T3B0aW9uLFxuICAgIGRyYWdQb3NpdGlvbixcbiAgICBpc01pbmltaXplZCxcbiAgICBsYXlvdXRNb2RlLFxuICAgIHByb2plY3QsXG4gICAgc2VjdGlvbixcbiAgICBzaWRlYmFyQWdlbnRzTmF2QWN0aXZlLFxuICAgIHRhc2ssXG4gICAgdXNlci5pZCxcbiAgXSlcblxuICAvKiogTG9zIGFnZW50ZXMgc2UgcGlkZW4gcmVjacOpbiBhbCBhYnJpciBlbCBwYW5lbDogZW4gbW9kbyBwaWxsIG5vIGhhY2UgZmFsdGEgbmluZ3VuYSByZXF1ZXN0LiAqL1xuICBjb25zdCBlbnN1cmVBZ2VudHNMb2FkZWQgPSB1c2VDYWxsYmFjayhhc3luYyAoKSA9PiB7XG4gICAgaWYgKGFnZW50c0ZldGNoZWRSZWYuY3VycmVudCkgcmV0dXJuXG4gICAgYWdlbnRzRmV0Y2hlZFJlZi5jdXJyZW50ID0gdHJ1ZVxuICAgIGF3YWl0IGhhbmRsZUdldEFnZW50cygpXG4gIH0sIFtoYW5kbGVHZXRBZ2VudHNdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGlzTWluaW1pemVkKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgfVxuXG4gICAgY29uc3QgdGltZXIgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiBzeW5jUGFuZWxTZXNzaW9uKCksIDE1MClcbiAgICByZXR1cm4gKCkgPT4gd2luZG93LmNsZWFyVGltZW91dCh0aW1lcilcbiAgfSwgW2lzTWluaW1pemVkLCBzeW5jUGFuZWxTZXNzaW9uXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IG9uUGFnZUhpZGUgPSAoKSA9PiB7XG4gICAgICBpZiAoIWlzTWluaW1pemVkKSB7XG4gICAgICAgIHN5bmNQYW5lbFNlc3Npb24oKVxuICAgICAgfVxuICAgIH1cbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncGFnZWhpZGUnLCBvblBhZ2VIaWRlKVxuICAgIHJldHVybiAoKSA9PiB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncGFnZWhpZGUnLCBvblBhZ2VIaWRlKVxuICB9LCBbaXNNaW5pbWl6ZWQsIHN5bmNQYW5lbFNlc3Npb25dKVxuXG4gIGNvbnN0IGhhbmRsZVJlc3RvcmVGcm9tTWluaW1pemVkID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNldElzTWluaW1pemVkKGZhbHNlKVxuICAgIHNldENoYXRWaWV3VmlzaWJsZSh0cnVlKVxuICAgIGFtcGxpdHVkRXZlbnQoRVZFTlRTLmFpQ2hhdE9wZW4sIHsgb3B0aW9uOiAnbWluaW1pemUnIH0pXG5cbiAgICAvLyBnb1RvQ2hhdCBuZWNlc2l0YSBsYSBsaXN0YSBkZSBhZ2VudGVzIHBhcmEgc2VsZWNjaW9uYXIgZWwgZGUgbGEgY29udmVyc2FjacOzbi5cbiAgICBlbnN1cmVBZ2VudHNMb2FkZWQoKS50aGVuKCgpID0+IHtcbiAgICAgIC8vIFByaW9yaWRhZCBhbCByZWFicmlyOiBwcmltZXIgY2hhdCBzaW4gbGVlciDihpIgw7psdGltYSBjb252ZXJzYWNpw7NuIGFiaWVydGEg4oaSIEhvbWUuXG4gICAgICBjb25zdCB7IGNoYXRzIH0gPSBnZXRDaGF0c1N0b3JlU3RhdGUoKVxuICAgICAgY29uc3QgbGFzdEFjdGl2ZUNoYXRJZCA9IHJlYWRMYXN0QWN0aXZlQ2hhdElkKHVzZXIuaWQpXG4gICAgICBjb25zdCB0YXJnZXQgPVxuICAgICAgICBjaGF0cy5maW5kKGNoYXQgPT4gY2hhdC5pc1JlYWQgPT09IGZhbHNlKSA/P1xuICAgICAgICAobGFzdEFjdGl2ZUNoYXRJZCA/IGNoYXRzLmZpbmQoY2hhdCA9PiBjaGF0LnNlc3Npb25FeHRlcm5hbElkID09PSBsYXN0QWN0aXZlQ2hhdElkKSA6IHVuZGVmaW5lZClcblxuICAgICAgaWYgKHRhcmdldCkge1xuICAgICAgICBnb1RvQ2hhdFJlZi5jdXJyZW50Py4odGFyZ2V0KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZ29Ib21lUmVmLmN1cnJlbnQ/LigpXG4gICAgICB9XG5cbiAgICAgIGZvY3VzQ2hhdElucHV0KClcbiAgICB9KVxuICB9LCBbYW1wbGl0dWRFdmVudCwgZW5zdXJlQWdlbnRzTG9hZGVkLCBmb2N1c0NoYXRJbnB1dCwgc2V0Q2hhdFZpZXdWaXNpYmxlLCB1c2VyLmlkXSlcblxuICAvKipcbiAgICogVG9tYSBjb250cm9sIGRlc2RlIHVuIGhvc3QgKGhlYWRlciwgcHJveWVjdG8sIGNsaWVudGXigKYpOiBhYnJlIGVsIHBhbmVsLCBkZXNjYXJ0YSBsYVxuICAgKiBjb252ZXJzYWNpw7NuIGFiaWVydGEgeSBhcGxpY2EgZWwgY29udGV4dG8gZGVsIGhvc3QuIE5PIHZ1ZWx2ZSBhIGxhIMO6bHRpbWEgY29udmVyc2FjacOzblxuICAgKiDigJQgZXNvIHPDs2xvIGxvIGhhY2UgZWwgcGlsbCAoYGhhbmRsZVJlc3RvcmVGcm9tTWluaW1pemVkYCkuXG4gICAqL1xuICBjb25zdCBhcHBseUV4cGFuZGVkSG9zdFRha2VvdmVyID0gdXNlQ2FsbGJhY2soXG4gICAgKGRldGFpbDogTWFpYUhvc3RPcGVuRGV0YWlsKSA9PiB7XG4gICAgICBjbGVhck1haWFQYW5lbFNlc3Npb24odXNlci5pZClcbiAgICAgIHNldElzTWluaW1pemVkKGZhbHNlKVxuICAgICAgc2V0Q2hhdFZpZXdWaXNpYmxlKHRydWUpXG4gICAgICB3cml0ZUxhc3RBY3RpdmVDaGF0SWQodXNlci5pZCwgbnVsbClcbiAgICAgIGVuc3VyZUFnZW50c0xvYWRlZCgpXG5cbiAgICAgIHNldEluaXRpYWxDaGF0SWQobnVsbClcbiAgICAgIHNldE5ld0NoYXRLZXkocHJldiA9PiBwcmV2ICsgMSlcbiAgICAgIHNldFVzZXJJbml0aWFsTWVzc2FnZSh7IG1lc3NhZ2U6ICcnLCBhdHRhY2htZW50czogW10gfSlcbiAgICAgIHNldEN1cnJlbnRPcHRpb24ob3B0aW9ucy5ob21lKVxuICAgICAgc2V0RGlkUmVzZXRDb250ZXh0SW5TZWN0aW9uKGZhbHNlKVxuICAgICAgc2V0SGFzRXJyb3IoZmFsc2UpXG4gICAgICBzZXRJc1dyaXRpbmcoZmFsc2UpXG4gICAgICB1c2VGYXFzU3RvcmUuZ2V0U3RhdGUoKS5jbGVhckZhcXMoKVxuICAgICAgYmFubmVyRmFxQXV0b1NlbnRSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgICByZXNldFNlbGVjdGVkQ2hhdFJlZi5jdXJyZW50Py4oKVxuICAgICAgZ2V0Q2hhdHNTdG9yZVN0YXRlKCkuc2V0QWN0aXZlQ2hhdElkKG51bGwpXG4gICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnY2hhdC1zZXNzaW9uLWNoYW5nZWQnKSlcblxuICAgICAgaWYgKGRldGFpbC5zZWN0aW9uID09PSAncHJvamVjdCcgfHwgZGV0YWlsLnNlY3Rpb24gPT09ICd0YXNrJykge1xuICAgICAgICBzZXRQcm9qZWN0Py4oZGV0YWlsLnByb2plY3QgPz8gbnVsbClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNldFByb2plY3Q/LihudWxsKVxuICAgICAgfVxuXG4gICAgICBpZiAoZGV0YWlsLnNlY3Rpb24gPT09ICdjbGllbnQnKSB7XG4gICAgICAgIHNldENsaWVudD8uKGRldGFpbC5jbGllbnQgPz8gbnVsbClcbiAgICAgIH0gZWxzZSBpZiAoZGV0YWlsLnNlY3Rpb24gPT09ICdoZWFkZXInIHx8IGRldGFpbC5zZWN0aW9uID09PSAncGxhbm5lcicpIHtcbiAgICAgICAgc2V0Q2xpZW50Py4obnVsbClcbiAgICAgIH1cblxuICAgICAgaWYgKGRldGFpbC5zZWN0aW9uID09PSAndGFzaycpIHtcbiAgICAgICAgc2V0VGFzaz8uKGRldGFpbC50YXNrID8/IG51bGwpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXRUYXNrPy4obnVsbClcbiAgICAgIH1cblxuICAgICAgaWYgKGRldGFpbC5zZWN0aW9uID09PSAnaGVhZGVyJyB8fCBkZXRhaWwuc2VjdGlvbiA9PT0gJ3BsYW5uZXInKSB7XG4gICAgICAgIHNldENoaXBzUHJvamVjdChudWxsKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBuZXh0TGF5b3V0ID0gcmVzb2x2ZUluaXRpYWxNYWlhQ2hhdExheW91dE1vZGUoe1xuICAgICAgICBzZWN0aW9uOiBkZXRhaWwuc2VjdGlvbiBhcyBTZWN0aW9uLFxuICAgICAgICBiYW5uZXJFbnRyeUZhcTogZGV0YWlsLmZhcSxcbiAgICAgIH0pXG4gICAgICBzZXRMYXlvdXRNb2RlKG5leHRMYXlvdXQpXG4gICAgICBzZXREcmFnUG9zaXRpb24obnVsbClcblxuICAgICAgZm9jdXNDaGF0SW5wdXQoKVxuICAgICAgcGF0Y2hNYWlhUGFuZWxTZXNzaW9uKHVzZXIuaWQsIHtcbiAgICAgICAgaXNFeHBhbmRlZDogdHJ1ZSxcbiAgICAgICAgY3VycmVudE9wdGlvbjogb3B0aW9ucy5ob21lLFxuICAgICAgICBhZ2VudHNOYXZBY3RpdmU6IG51bGwsXG4gICAgICAgIGFjdGl2ZUNoYXRJZDogbnVsbCxcbiAgICAgICAgYWdlbnRJZDogYWdlbnQ/LmlkID8/IG51bGwsXG4gICAgICAgIHNpZGViYXJPcGVuOiBzaWRlYmFyT3BlblJlZi5jdXJyZW50LFxuICAgICAgICBkcmFnUG9zaXRpb246IG51bGwsXG4gICAgICAgIGhvc3RDb250ZXh0OiB7XG4gICAgICAgICAgc2VjdGlvbjogZGV0YWlsLnNlY3Rpb24gYXMgU2VjdGlvbixcbiAgICAgICAgICBwcm9qZWN0OiBkZXRhaWwuc2VjdGlvbiA9PT0gJ3Byb2plY3QnIHx8IGRldGFpbC5zZWN0aW9uID09PSAndGFzaycgPyAoZGV0YWlsLnByb2plY3QgPz8gbnVsbCkgOiBudWxsLFxuICAgICAgICAgIGNsaWVudDogZGV0YWlsLnNlY3Rpb24gPT09ICdjbGllbnQnID8gKGRldGFpbC5jbGllbnQgPz8gbnVsbCkgOiBudWxsLFxuICAgICAgICAgIHRhc2s6IGRldGFpbC5zZWN0aW9uID09PSAndGFzaycgPyAoZGV0YWlsLnRhc2sgPz8gbnVsbCkgOiBudWxsLFxuICAgICAgICAgIGNoaXBzUHJvamVjdDogbnVsbCxcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgfSxcbiAgICBbXG4gICAgICBhZ2VudD8uaWQsXG4gICAgICBlbnN1cmVBZ2VudHNMb2FkZWQsXG4gICAgICBmb2N1c0NoYXRJbnB1dCxcbiAgICAgIHNldENoYXRWaWV3VmlzaWJsZSxcbiAgICAgIHNldENoaXBzUHJvamVjdCxcbiAgICAgIHNldENsaWVudCxcbiAgICAgIHNldFByb2plY3QsXG4gICAgICBzZXRUYXNrLFxuICAgICAgdXNlci5pZCxcbiAgICBdXG4gIClcblxuICBjb25zdCBoYW5kbGVTZW5kTWVzc2FnZVJlYWR5ID0gdXNlQ2FsbGJhY2soXG4gICAgKFxuICAgICAgc2VuZE1lc3NhZ2U6IChcbiAgICAgICAgbWVzc2FnZTogc3RyaW5nLFxuICAgICAgICBhdHRhY2htZW50cz86IEF0dGFjaG1lbnRGaWxlW10sXG4gICAgICAgIGZhcUlkPzogc3RyaW5nLFxuICAgICAgICBhZ2VudFN1Z2dlc3Rpb25JZD86IHN0cmluZyxcbiAgICAgICAgbWVudGlvbnM/OiBDb250ZXh0TWVudGlvbltdLFxuICAgICAgICBmdWFJZD86IHN0cmluZyxcbiAgICAgICAgc2NJZD86IHN0cmluZ1xuICAgICAgKSA9PiB2b2lkLFxuICAgICAgc3RvcEdlbmVyYXRpb246ICgpID0+IHZvaWQsXG4gICAgICBzdHJlYW1pbmc6IGJvb2xlYW4sXG4gICAgICB3cml0aW5nOiBib29sZWFuXG4gICAgKSA9PiB7XG4gICAgICBzZXRTZW5kTWVzc2FnZUZ1bmN0aW9uKCgpID0+IHNlbmRNZXNzYWdlKVxuICAgICAgc2V0U3RvcEdlbmVyYXRpb25GdW5jdGlvbigoKSA9PiBzdG9wR2VuZXJhdGlvbilcbiAgICAgIHNldElzU3RyZWFtaW5nKHN0cmVhbWluZylcbiAgICAgIHNldElzV3JpdGluZyh3cml0aW5nKVxuICAgIH0sXG4gICAgW11cbiAgKVxuXG4gIGNvbnN0IGhhbmRsZVNlbmRNZXNzYWdlID0gdXNlQ2FsbGJhY2soXG4gICAgKFxuICAgICAgbWVzc2FnZTogc3RyaW5nLFxuICAgICAgYXR0YWNobWVudHM/OiBBdHRhY2htZW50RmlsZVtdLFxuICAgICAgZmFxSWQ/OiBzdHJpbmcsXG4gICAgICBhZ2VudFN1Z2dlc3Rpb25JZD86IHN0cmluZyxcbiAgICAgIG1lbnRpb25zPzogQ29udGV4dE1lbnRpb25bXSxcbiAgICAgIGZ1YUlkPzogc3RyaW5nLFxuICAgICAgc2NJZD86IHN0cmluZ1xuICAgICkgPT4ge1xuICAgICAgaWYgKHNpZGViYXJIYXNFcnJvcikge1xuICAgICAgICBzZXRTaWRlYmFySGFzRXJyb3IoZmFsc2UpXG4gICAgICB9XG4gICAgICBpZiAoc2VuZE1lc3NhZ2VGdW5jdGlvbiAmJiBjb21wdXRlZEN1cnJlbnRPcHRpb24gPT09IG9wdGlvbnMuY2hhdCkge1xuICAgICAgICBzZW5kTWVzc2FnZUZ1bmN0aW9uKG1lc3NhZ2UsIGF0dGFjaG1lbnRzLCBmYXFJZCwgYWdlbnRTdWdnZXN0aW9uSWQsIG1lbnRpb25zLCBmdWFJZCwgc2NJZClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXJ0Q2hhdChtZXNzYWdlLCBhdHRhY2htZW50cywgZmFxSWQsIGFnZW50U3VnZ2VzdGlvbklkLCBtZW50aW9ucywgZnVhSWQsIHNjSWQpXG4gICAgICB9XG4gICAgfSxcbiAgICBbc2VuZE1lc3NhZ2VGdW5jdGlvbiwgc3RhcnRDaGF0LCBjb21wdXRlZEN1cnJlbnRPcHRpb24sIHNpZGViYXJIYXNFcnJvcl1cbiAgKVxuXG4gIGNvbnN0IGhhbmRsZUdvSG9tZSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICAvLyBTaSBlc3RhbW9zIGVuIHVuYSBjb252ZXJzYWNpw7NuIHkgdmFtb3MgYSBob21lLCByZXNldGVhciBpbml0aWFsQ2hhdElkIHkgaW5jcmVtZW50YXIgbmV3Q2hhdEtleVxuICAgIGlmIChjdXJyZW50T3B0aW9uID09PSBvcHRpb25zLmNoYXQpIHtcbiAgICAgIC8vIE5vIGNvcnRhbW9zIGxhIGdlbmVyYWNpw7NuOiBsYSBzZXNpw7NuIHNpZ3VlIHJlc3BvbmRpZW5kbyBlbiBiYWNrZ3JvdW5kLlxuICAgICAgc2V0SW5pdGlhbENoYXRJZChudWxsKVxuICAgICAgc2V0TmV3Q2hhdEtleShwcmV2ID0+IHByZXYgKyAxKVxuICAgICAgc2V0SXNXcml0aW5nKGZhbHNlKVxuICAgICAgLy8gTm8gYm9ycmFyIGVsIGNsaWVudGUgc2kgZXMgYWdlbnRlIGRlIGNsaWVudGVzIChpZ3VhbCBxdWUgZWwgcHJveWVjdG8gc2UgbWFudGllbmUpXG4gICAgICBpZiAoYWdlbnQ/LmVudGl0eSAhPT0gJ2NsaWVudCcpIHtcbiAgICAgICAgc2V0Q2xpZW50Py4obnVsbClcbiAgICAgIH1cbiAgICAgIGlmIChzZWN0aW9uICE9PSAndGFzaycpIHtcbiAgICAgICAgc2V0VGFzaz8uKG51bGwpXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChcbiAgICAgICghYWdlbnQgfHwgYWdlbnQ/LmlzX2RlbGV0ZWQgfHwgYWdlbnQ/Lmhhc19ub3RfcGVybWlzc2lvbnMgfHwgYWdlbnQ/Lmhhc19ub3RfYWNjZXNzIHx8IGFnZW50Py5wcm9qZWN0X2RlbGV0ZWQpICYmXG4gICAgICBhZ2VudHMuZGF0YS5sZW5ndGggPiAwXG4gICAgKSB7XG4gICAgICBzZWxlY3RBZ2VudChhZ2VudHMuZGF0YVswXSlcbiAgICB9XG4gICAgLy8gT3JjaGVzdHJhdG9yIGVuIGhvbWUgZ2xvYmFsIChoZWFkZXIvcGxhbm5lcik6IGFsIGluaWNpYXIgdW4gY2hhdCBudWV2byBzZSBkZWJlIHZvbHZlciBhbCBwYXNvIDFcbiAgICAvLyAobGlzdGEgZGUgY29udGV4dG9zIHJlY2llbnRlcyksIHBvciBsbyBxdWUgaGF5IHF1ZSBsaW1waWFyIHRvZG8gZWwgY29udGV4dG8gcGluZWFkby5cbiAgICBpZiAoaXNHbG9iYWxNYWlhU2VjdGlvbihzZWN0aW9uKSAmJiBhZ2VudD8udHlwZSA9PT0gJ29yY2hlc3RyYXRvcicpIHtcbiAgICAgIHNldFByb2plY3QobnVsbClcbiAgICAgIHNldENsaWVudD8uKG51bGwpXG4gICAgICBzZXRUYXNrPy4obnVsbClcbiAgICB9XG4gICAgc2V0Q3VycmVudE9wdGlvbihvcHRpb25zLmhvbWUpXG4gICAgc2V0Q2hpcHNQcm9qZWN0KG51bGwpXG4gICAgc2V0SGFzRXJyb3IoZmFsc2UpXG4gICAgaXNXZWJTZWFyY2hBY3RpdmUgJiYgdG9nZ2xlV2ViU2VhcmNoKClcbiAgICBpZiAocmVzZXRTZWxlY3RlZENoYXRSZWYuY3VycmVudCkge1xuICAgICAgcmVzZXRTZWxlY3RlZENoYXRSZWYuY3VycmVudCgpXG4gICAgfVxuICB9LCBbXG4gICAgb3B0aW9ucy5ob21lLFxuICAgIG9wdGlvbnMuY2hhdCxcbiAgICBjdXJyZW50T3B0aW9uLFxuICAgIGlzV2ViU2VhcmNoQWN0aXZlLFxuICAgIHRvZ2dsZVdlYlNlYXJjaCxcbiAgICBhZ2VudCxcbiAgICBhZ2VudHMsXG4gICAgc2VsZWN0QWdlbnQsXG4gICAgc2V0UHJvamVjdCxcbiAgICBzZXRDbGllbnQsXG4gICAgc2V0VGFzayxcbiAgICBzdG9wR2VuZXJhdGlvbkZ1bmN0aW9uLFxuICAgIHNlY3Rpb24sXG4gIF0pXG5cbiAgZ29Ib21lUmVmLmN1cnJlbnQgPSBoYW5kbGVHb0hvbWVcblxuICBjb25zdCBoYW5kbGVTdGFydE5ld0NoYXQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY29uc3QgZnJvbU15QWdlbnRzID0gY29tcHV0ZWRDdXJyZW50T3B0aW9uID09PSBvcHRpb25zLm15QWdlbnRzXG4gICAgY29uc3QgZnJvbU1haWFrZXJIb21lID0gY29tcHV0ZWRDdXJyZW50T3B0aW9uID09PSBvcHRpb25zLmhvbWUgJiYgaXNNYWlha2VyQWdlbnRTZWxlY3RlZFxuXG4gICAgaWYgKGZyb21NeUFnZW50cyB8fCBmcm9tTWFpYWtlckhvbWUpIHtcbiAgICAgIGNvbnN0IGZpcnN0QWdlbnQgPSBhZ2VudHMuZGF0YVswXVxuICAgICAgaWYgKGZpcnN0QWdlbnQpIHtcbiAgICAgICAgc2V0UHJvamVjdChudWxsKVxuICAgICAgICBzZXRDbGllbnQ/LihudWxsKVxuICAgICAgICBzZXRUYXNrPy4obnVsbClcbiAgICAgICAgc2VsZWN0QWdlbnQoZmlyc3RBZ2VudClcbiAgICAgIH1cbiAgICAgIHNldEluaXRpYWxDaGF0SWQobnVsbClcbiAgICAgIHNldE5ld0NoYXRLZXkocHJldiA9PiBwcmV2ICsgMSlcbiAgICAgIHNldEN1cnJlbnRPcHRpb24ob3B0aW9ucy5ob21lKVxuICAgICAgc2V0Q2hpcHNQcm9qZWN0KG51bGwpXG4gICAgICBzZXRIYXNFcnJvcihmYWxzZSlcbiAgICAgIGlmIChpc1dlYlNlYXJjaEFjdGl2ZSkgdG9nZ2xlV2ViU2VhcmNoKClcbiAgICAgIHJlc2V0U2VsZWN0ZWRDaGF0UmVmLmN1cnJlbnQ/LigpXG4gICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnY2hhdC1zZXNzaW9uLWNoYW5nZWQnKSlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGhhbmRsZUdvSG9tZSgpXG4gIH0sIFtcbiAgICBhZ2VudHMuZGF0YSxcbiAgICBjb21wdXRlZEN1cnJlbnRPcHRpb24sXG4gICAgaGFuZGxlR29Ib21lLFxuICAgIGlzTWFpYWtlckFnZW50U2VsZWN0ZWQsXG4gICAgaXNXZWJTZWFyY2hBY3RpdmUsXG4gICAgc2VsZWN0QWdlbnQsXG4gICAgc2V0Q2xpZW50LFxuICAgIHNldFByb2plY3QsXG4gICAgc2V0VGFzayxcbiAgICB0b2dnbGVXZWJTZWFyY2gsXG4gIF0pXG5cbiAgY29uc3QgaGFuZGxlUmVzZXRDaGF0ID0gdXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuICAgIHNldFVzZXJJbml0aWFsTWVzc2FnZSh7IG1lc3NhZ2U6ICcnLCBhdHRhY2htZW50czogW10gfSlcbiAgICBzZXRJbml0aWFsQ2hhdElkKG51bGwpXG4gICAgLy8gRGlzcGF0Y2ggZXZlbnQgdG8gY2xlYXIgdGhlIGlucHV0IHRleHRhcmVhXG4gICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2NoYXQtc2Vzc2lvbi1jaGFuZ2VkJykpXG4gICAgaGFuZGxlR29Ib21lKClcbiAgfSwgW2hhbmRsZUdvSG9tZV0pXG5cbiAgLy8gQm90w7NuIFwidm9sdmVyXCIgZGVsIGhlYWRlciAoc29sbyBvcmNoZXN0cmF0b3IpOlxuICAvLyAtIERlc2RlIGVsIGNoYXQgKGhlYWRlciBvIHByb2plY3QvY2xpZW50L3Rhc2spOiBpbmljaWEgdW5hIGNvbnZlcnNhY2nDs24gbnVldmEgY29uc2VydmFuZG8gZWxcbiAgLy8gICBjb250ZXh0byBwaW5lYWRvIHkgdnVlbHZlIGFsIGhvbWUgKHBhc28gMiBjb24gRkFRcy9GVUFzKS5cbiAgLy8gLSBFbiBlbCBob21lIHBhc28gMiAoRkFRcy9GVUFzIGNvbiBjb250ZXh0byk6IGxpbXBpYSBlbCBjb250ZXh0byBwaW5lYWRvIHkgdnVlbHZlIGFsIHBhc28gMVxuICAvLyAgIChzZWxlY3RvciBkZSBjb250ZXh0b3MgcmVjaWVudGVzKS4gRW4gaGVhZGVyIHNpZW1wcmU7IGVuIHByb2plY3QvY2xpZW50L3Rhc2sgc29sbyBzaSBlbFxuICAvLyAgIHVzdWFyaW8gcmVpbmljacOzIGVsIGNvbnRleHRvIChkaWRSZXNldENvbnRleHRJblNlY3Rpb24pLlxuICBjb25zdCBoYW5kbGVCYWNrID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IHRvID0gcmVzb2x2ZUFpQ2hhdEJhY2tEZXN0aW5hdGlvbihzZWN0aW9uLCBhZ2VudD8udHlwZSwgY29tcHV0ZWRDdXJyZW50T3B0aW9uLCBvcHRpb25zLmhvbWUpXG4gICAgYW1wbGl0dWRFdmVudChFVkVOVFMuYWlDaGF0QmFjaywgeyB0byB9KVxuXG4gICAgLy8gRGVzZGUgZWwgY2hhdCDihpIgbnVldmEgY29udmVyc2FjacOzbiBTSU4gYm9ycmFyIGVsIGNvbnRleHRvIHBpbmVhZG8sIHZvbHZpZW5kbyBhbCBob21lLlxuICAgIGlmIChjb21wdXRlZEN1cnJlbnRPcHRpb24gPT09IG9wdGlvbnMuY2hhdCkge1xuICAgICAgLy8gTm8gY29ydGFtb3MgbGEgZ2VuZXJhY2nDs246IGxhIHNlc2nDs24gc2lndWUgcmVzcG9uZGllbmRvIGVuIGJhY2tncm91bmQuXG4gICAgICBzZXRJc1dyaXRpbmcoZmFsc2UpXG4gICAgICBzZXRVc2VySW5pdGlhbE1lc3NhZ2UoeyBtZXNzYWdlOiAnJywgYXR0YWNobWVudHM6IFtdIH0pXG4gICAgICBzZXRJbml0aWFsQ2hhdElkKG51bGwpXG4gICAgICBzZXROZXdDaGF0S2V5KHByZXYgPT4gcHJldiArIDEpXG4gICAgICBzZXRIYXNFcnJvcihmYWxzZSlcbiAgICAgIGlzV2ViU2VhcmNoQWN0aXZlICYmIHRvZ2dsZVdlYlNlYXJjaCgpXG4gICAgICBpZiAocmVzZXRTZWxlY3RlZENoYXRSZWYuY3VycmVudCkge1xuICAgICAgICByZXNldFNlbGVjdGVkQ2hhdFJlZi5jdXJyZW50KClcbiAgICAgIH1cbiAgICAgIHNldEN1cnJlbnRPcHRpb24ob3B0aW9ucy5ob21lKVxuICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2NoYXQtc2Vzc2lvbi1jaGFuZ2VkJykpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBIb21lIHBhc28gMiAoY29udGV4dG8gcGluZWFkbykg4oaSIGxpbXBpYXIgZWwgY29udGV4dG8geSB2b2x2ZXIgYWwgcGFzbyAxIChjb250ZXh0b3MgcmVjaWVudGVzKS5cbiAgICBpZiAoY29tcHV0ZWRDdXJyZW50T3B0aW9uID09PSBvcHRpb25zLmhvbWUgJiYgKGlzR2xvYmFsTWFpYVNlY3Rpb24oc2VjdGlvbikgfHwgZGlkUmVzZXRDb250ZXh0SW5TZWN0aW9uKSkge1xuICAgICAgc2V0UHJvamVjdChudWxsKVxuICAgICAgc2V0Q2xpZW50Py4obnVsbClcbiAgICAgIHNldFRhc2s/LihudWxsKVxuICAgICAgc2V0Q2hpcHNQcm9qZWN0KG51bGwpXG4gICAgfVxuICB9LCBbXG4gICAgY29tcHV0ZWRDdXJyZW50T3B0aW9uLFxuICAgIHNlY3Rpb24sXG4gICAgYWdlbnQ/LnR5cGUsXG4gICAgYW1wbGl0dWRFdmVudCxcbiAgICBvcHRpb25zLmhvbWUsXG4gICAgc3RvcEdlbmVyYXRpb25GdW5jdGlvbixcbiAgICBpc1dlYlNlYXJjaEFjdGl2ZSxcbiAgICB0b2dnbGVXZWJTZWFyY2gsXG4gICAgZGlkUmVzZXRDb250ZXh0SW5TZWN0aW9uLFxuICAgIHNldFByb2plY3QsXG4gICAgc2V0Q2xpZW50LFxuICAgIHNldFRhc2ssXG4gICAgc2V0Q2hpcHNQcm9qZWN0LFxuICBdKVxuXG4gIC8vIERldGVjdGEgZWwgcmVpbmljaW8gZGUgY29udGV4dG8gZW4gcHJvamVjdC9jbGllbnQvdGFzazogY29udGV4dG8gcGluZWFkbyDihpIgdmFjw61vIGNvbiBlbFxuICAvLyBvcmNoZXN0cmF0b3IgKHAuIGVqLiBhbCByZXNlbGVjY2lvbmFyIE1BSUEgZW4gZWwgbGlzdGFkbykuIFNvbG8gbGEgdHJhbnNpY2nDs24gY3VlbnRhLCBhc8OtIHVuYVxuICAvLyBhcGVydHVyYSBmcmVzY2EgKGNvbnRleHRvIHBpbmVhZG8gZGVzZGUgbGEgc2VjY2nDs24pIG5vIGxvIGFjdGl2YS5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBwaW5uZWQgPSAhISh0YXNrPy5pZCB8fCBjaGlwc1Byb2plY3Q/LnByb2plY3RJZCB8fCBjbGllbnQ/LmlkIHx8IHByb2plY3Q/LmlkKVxuICAgIGNvbnN0IHdhc1Bpbm5lZCA9IHByZXZIYXNQaW5uZWRDb250ZXh0UmVmLmN1cnJlbnRcbiAgICBwcmV2SGFzUGlubmVkQ29udGV4dFJlZi5jdXJyZW50ID0gcGlubmVkXG4gICAgaWYgKCFpc0dsb2JhbE1haWFTZWN0aW9uKHNlY3Rpb24pICYmIGFnZW50Py50eXBlID09PSAnb3JjaGVzdHJhdG9yJyAmJiB3YXNQaW5uZWQgJiYgIXBpbm5lZCkge1xuICAgICAgc2V0RGlkUmVzZXRDb250ZXh0SW5TZWN0aW9uKHRydWUpXG4gICAgfVxuICB9LCBbdGFzaz8uaWQsIGNoaXBzUHJvamVjdD8ucHJvamVjdElkLCBjbGllbnQ/LmlkLCBwcm9qZWN0Py5pZCwgc2VjdGlvbiwgYWdlbnQ/LnR5cGVdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3Qgb25NZXJnZUNyZWF0ZWRBZ2VudCA9IChldnQ6IEV2ZW50KSA9PiB7XG4gICAgICBjb25zdCB7IGFnZW50OiBuZXh0QWdlbnQgfSA9IChldnQgYXMgQ3VzdG9tRXZlbnQ8eyBhZ2VudDogQWdlbnQgfT4pLmRldGFpbCB8fCB7fVxuICAgICAgaWYgKG5leHRBZ2VudD8uaWQpIHtcbiAgICAgICAgYWRkQWdlbnQobmV4dEFnZW50LCB7IG5hdmlnYXRlSG9tZTogZmFsc2UgfSlcbiAgICAgIH1cbiAgICB9XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbWFpYS1tZXJnZS1jcmVhdGVkLWFnZW50LWludG8tbGlzdCcsIG9uTWVyZ2VDcmVhdGVkQWdlbnQpXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21haWEtbWVyZ2UtY3JlYXRlZC1hZ2VudC1pbnRvLWxpc3QnLCBvbk1lcmdlQ3JlYXRlZEFnZW50KVxuICAgIH1cbiAgfSwgW2FkZEFnZW50XSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IG9uU3luY0VkaXRlZEFnZW50ID0gKGV2dDogRXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IHsgYWdlbnQ6IG5leHRBZ2VudCB9ID0gKGV2dCBhcyBDdXN0b21FdmVudDx7IGFnZW50OiBBZ2VudCB9PikuZGV0YWlsIHx8IHt9XG4gICAgICBpZiAoIW5leHRBZ2VudD8uaWQpIHJldHVyblxuICAgICAgdXBkYXRlQWdlbnQobmV4dEFnZW50KVxuICAgICAgaWYgKGFnZW50Py5pZCA9PT0gbmV4dEFnZW50LmlkKSB7XG4gICAgICAgIHNlbGVjdEFnZW50KG5leHRBZ2VudClcbiAgICAgIH1cbiAgICB9XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbWFpYS1zeW5jLWVkaXRlZC1hZ2VudC1mcm9tLWNoYXQnLCBvblN5bmNFZGl0ZWRBZ2VudClcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbWFpYS1zeW5jLWVkaXRlZC1hZ2VudC1mcm9tLWNoYXQnLCBvblN5bmNFZGl0ZWRBZ2VudClcbiAgICB9XG4gIH0sIFt1cGRhdGVBZ2VudCwgc2VsZWN0QWdlbnQsIGFnZW50Py5pZF0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBvcGVuQ2hhdFZpZXcgPSAoKSA9PiB7XG4gICAgICBzZXRIYXNFcnJvcihmYWxzZSlcbiAgICAgIHNldEluaXRpYWxDaGF0SWQobnVsbClcbiAgICAgIHNldE5ld0NoYXRLZXkocHJldiA9PiBwcmV2ICsgMSlcbiAgICAgIHNldFVzZXJJbml0aWFsTWVzc2FnZSh7IG1lc3NhZ2U6ICcnLCBhdHRhY2htZW50czogW10gfSlcbiAgICAgIHNldEN1cnJlbnRPcHRpb24ob3B0aW9ucy5jaGF0KVxuICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2NoYXQtc2Vzc2lvbi1jaGFuZ2VkJykpXG4gICAgfVxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21haWEtb3Blbi1jaGF0LXZpZXcnLCBvcGVuQ2hhdFZpZXcpXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21haWEtb3Blbi1jaGF0LXZpZXcnLCBvcGVuQ2hhdFZpZXcpXG4gICAgfVxuICB9LCBbXSlcblxuICAvKipcbiAgICogRWwgw61jb25vIGRlIE1BSUEgZGVsIGhlYWRlciBsbGV2YSBzaWVtcHJlIGFsIEhvbWUuIFNpIE1BSUEgeWEgZXN0w6EgbW9udGFkYSBwZXJvXG4gICAqIG1pbmltaXphZGEsIGVsIGhvc3Qgbm8gcHVlZGUgcmVzb2x2ZXJsbyBjYW1iaWFuZG8gYGlzT3BlbmAgKHlhIGVzdMOhIGVuIHRydWUpLFxuICAgKiBhc8OtIHF1ZSBhdmlzYSBwb3IgZXZlbnRvIHkgYWPDoSByZXN0YXVyYW1vcyB5IHZhbW9zIGFsIEhvbWUuXG4gICAqL1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IG9wZW5Ib21lID0gKCkgPT4ge1xuICAgICAgYXBwbHlFeHBhbmRlZEhvc3RUYWtlb3Zlcih7XG4gICAgICAgIHNlY3Rpb246ICdoZWFkZXInLFxuICAgICAgICBlbnRpdHk6IHsgcHJvamVjdElkOiBudWxsLCBjbGllbnRJZDogbnVsbCB9LFxuICAgICAgfSlcbiAgICB9XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbWFpYS1vcGVuLWhvbWUnLCBvcGVuSG9tZSlcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbWFpYS1vcGVuLWhvbWUnLCBvcGVuSG9tZSlcbiAgICB9XG4gIH0sIFthcHBseUV4cGFuZGVkSG9zdFRha2VvdmVyXSlcblxuICAvKipcbiAgICogT3RybyBob3N0IChwcm95ZWN0bywgY2xpZW50ZSwgYmFubmVyLCBoZWFkZXLigKYpIHBpZGUgYWJyaXIgTUFJQSBtaWVudHJhcyB5YSBoYXkgdW5hXG4gICAqIGluc3RhbmNpYSBtb250YWRhLiBFeHBhbmRlIHNpIGVzdGFiYSBtaW5pbWl6YWRvLCBhcGxpY2EgZWwgY29udGV4dG8gZGVsIGhvc3QgbnVldm9cbiAgICogeSB2YSBhbCBob21lIOKAlCBzaW4gcmVzdGF1cmFyIGxhIGNvbnZlcnNhY2nDs24gcHJldmlhIChlc28gbG8gaGFjZSBlbCBwaWxsKS5cbiAgICovXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3Qgb3BlbkZyb21Ib3N0ID0gKGV2ZW50OiBFdmVudCkgPT4ge1xuICAgICAgY29uc3QgeyBkZXRhaWwgfSA9IGV2ZW50IGFzIEN1c3RvbUV2ZW50PE1haWFIb3N0T3BlbkRldGFpbD5cbiAgICAgIGlmICghZGV0YWlsKSByZXR1cm5cbiAgICAgIGFwcGx5RXhwYW5kZWRIb3N0VGFrZW92ZXIoZGV0YWlsKVxuICAgIH1cblxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoTUFJQV9PUEVOX0ZST01fSE9TVF9FVkVOVCwgb3BlbkZyb21Ib3N0KVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKE1BSUFfT1BFTl9GUk9NX0hPU1RfRVZFTlQsIG9wZW5Gcm9tSG9zdClcbiAgICB9XG4gIH0sIFthcHBseUV4cGFuZGVkSG9zdFRha2VvdmVyXSlcblxuICAvKiogTWlzbW8gZmx1am8gcXVlIENoYXRBSU15QWdlbnRzLmhhbmRsZVVzZUFnZW50ICsgb25CYWNrIChoYW5kbGVycy5ob21lKS5cbiAgICogIEVsIGRldGFpbCBwdWVkZSB0cmFlciBvcGNpb25hbG1lbnRlIGBwcm9qZWN0YCwgYGNsaWVudGAsIGB0YXNrYCBwYXJhIGZsb3dzIHF1ZVxuICAgKiAgbmVjZXNpdGFuIHByZXNlcnZhciBjb250ZXh0byAoZWouIHNlbGVjdG9yIGRlIGFnZW50ZXMgZGVzZGUgdW5hIHRhcmVhKS4gU2kgbm8gdmllbmVuLFxuICAgKiAgc2UgbWFudGllbmUgZWwgY29tcG9ydGFtaWVudG8gb3JpZ2luYWwgZGUgbGltcGlhciBwcm9qZWN0L2NsaWVudC4gKi9cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBvcGVuTmV3Q2hhdFdpdGhBZ2VudCA9IChldmVudDogRXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IHsgZGV0YWlsIH0gPSBldmVudCBhcyBDdXN0b21FdmVudDx7XG4gICAgICAgIGFnZW50OiBBZ2VudFxuICAgICAgICBwcm9qZWN0PzogUHJvamVjdCB8IG51bGxcbiAgICAgICAgY2xpZW50PzogQ2xpZW50IHwgbnVsbFxuICAgICAgICB0YXNrPzogVGFzayB8IG51bGxcbiAgICAgIH0+XG4gICAgICBjb25zdCBuZXh0QWdlbnQgPSBkZXRhaWw/LmFnZW50XG4gICAgICBpZiAoIW5leHRBZ2VudCkgcmV0dXJuXG5cbiAgICAgIHNldFByb2plY3QoZGV0YWlsPy5wcm9qZWN0ID8/IG51bGwpXG4gICAgICBzZXRDbGllbnQ/LihkZXRhaWw/LmNsaWVudCA/PyBudWxsKVxuICAgICAgaWYgKGRldGFpbD8udGFzayAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHNldFRhc2s/LihkZXRhaWwudGFzaylcbiAgICAgIH1cbiAgICAgIHNlbGVjdEFnZW50KG5leHRBZ2VudClcbiAgICAgIHNldEhhc0Vycm9yKGZhbHNlKVxuICAgICAgc2V0Q3VycmVudE9wdGlvbihvcHRpb25zLmhvbWUpXG4gICAgfVxuXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbWFpYS1vcGVuLW5ldy1jaGF0LXdpdGgtYWdlbnQnLCBvcGVuTmV3Q2hhdFdpdGhBZ2VudClcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbWFpYS1vcGVuLW5ldy1jaGF0LXdpdGgtYWdlbnQnLCBvcGVuTmV3Q2hhdFdpdGhBZ2VudClcbiAgICB9XG4gIH0sIFtzZWxlY3RBZ2VudCwgc2V0Q2xpZW50LCBzZXRQcm9qZWN0LCBzZXRUYXNrXSlcblxuICAvLyBNZXRhZGF0YSBkZSBsYSBzZXNzaW9uIGFiaWVydGEgKGFnZW50X3R5cGUvYWdlbnRfZW50aXR5ICsgY29udGV4dG8pLCBlbWl0aWRhIHBvciB1c2VDaGF0TWVzc2FnZXMuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3Qgb25TZXNzaW9uTWV0YSA9IChldnQ6IEV2ZW50KSA9PiB7XG4gICAgICBjb25zdCB7IGRldGFpbCB9ID0gZXZ0IGFzIEN1c3RvbUV2ZW50PFNlc3Npb25NZXRhPlxuICAgICAgaWYgKGRldGFpbCkgc2V0U2Vzc2lvbk1ldGEoZGV0YWlsKVxuICAgIH1cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtYWlhLWNoYXQtc2Vzc2lvbi1tZXRhJywgb25TZXNzaW9uTWV0YSlcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbWFpYS1jaGF0LXNlc3Npb24tbWV0YScsIG9uU2Vzc2lvbk1ldGEpXG4gICAgfVxuICB9LCBbXSlcblxuICAvLyBBbCBjYW1iaWFyIGRlIGNvbnZlcnNhY2nDs24gbGltcGlhbW9zIGxhIG1ldGFkYXRhOyBlbCBsb2FkIGRlIGxhIG51ZXZhIHNlc3Npb24gbGEgdnVlbHZlIGEgZW1pdGlyLlxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHNldFNlc3Npb25NZXRhKG51bGwpXG4gIH0sIFtpbml0aWFsQ2hhdElkXSlcblxuICAvLyBDYXJ0ZWwgXCJjb250aW51YXIgZW4gdW4gY2hhdCBudWV2b1wiOiBzZSBtdWVzdHJhIGFsIGFicmlyIHVuYSBjb252ZXJzYWNpw7NuIGRlIHVuIGNsb25lIGxlZ2FjeVxuICAvLyAoYWdlbnRfdHlwZSA9PT0gJ2Nsb25lJyBjb24gZW50aXR5IHByb2plY3QvdGFzay9jbGllbnQpLiBFbCBpbnB1dCBzZSByZWVtcGxhemEgcG9yIGVsIGNhcnRlbC5cbiAgY29uc3QgbGVnYWN5Q29udGV4dFNlc3Npb24gPSB1c2VNZW1vPHsgZW50aXR5VHlwZTogTGVnYWN5Q29udGV4dEVudGl0eTsgY29udGV4dE5hbWU6IHN0cmluZyB9IHwgbnVsbD4oKCkgPT4ge1xuICAgIGlmIChjb21wdXRlZEN1cnJlbnRPcHRpb24gIT09IG9wdGlvbnMuY2hhdCkgcmV0dXJuIG51bGxcbiAgICBpZiAoIXNlc3Npb25NZXRhIHx8IHNlc3Npb25NZXRhLmFnZW50VHlwZSAhPT0gJ2Nsb25lJykgcmV0dXJuIG51bGxcbiAgICBjb25zdCBlbnRpdHkgPSBzZXNzaW9uTWV0YS5hZ2VudEVudGl0eVxuICAgIGlmICghZW50aXR5IHx8ICFMRUdBQ1lfQ09OVEVYVF9FTlRJVElFUy5pbmNsdWRlcyhlbnRpdHkgYXMgTGVnYWN5Q29udGV4dEVudGl0eSkpIHJldHVybiBudWxsXG4gICAgY29uc3QgY29udGV4dE5hbWUgPVxuICAgICAgZW50aXR5ID09PSAndGFzaycgPyBzZXNzaW9uTWV0YS50YXNrTmFtZSA6IGVudGl0eSA9PT0gJ3Byb2plY3QnID8gc2Vzc2lvbk1ldGEucHJvamVjdE5hbWUgOiBzZXNzaW9uTWV0YS5jbGllbnROYW1lXG4gICAgcmV0dXJuIHsgZW50aXR5VHlwZTogZW50aXR5IGFzIExlZ2FjeUNvbnRleHRFbnRpdHksIGNvbnRleHROYW1lOiBjb250ZXh0TmFtZSB8fCAnJyB9XG4gIH0sIFtjb21wdXRlZEN1cnJlbnRPcHRpb24sIHNlc3Npb25NZXRhXSlcblxuICAvLyBNYXJjYSBlbCBhZ2VudGUgZGUgbGEgY29udmVyc2FjacOzbiBsZWdhY3kgcGFyYSBxdWUgaGVhZGVyLCBzZWxlY3RvciB5IGF2YXRhciBtdWVzdHJlbiBlbCBsb2dvXG4gIC8vIE1BSUEgeSBlbCBub21icmUgdGFjaGFkbyAoYWdlbnRlIG9ic29sZXRvKSwgc2luIGRlcGVuZGVyIGRlbCBgdHlwZWAgcmVzdWVsdG8gZGUgbGEgc2VzacOzbiB2aWVqYS5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAobGVnYWN5Q29udGV4dFNlc3Npb24gJiYgYWdlbnQgJiYgIWFnZW50LmlzX2xlZ2FjeV9jb250ZXh0KSB7XG4gICAgICBzZWxlY3RBZ2VudCh7IC4uLmFnZW50LCBpc19sZWdhY3lfY29udGV4dDogdHJ1ZSB9KVxuICAgIH1cbiAgfSwgW2xlZ2FjeUNvbnRleHRTZXNzaW9uLCBhZ2VudCwgc2VsZWN0QWdlbnRdKVxuXG4gIC8vIEFicmUgdW4gY2hhdCBudWV2byBjb24gZWwgb3JjaGVzdHJhdG9yIHNldGVhbmRvIGVsIGNvbnRleHRvIGRlbCBjbG9uZSBsZWdhY3kgKG1pc21vIGNyaXRlcmlvXG4gIC8vIHF1ZSBjbGlja2VhciB1biBjb250ZXh0byByZWNpZW50ZSBlbiBlbCBob21lIOKGkiBwYXNvIDIgY29uIEZBUXMvYWNjaW9uZXMgZGUgZXNlIGNvbnRleHRvKS5cbiAgY29uc3QgaGFuZGxlQ29udGludWVMZWdhY3lDb250ZXh0SW5OZXdDaGF0ID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmICghc2Vzc2lvbk1ldGEpIHJldHVyblxuICAgIGNvbnN0IHtcbiAgICAgIGFnZW50RW50aXR5LFxuICAgICAgcHJvamVjdElkOiBwSWQsXG4gICAgICBwcm9qZWN0TmFtZTogcE5hbWUsXG4gICAgICBjbGllbnRJZDogY0lkLFxuICAgICAgY2xpZW50TmFtZTogY05hbWUsXG4gICAgICB0YXNrSWQ6IHRJZCxcbiAgICAgIHRhc2tOYW1lOiB0TmFtZSxcbiAgICB9ID0gc2Vzc2lvbk1ldGFcblxuICAgIGNvbnN0IG9yY2hlc3RyYXRvciA9IGFnZW50cy5kYXRhLmZpbmQoKGE6IEFnZW50KSA9PiBhLnR5cGUgPT09ICdvcmNoZXN0cmF0b3InKVxuICAgIGlmICghb3JjaGVzdHJhdG9yKSByZXR1cm5cblxuICAgIC8vIFJlc2V0IGRlbCBjaGF0IOKGkiBjb252ZXJzYWNpw7NuIG51ZXZhIChsYSBhbnRlcmlvciBzaWd1ZSBlbiBiYWNrZ3JvdW5kKVxuICAgIHNldElzV3JpdGluZyhmYWxzZSlcbiAgICBzZXRVc2VySW5pdGlhbE1lc3NhZ2UoeyBtZXNzYWdlOiAnJywgYXR0YWNobWVudHM6IFtdIH0pXG4gICAgc2V0SW5pdGlhbENoYXRJZChudWxsKVxuICAgIHNldE5ld0NoYXRLZXkocHJldiA9PiBwcmV2ICsgMSlcbiAgICBzZXRIYXNFcnJvcihmYWxzZSlcblxuICAgIC8vIFNldGVhciBjb250ZXh0byAobWlzbW8gY3JpdGVyaW8gcXVlIGhhbmRsZVNlbGVjdFJlY2VudENvbnRleHQgZGVsIGhvbWUpXG4gICAgc2V0VGFzaz8uKG51bGwpXG4gICAgc2V0UHJvamVjdChudWxsKVxuICAgIHNldENsaWVudD8uKG51bGwpXG4gICAgc2V0Q2hpcHNQcm9qZWN0KG51bGwpXG5cbiAgICBpZiAoYWdlbnRFbnRpdHkgPT09ICdjbGllbnQnICYmIGNJZCAhPSBudWxsKSB7XG4gICAgICBzZXRDbGllbnQ/Lih7IGlkOiBjSWQsIG5hbWU6IGNOYW1lIHx8ICcnIH0pXG4gICAgfSBlbHNlIGlmIChhZ2VudEVudGl0eSA9PT0gJ3Byb2plY3QnICYmIHBJZCAhPSBudWxsKSB7XG4gICAgICBzZXRQcm9qZWN0KHtcbiAgICAgICAgaWQ6IHBJZCxcbiAgICAgICAgbmFtZTogcE5hbWUgfHwgJycsXG4gICAgICAgIC4uLihjSWQgIT0gbnVsbCA/IHsgY2xpZW50SWQ6IGNJZCwgY2xpZW50OiB7IGlkOiBjSWQsIG5hbWU6IGNOYW1lIHx8ICcnIH0gfSA6IHt9KSxcbiAgICAgIH0pXG4gICAgICBzZXRDaGlwc1Byb2plY3QoeyBwcm9qZWN0SWQ6IFN0cmluZyhwSWQpLCBwcm9qZWN0TmFtZTogcE5hbWUgfHwgJycsIGNsaWVudE5hbWU6IGNOYW1lIHx8ICcnIH0pXG4gICAgfSBlbHNlIGlmIChhZ2VudEVudGl0eSA9PT0gJ3Rhc2snICYmIHRJZCAhPSBudWxsKSB7XG4gICAgICBzZXRUYXNrPy4oe1xuICAgICAgICBpZDogdElkLFxuICAgICAgICBuYW1lOiB0TmFtZSB8fCAnJyxcbiAgICAgICAgLi4uKHBJZCAhPSBudWxsID8geyBwcm9qZWN0SWQ6IHBJZCB9IDoge30pLFxuICAgICAgICAuLi4oY0lkICE9IG51bGwgPyB7IGNsaWVudElkOiBjSWQgfSA6IHt9KSxcbiAgICAgIH0pXG4gICAgICBpZiAoY0lkICE9IG51bGwpIHNldENsaWVudD8uKHsgaWQ6IGNJZCwgbmFtZTogY05hbWUgfHwgJycgfSlcbiAgICAgIGlmIChwSWQgIT0gbnVsbCkge1xuICAgICAgICBzZXRQcm9qZWN0KHtcbiAgICAgICAgICBpZDogcElkLFxuICAgICAgICAgIG5hbWU6IHBOYW1lIHx8ICcnLFxuICAgICAgICAgIC4uLihjSWQgIT0gbnVsbCA/IHsgY2xpZW50SWQ6IGNJZCwgY2xpZW50OiB7IGlkOiBjSWQsIG5hbWU6IGNOYW1lIHx8ICcnIH0gfSA6IHt9KSxcbiAgICAgICAgfSlcbiAgICAgICAgc2V0Q2hpcHNQcm9qZWN0KHsgcHJvamVjdElkOiBTdHJpbmcocElkKSwgcHJvamVjdE5hbWU6IHBOYW1lIHx8ICcnLCBjbGllbnROYW1lOiBjTmFtZSB8fCAnJyB9KVxuICAgICAgfVxuICAgIH1cblxuICAgIHNlbGVjdEFnZW50KG9yY2hlc3RyYXRvcilcbiAgICBzZXRTZXNzaW9uTWV0YShudWxsKVxuICAgIHNldEN1cnJlbnRPcHRpb24ob3B0aW9ucy5ob21lKVxuICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdjaGF0LXNlc3Npb24tY2hhbmdlZCcpKVxuICB9LCBbc2Vzc2lvbk1ldGEsIGFnZW50cy5kYXRhLCBzZWxlY3RBZ2VudCwgc2V0Q2xpZW50LCBzZXRQcm9qZWN0LCBzZXRUYXNrLCBzZXRDaGlwc1Byb2plY3QsIHN0b3BHZW5lcmF0aW9uRnVuY3Rpb25dKVxuXG4gIGNvbnN0IHNob3dOZXdDaGF0ID0gY29tcHV0ZWRDdXJyZW50T3B0aW9uICE9PSBvcHRpb25zLmNoYXRcbiAgY29uc3QgaGlkZUhlYWRlckFnZW50U2VsZWN0b3IgPSBjb21wdXRlZEN1cnJlbnRPcHRpb24gPT09IG9wdGlvbnMubXlTa2lsbHNcbiAgY29uc3QgaXNNeUFnZW50c1NlY3Rpb24gPSBjb21wdXRlZEN1cnJlbnRPcHRpb24gPT09IG9wdGlvbnMubXlBZ2VudHNcblxuICAvLyBCb3TDs24gXCJ2b2x2ZXJcIjogc29sbyBwYXJhIGVsIG9yY2hlc3RyYXRvci5cbiAgLy8gLSBFbiBlbCBjaGF0OiBkaXNwb25pYmxlIGVuIHRvZGFzIGxhcyBzZWNjaW9uZXMgKGhlYWRlciB5IHByb2plY3QvY2xpZW50L3Rhc2spLlxuICAvLyAtIEVuIGVsIGhvbWUgcGFzbyAyIChGQVFzL0ZVQXMgY29uIGNvbnRleHRvIHBpbmVhZG8pOiBlbiBlbCBoZWFkZXIgc2llbXByZTsgZW5cbiAgLy8gICBwcm9qZWN0L2NsaWVudC90YXNrIHNvbG8gc2kgZWwgdXN1YXJpbyByZWluaWNpw7MgZWwgY29udGV4dG8gKHBhc8OzIHBvciBlbCBzZWxlY3RvciBkZVxuICAvLyAgIGNvbnRleHRvcyByZWNpZW50ZXMpLiBFbiBlbCBwYXNvIDEgKHNpbiBjb250ZXh0bykgTk8gc2UgbXVlc3RyYS5cbiAgY29uc3QgaGFzUGlubmVkQ29udGV4dCA9ICEhKHRhc2s/LmlkIHx8IGNoaXBzUHJvamVjdD8ucHJvamVjdElkIHx8IGNsaWVudD8uaWQgfHwgcHJvamVjdD8uaWQpXG4gIGNvbnN0IGlzQ2hhdFZpZXcgPSBjb21wdXRlZEN1cnJlbnRPcHRpb24gPT09IG9wdGlvbnMuY2hhdFxuICBjb25zdCBpc0hvbWVTdGVwMiA9IGNvbXB1dGVkQ3VycmVudE9wdGlvbiA9PT0gb3B0aW9ucy5ob21lICYmIGhhc1Bpbm5lZENvbnRleHRcbiAgY29uc3QgaXNIZWFkZXJIb21lU3RlcDIgPSBpc0dsb2JhbE1haWFTZWN0aW9uKHNlY3Rpb24pICYmIGlzSG9tZVN0ZXAyXG4gIGNvbnN0IGlzU2VjdGlvblJlc2V0SG9tZVN0ZXAyID0gIWlzR2xvYmFsTWFpYVNlY3Rpb24oc2VjdGlvbikgJiYgaXNIb21lU3RlcDIgJiYgZGlkUmVzZXRDb250ZXh0SW5TZWN0aW9uXG4gIGNvbnN0IHNob3dCYWNrQnV0dG9uID1cbiAgICBhZ2VudD8udHlwZSA9PT0gJ29yY2hlc3RyYXRvcicgJiZcbiAgICAhaGFzRXJyb3IgJiZcbiAgICAhbG9hZGluZyAmJlxuICAgIChpc0NoYXRWaWV3IHx8IGlzSGVhZGVySG9tZVN0ZXAyIHx8IGlzU2VjdGlvblJlc2V0SG9tZVN0ZXAyKVxuICBjb25zdCBoYW5kbGVPcGVuTWFya2V0cGxhY2UgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKCF3aW5kb3cuTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UUykge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGNsZWFyQWdlbnQoKVxuICAgIHNldEN1cnJlbnRPcHRpb24ob3B0aW9ucy5teUFnZW50cylcbiAgICBwYXRjaE1haWFQYW5lbFNlc3Npb24odXNlci5pZCwge1xuICAgICAgYWdlbnRzTmF2QWN0aXZlOiAnbXlBZ2VudHMnLFxuICAgICAgY3VycmVudE9wdGlvbjogb3B0aW9ucy5teUFnZW50cyxcbiAgICAgIGFjdGl2ZUNoYXRJZDogbnVsbCxcbiAgICAgIGFnZW50SWQ6IG51bGwsXG4gICAgfSlcbiAgfSwgW2NsZWFyQWdlbnQsIHVzZXIuaWRdKVxuXG4gIGNvbnN0IGhhbmRsZU9wZW5Ta2lsbHMgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKCF3aW5kb3cuTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UUykge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHNldEhhc0Vycm9yKGZhbHNlKVxuICAgIHNldEN1cnJlbnRPcHRpb24ob3B0aW9ucy5teVNraWxscylcbiAgICBoYW5kbGVHZXRTa2lsbHMoKVxuICAgIHBhdGNoTWFpYVBhbmVsU2Vzc2lvbih1c2VyLmlkLCB7XG4gICAgICBhZ2VudHNOYXZBY3RpdmU6ICdteVNraWxscycsXG4gICAgICBjdXJyZW50T3B0aW9uOiBvcHRpb25zLm15U2tpbGxzLFxuICAgIH0pXG4gIH0sIFtoYW5kbGVHZXRTa2lsbHMsIHVzZXIuaWRdKVxuXG4gIGNvbnN0IGhhbmRsZUdvVG9NYWlha2VyID0gdXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuICAgIHNldEhhc0Vycm9yKGZhbHNlKVxuICAgIGxldCBtYWlha2VyQWdlbnQgPSBhZ2VudHMuZGF0YS5maW5kKChhOiBBZ2VudCkgPT4gaXNNYXJrZXRwbGFjZUdsb2JhbENsb25lQWdlbnQoYSkpXG4gICAgaWYgKCFtYWlha2VyQWdlbnQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2hNYWlhKHtcbiAgICAgICAgICBwYXRoOiBgYWdlbnRzP2FnZW50X3R5cGU9Y2xvbmUmZW50aXR5PWdsb2JhbCZsYW5nPSR7bWFwQ09STGFuZyhpMThuLmxhbmd1YWdlKX1gLFxuICAgICAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKClcbiAgICAgICAgbWFpYWtlckFnZW50ID0gKGRhdGEuZGF0YSB8fCBbXSkuZmluZCgoYTogQWdlbnQpID0+IGlzTWFya2V0cGxhY2VHbG9iYWxDbG9uZUFnZW50KGEpKVxuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIW1haWFrZXJBZ2VudCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHNldFByb2plY3QobnVsbClcbiAgICBzZXRDbGllbnQ/LihudWxsKVxuICAgIHNldFRhc2s/LihudWxsKVxuICAgIHNlbGVjdEFnZW50KG1haWFrZXJBZ2VudClcbiAgICBzZXRDdXJyZW50T3B0aW9uKG9wdGlvbnMuaG9tZSlcbiAgICBpZiAocmVzZXRTZWxlY3RlZENoYXRSZWYuY3VycmVudCkge1xuICAgICAgcmVzZXRTZWxlY3RlZENoYXRSZWYuY3VycmVudCgpXG4gICAgfVxuICAgIHBhdGNoTWFpYVBhbmVsU2Vzc2lvbih1c2VyLmlkLCB7XG4gICAgICBhZ2VudHNOYXZBY3RpdmU6ICdtYWlha2VyJyxcbiAgICAgIGN1cnJlbnRPcHRpb246IG9wdGlvbnMuaG9tZSxcbiAgICAgIGFnZW50SWQ6IG1haWFrZXJBZ2VudC5pZCxcbiAgICAgIGFjdGl2ZUNoYXRJZDogbnVsbCxcbiAgICB9KVxuICB9LCBbYWdlbnRzLmRhdGEsIGkxOG4ubGFuZ3VhZ2UsIHNlbGVjdEFnZW50LCBzZXRDbGllbnQsIHNldFByb2plY3QsIHNldFRhc2ssIHVzZXIuaWRdKVxuXG4gIGNvbnN0IGxvYWRBZ2VudHNGb3JTZXNzaW9uUmVzdG9yZSA9IHVzZUNhbGxiYWNrKFxuICAgIGFzeW5jIChzbmFwc2hvdDogTWFpYVBhbmVsU2Vzc2lvblNuYXBzaG90KTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICBpZiAoc25hcHNob3QuYWdlbnRzTmF2QWN0aXZlID09PSAnbXlBZ2VudHMnIHx8IHNuYXBzaG90LmFnZW50c05hdkFjdGl2ZSA9PT0gJ215U2tpbGxzJykge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgbGV0IGFnZW50VG9TZWxlY3Q6IEFnZW50IHwgdW5kZWZpbmVkXG4gICAgICBpZiAoc25hcHNob3QuYWdlbnRJZCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGFnZW50VG9TZWxlY3QgPSBhd2FpdCBmZXRjaEFnZW50RGV0YWlsKHNuYXBzaG90LmFnZW50SWQpXG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIGFnZW50VG9TZWxlY3QgPSB1bmRlZmluZWRcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoIWFnZW50c0ZldGNoZWRSZWYuY3VycmVudCkge1xuICAgICAgICBhZ2VudHNGZXRjaGVkUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgICAgIGF3YWl0IGhhbmRsZUdldEFnZW50cyhhZ2VudFRvU2VsZWN0KVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgaWYgKGFnZW50VG9TZWxlY3QpIHtcbiAgICAgICAgc2VsZWN0QWdlbnQoYWdlbnRUb1NlbGVjdClcbiAgICAgIH1cbiAgICB9LFxuICAgIFtoYW5kbGVHZXRBZ2VudHMsIHNlbGVjdEFnZW50XVxuICApXG5cbiAgY29uc3QgYXBwbHlTZXNzaW9uUmVzdG9yZSA9IHVzZUNhbGxiYWNrKFxuICAgIGFzeW5jIChzbmFwc2hvdDogTWFpYVBhbmVsU2Vzc2lvblNuYXBzaG90KSA9PiB7XG4gICAgICBzZXRJc01pbmltaXplZChmYWxzZSlcbiAgICAgIHNldENoYXRWaWV3VmlzaWJsZSh0cnVlKVxuXG4gICAgICBpZiAoc25hcHNob3QuaG9zdENvbnRleHQ/LmNoaXBzUHJvamVjdCkge1xuICAgICAgICBzZXRDaGlwc1Byb2plY3Qoc25hcHNob3QuaG9zdENvbnRleHQuY2hpcHNQcm9qZWN0KVxuICAgICAgfVxuXG4gICAgICBpZiAoc25hcHNob3QuYWdlbnRzTmF2QWN0aXZlID09PSAnbXlBZ2VudHMnKSB7XG4gICAgICAgIGhhbmRsZU9wZW5NYXJrZXRwbGFjZSgpXG4gICAgICAgIGZvY3VzQ2hhdElucHV0KClcbiAgICAgICAgc3luY1BhbmVsU2Vzc2lvbigpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBpZiAoc25hcHNob3QuYWdlbnRzTmF2QWN0aXZlID09PSAnbXlTa2lsbHMnKSB7XG4gICAgICAgIGhhbmRsZU9wZW5Ta2lsbHMoKVxuICAgICAgICBmb2N1c0NoYXRJbnB1dCgpXG4gICAgICAgIHN5bmNQYW5lbFNlc3Npb24oKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgaWYgKHNuYXBzaG90LmFnZW50c05hdkFjdGl2ZSA9PT0gJ21haWFrZXInKSB7XG4gICAgICAgIGF3YWl0IGhhbmRsZUdvVG9NYWlha2VyKClcbiAgICAgICAgZm9jdXNDaGF0SW5wdXQoKVxuICAgICAgICBzeW5jUGFuZWxTZXNzaW9uKClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmIChzbmFwc2hvdC5jdXJyZW50T3B0aW9uID09PSBvcHRpb25zLmNoYXQgJiYgc25hcHNob3QuYWN0aXZlQ2hhdElkKSB7XG4gICAgICAgIHNldFVzZXJJbml0aWFsTWVzc2FnZSh7IG1lc3NhZ2U6ICcnLCBhdHRhY2htZW50czogW10gfSlcbiAgICAgICAgc2V0SW5pdGlhbENoYXRJZChzbmFwc2hvdC5hY3RpdmVDaGF0SWQpXG4gICAgICAgIGdldENoYXRzU3RvcmVTdGF0ZSgpLnNldEFjdGl2ZUNoYXRJZChzbmFwc2hvdC5hY3RpdmVDaGF0SWQpXG4gICAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdjaGF0LXNlc3Npb24tY2hhbmdlZCcpKVxuICAgICAgICBoYW5kbGVycy5jaGF0KClcbiAgICAgIH0gZWxzZSBpZiAoc25hcHNob3QuY3VycmVudE9wdGlvbiAmJiBpc1ZhbGlkTWFpYVBhbmVsT3B0aW9uKHNuYXBzaG90LmN1cnJlbnRPcHRpb24pKSB7XG4gICAgICAgIHNldEN1cnJlbnRPcHRpb24oc25hcHNob3QuY3VycmVudE9wdGlvbiBhcyBvcHRpb25zKVxuICAgICAgfVxuXG4gICAgICBmb2N1c0NoYXRJbnB1dCgpXG4gICAgICBzeW5jUGFuZWxTZXNzaW9uKClcbiAgICB9LFxuICAgIFtcbiAgICAgIGZvY3VzQ2hhdElucHV0LFxuICAgICAgaGFuZGxlR29Ub01haWFrZXIsXG4gICAgICBoYW5kbGVPcGVuTWFya2V0cGxhY2UsXG4gICAgICBoYW5kbGVPcGVuU2tpbGxzLFxuICAgICAgaGFuZGxlcnMsXG4gICAgICBzZXRDaGF0Vmlld1Zpc2libGUsXG4gICAgICBzZXRDaGlwc1Byb2plY3QsXG4gICAgICBzeW5jUGFuZWxTZXNzaW9uLFxuICAgIF1cbiAgKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3Qgc25hcHNob3QgPSBwZW5kaW5nU2Vzc2lvblJlc3RvcmVSZWYuY3VycmVudFxuICAgIGlmICghc25hcHNob3QgfHwgc2Vzc2lvblJlc3RvcmVTdGFydGVkUmVmLmN1cnJlbnQpIHJldHVyblxuICAgIHNlc3Npb25SZXN0b3JlU3RhcnRlZFJlZi5jdXJyZW50ID0gdHJ1ZVxuXG4gICAgc2V0Q2hhdFZpZXdWaXNpYmxlKHRydWUpXG5cbiAgICBjb25zdCBydW5SZXN0b3JlID0gYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgbG9hZEFnZW50c0ZvclNlc3Npb25SZXN0b3JlKHNuYXBzaG90KVxuICAgICAgcGVuZGluZ1Nlc3Npb25SZXN0b3JlUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICBhd2FpdCBhcHBseVNlc3Npb25SZXN0b3JlKHNuYXBzaG90KVxuICAgIH1cblxuICAgIHJ1blJlc3RvcmUoKS5jYXRjaCgoKSA9PiB1bmRlZmluZWQpXG4gIH0sIFthcHBseVNlc3Npb25SZXN0b3JlLCBsb2FkQWdlbnRzRm9yU2Vzc2lvblJlc3RvcmUsIHNldENoYXRWaWV3VmlzaWJsZV0pXG5cbiAgY29uc3QgaGFuZGxlRGVsZXRlQWdlbnRGcm9tTXlBZ2VudHMgPSB1c2VDYWxsYmFjayhcbiAgICAoYWdlbnRJZDogc3RyaW5nKSA9PiB7XG4gICAgICByZW1vdmVBZ2VudChhZ2VudElkKVxuICAgICAgaWYgKGFnZW50Py5pZCA9PT0gYWdlbnRJZCkge1xuICAgICAgICBzZWxlY3RGaXJzdEFnZW50KGFnZW50SWQpXG4gICAgICB9XG4gICAgfSxcbiAgICBbYWdlbnQ/LmlkLCByZW1vdmVBZ2VudCwgc2VsZWN0Rmlyc3RBZ2VudF1cbiAgKVxuXG4gIC8vIEVsIGZvb3RlciAoaW5wdXQpIHNlIG9jdWx0YSBzb2xvIGVuIGVsIGhvbWUgbWFya2V0cGxhY2UgZGUgTWFpYWtlciAoYnJvd3NlIGRlIGFnZW50ZXMpLlxuICAvLyBFbCBob21lIGRlbCBvcmNoZXN0cmF0b3Igc8OtIHBlcm1pdGUgZXNjcmliaXIsIGFzw60gcXVlIG1hbnRpZW5lIGVsIGZvb3Rlci5cbiAgY29uc3QgaXNNYWlha2VyQ3JlYXRvckhvbWUgPSBjb21wdXRlZEN1cnJlbnRPcHRpb24gPT09IG9wdGlvbnMuaG9tZSAmJiBpc01haWFrZXJBZ2VudFNlbGVjdGVkXG5cbiAgY29uc3QgbW9kYWxQYW5lbCA9IChcbiAgICA8PlxuICAgICAge3ZhbGlkYXRlQWNjZXNzQnlGZWF0dXJlKHNlY3Rpb24sIHVzZXIpICYmICFpc0Zsb2F0aW5nID8gKFxuICAgICAgICA8U2lkZWJhclxuICAgICAgICAgIG9uR29Ub0NoYXQ9e2dvVG9DaGF0fVxuICAgICAgICAgIG9uRXJyb3I9eygpID0+IHNldFNpZGViYXJIYXNFcnJvcih0cnVlKX1cbiAgICAgICAgICBoYW5kbGVHb1RvSG9tZT17aGFuZGxlR29Ib21lfVxuICAgICAgICAgIGhhbmRsZVN0YXJ0TmV3Q2hhdD17aGFuZGxlU3RhcnROZXdDaGF0fVxuICAgICAgICAgIGhhbmRsZU9wZW5NYXJrZXRwbGFjZT17aGFuZGxlT3Blbk1hcmtldHBsYWNlfVxuICAgICAgICAgIHNob3dOZXdDaGF0PXtzaG93TmV3Q2hhdH1cbiAgICAgICAgICByZWZldGNoQ2hhdHM9e3JlZmV0Y2hDaGF0c31cbiAgICAgICAgICBoYW5kbGVTZXRSZWZldGNoQ2hhdHM9e3NldFJlZmV0Y2hDaGF0c31cbiAgICAgICAgICBoYXNFcnJvcj17c2lkZWJhckhhc0Vycm9yfVxuICAgICAgICAgIHJlc2V0U2VsZWN0ZWRDaGF0UmVmPXtyZXNldFNlbGVjdGVkQ2hhdFJlZn1cbiAgICAgICAgICBhZ2VudHNOYXZBY3RpdmU9e3NpZGViYXJBZ2VudHNOYXZBY3RpdmV9XG4gICAgICAgICAgaGFuZGxlT3BlblNraWxscz17aGFuZGxlT3BlblNraWxsc31cbiAgICAgICAgICBvbk9wZW5NYWlha2VyQ3JlYXRvcj17aGFuZGxlR29Ub01haWFrZXJ9XG4gICAgICAgICAgaXNMZWdhY3lDb250ZXh0U2Vzc2lvbj17ISFsZWdhY3lDb250ZXh0U2Vzc2lvbn1cbiAgICAgICAgICBpbml0aWFsT3Blbj17c2F2ZWRTZXNzaW9uT25Nb3VudFJlZi5jdXJyZW50Py5zaWRlYmFyT3BlbiA/PyBmYWxzZX1cbiAgICAgICAgICBvbk9wZW5DaGFuZ2U9e2hhbmRsZVNpZGViYXJPcGVuQ2hhbmdlfVxuICAgICAgICAvPlxuICAgICAgKSA6IG51bGx9XG4gICAgICA8U0NDQUlNQ29udGVudCBleHBhbmRlZD17ZXhwYW5kZWR9IGZsb2F0aW5nPXtpc0Zsb2F0aW5nfT5cbiAgICAgICAgPENoYXRBSU1vZGFsSGVhZGVyXG4gICAgICAgICAgbGF5b3V0TW9kZT17bGF5b3V0TW9kZX1cbiAgICAgICAgICBvbkxheW91dE1vZGVDaGFuZ2U9e2hhbmRsZUxheW91dE1vZGVDaGFuZ2V9XG4gICAgICAgICAgZXhwYW5kZWQ9e2V4cGFuZGVkfVxuICAgICAgICAgIGRyYWdnYWJsZT17aXNGbG9hdGluZ31cbiAgICAgICAgICBvbkRyYWdTdGFydD17aGFuZGxlRHJhZ1N0YXJ0fVxuICAgICAgICAgIG9uRHJhZ01vdmU9e2hhbmRsZURyYWdNb3ZlfVxuICAgICAgICAgIG9uRHJhZ0VuZD17aGFuZGxlRHJhZ0VuZH1cbiAgICAgICAgICBoYW5kbGVNaW5pbWl6ZT17aGFuZGxlTWluaW1pemV9XG4gICAgICAgICAgYWdlbnRzPXthZ2VudHMuZGF0YX1cbiAgICAgICAgICBoYXNFcnJvcj17ISFhZ2VudEVycm9yfVxuICAgICAgICAgIGxvYWRpbmc9e2xvYWRpbmd9XG4gICAgICAgICAgbG9hZGluZ01vcmU9e2xvYWRpbmdNb3JlfVxuICAgICAgICAgIGhhc01vcmU9e2FnZW50cy5oYXNfbW9yZX1cbiAgICAgICAgICBoYW5kbGVSZXNldENoYXQ9e2hhbmRsZVJlc2V0Q2hhdH1cbiAgICAgICAgICBvbkFnZW50VXBkYXRlPXt1cGRhdGVBZ2VudEZhdm9yaXRlfVxuICAgICAgICAgIGxvYWRNb3JlQWdlbnRzPXtsb2FkTW9yZUFnZW50c31cbiAgICAgICAgICBzb3J0QWdlbnRzTGlzdD17c29ydEFnZW50c0xpc3R9XG4gICAgICAgICAgaXNNeUFnZW50c1NlY3Rpb249e2lzTXlBZ2VudHNTZWN0aW9ufVxuICAgICAgICAgIGlzTWFpYWtlclNlY3Rpb249e2lzTWFpYWtlckNyZWF0b3JIb21lfVxuICAgICAgICAgIGhpZGVBZ2VudFNlbGVjdG9yPXtoaWRlSGVhZGVyQWdlbnRTZWxlY3Rvcn1cbiAgICAgICAgICBzaG93QmFja0J1dHRvbj17c2hvd0JhY2tCdXR0b259XG4gICAgICAgICAgb25CYWNrPXtoYW5kbGVCYWNrfVxuICAgICAgICAvPlxuICAgICAgICB7aGFzRXJyb3IgPyAoXG4gICAgICAgICAgPE1BSUFFcnJvciAvPlxuICAgICAgICApIDogdmFsaWRhdGVBY2Nlc3NCeUZlYXR1cmUoc2VjdGlvbiwgdXNlcikgPyAoXG4gICAgICAgICAgPENoYXRBSUNvbnRlbnRcbiAgICAgICAgICAgIGN1cnJlbnRPcHRpb249e2NvbXB1dGVkQ3VycmVudE9wdGlvbn1cbiAgICAgICAgICAgIGhhbmRsZXJzPXt7IC4uLmhhbmRsZXJzLCBjaGF0OiBzdGFydENoYXQsIGhvbWU6IGhhbmRsZXJzLmhvbWUsIGhhbmRsZUdvSG9tZSB9fVxuICAgICAgICAgICAgb25FcnJvcj17KCkgPT4gc2V0SGFzRXJyb3IodHJ1ZSl9XG4gICAgICAgICAgICByZWZzPXt7IHVzZXJJbml0aWFsTWVzc2FnZSwgaW5pdGlhbENoYXRJZCB9fVxuICAgICAgICAgICAgb25TZW5kTWVzc2FnZVJlYWR5PXtoYW5kbGVTZW5kTWVzc2FnZVJlYWR5fVxuICAgICAgICAgICAgZXhwYW5kZWQ9e2V4cGFuZGVkfVxuICAgICAgICAgICAgZmxvYXRpbmc9e2lzRmxvYXRpbmd9XG4gICAgICAgICAgICBhZ2VudHM9e2FnZW50cy5kYXRhfVxuICAgICAgICAgICAgbG9hZGluZ0FnZW50cz17bG9hZGluZ31cbiAgICAgICAgICAgIG9uRGVsZXRlQWdlbnQ9e2hhbmRsZURlbGV0ZUFnZW50RnJvbU15QWdlbnRzfVxuICAgICAgICAgICAgb25GYXZvcml0ZUFnZW50VXBkYXRlPXt1cGRhdGVBZ2VudEZhdm9yaXRlfVxuICAgICAgICAgICAgaGFzTW9yZUFnZW50cz17ISFhZ2VudHMuaGFzX21vcmV9XG4gICAgICAgICAgICBsb2FkaW5nTW9yZUFnZW50cz17bG9hZGluZ01vcmV9XG4gICAgICAgICAgICBvbkxvYWRNb3JlQWdlbnRzPXtsb2FkTW9yZUFnZW50c31cbiAgICAgICAgICAgIG9uR29Ub01haWFrZXI9e2hhbmRsZUdvVG9NYWlha2VyfVxuICAgICAgICAgICAgc2tpbGxzPXtza2lsbHN9XG4gICAgICAgICAgICBsb2FkaW5nU2tpbGxzPXtsb2FkaW5nU2tpbGxzfVxuICAgICAgICAgICAgb25EZWxldGVTa2lsbD17cmVtb3ZlU2tpbGx9XG4gICAgICAgICAgICBvblNlYXJjaEFnZW50cz17c2VhcmNoQ3VzdG9tQWdlbnRzfVxuICAgICAgICAgICAgc2VhcmNoTG9hZGluZ0FnZW50cz17c2VhcmNoTG9hZGluZ31cbiAgICAgICAgICAgIGFnZW50RXJyb3I9e2FnZW50RXJyb3J9XG4gICAgICAgICAgLz5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8UHJvamVjdFN1bW1hcnlDb250ZW50IG9uUmVzdGFydFN1bW1hcnk9e2hhbmRsZXJzLmhvbWV9IC8+XG4gICAgICAgICl9XG4gICAgICAgIHsoKGNvbXB1dGVkQ3VycmVudE9wdGlvbiA9PT0gb3B0aW9ucy5ob21lICYmICEhYWdlbnRzPy5kYXRhPy5sZW5ndGgpIHx8XG4gICAgICAgICAgY29tcHV0ZWRDdXJyZW50T3B0aW9uID09PSBvcHRpb25zLmNoYXQpICYmXG4gICAgICAgICAgIWlzTWFpYWtlckNyZWF0b3JIb21lICYmXG4gICAgICAgICAgIWhhc0Vycm9yICYmXG4gICAgICAgICAgIWxvYWRpbmcgJiZcbiAgICAgICAgICB2YWxpZGF0ZUFjY2Vzc0J5RmVhdHVyZShzZWN0aW9uLCB1c2VyKSAmJiAoXG4gICAgICAgICAgICA8Q2hhdEFpTW9kYWxGb290ZXJcbiAgICAgICAgICAgICAgYWdlbnQ9e2FnZW50fVxuICAgICAgICAgICAgICBoYW5kbGVTZW5kTWVzc2FnZT17aGFuZGxlU2VuZE1lc3NhZ2V9XG4gICAgICAgICAgICAgIGhhbmRsZVN0b3BHZW5lcmF0aW9uPXtzdG9wR2VuZXJhdGlvbkZ1bmN0aW9ufVxuICAgICAgICAgICAgICBpc1N0cmVhbWluZz17aXNTdHJlYW1pbmd9XG4gICAgICAgICAgICAgIGlzV3JpdGluZz17aXNXcml0aW5nfVxuICAgICAgICAgICAgICBjaGF0SWQ9e2luaXRpYWxDaGF0SWR9XG4gICAgICAgICAgICAgIG5ld0NoYXRLZXk9e25ld0NoYXRLZXl9XG4gICAgICAgICAgICAgIHRvb2x0aXBaSW5kZXg9e3Rvb2x0aXBaSW5kZXh9XG4gICAgICAgICAgICAgIGxlZ2FjeUNvbnRleHRTZXNzaW9uPXtsZWdhY3lDb250ZXh0U2Vzc2lvbn1cbiAgICAgICAgICAgICAgb25Db250aW51ZUluTmV3Q2hhdD17aGFuZGxlQ29udGludWVMZWdhY3lDb250ZXh0SW5OZXdDaGF0fVxuICAgICAgICAgICAgICBsYXlvdXRNb2RlPXtsYXlvdXRNb2RlfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgPC9TQ0NBSU1Db250ZW50PlxuICAgIDwvPlxuICApXG5cbiAgY29uc3QgY29udGVudFdyYXBwZXIgPSAoXG4gICAgPFNDQ0FJTUNvbnRlbnRXcmFwcGVyIGV4cGFuZGVkPXtleHBhbmRlZH0gZmxvYXRpbmc9e2lzRmxvYXRpbmd9IHJlZj17Y29udGVudFdyYXBwZXJSZWZ9PlxuICAgICAge21vZGFsUGFuZWx9XG4gICAgPC9TQ0NBSU1Db250ZW50V3JhcHBlcj5cbiAgKVxuXG4gIHJldHVybiAoXG4gICAgc2VsZWN0b3IgJiZcbiAgICBSZWFjdERPTS5jcmVhdGVQb3J0YWwoXG4gICAgICA8U0NDQUlNV3JhcHBlclxuICAgICAgICBleHBhbmRlZD17ZXhwYW5kZWR9XG4gICAgICAgIGxheW91dE1vZGU9e2xheW91dE1vZGV9XG4gICAgICAgIGRyYWdQb3NpdGlvbj17cmVzb2x2ZWREcmFnUG9zaXRpb259XG4gICAgICAgIGVsZXZhdGVkPXtzZWN0aW9uID09PSAndGFzayd9XG4gICAgICAgICRtaW5pbWl6ZWQ9e2lzTWluaW1pemVkfVxuICAgICAgPlxuICAgICAgICA8U0NDQUlNTWluaW1pemVkSGlkZSAkaGlkZGVuPXtpc01pbmltaXplZH0+XG4gICAgICAgICAgPEZsb2F0aW5nUGFuZWxNb3Rpb24gdGlsdD17dGlsdE1vdGlvbn0gZXhwYW5kZWQ9e2V4cGFuZGVkfT5cbiAgICAgICAgICAgIHtjb250ZW50V3JhcHBlcn1cbiAgICAgICAgICA8L0Zsb2F0aW5nUGFuZWxNb3Rpb24+XG4gICAgICAgIDwvU0NDQUlNTWluaW1pemVkSGlkZT5cbiAgICAgICAge2lzTWluaW1pemVkICYmIChcbiAgICAgICAgICA8TWFpYU1pbmltaXplZFBpbGxcbiAgICAgICAgICAgIHVucmVhZENvdW50PXt1bnJlYWRDb3VudH1cbiAgICAgICAgICAgIGlzU3RyZWFtaW5nPXtoYXNBY3RpdmVTdHJlYW19XG4gICAgICAgICAgICBvblJlc3RvcmU9e2hhbmRsZVJlc3RvcmVGcm9tTWluaW1pemVkfVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICAgIHt1c2VySGFzUGVybWlzc2lvbnMgJiYgKFxuICAgICAgICAgIDxBYm1BZ2VudE1vZGFsXG4gICAgICAgICAgICBhZGRBZ2VudD17YWRkQWdlbnR9XG4gICAgICAgICAgICB1cGRhdGVBZ2VudD17dXBkYXRlQWdlbnR9XG4gICAgICAgICAgICByZW1vdmVBZ2VudD17cmVtb3ZlQWdlbnR9XG4gICAgICAgICAgICB1cGRhdGVBZ2VudEZhdm9yaXRlPXt1cGRhdGVBZ2VudEZhdm9yaXRlfVxuICAgICAgICAgICAgc2VsZWN0Rmlyc3RBZ2VudD17c2VsZWN0Rmlyc3RBZ2VudH1cbiAgICAgICAgICAvPlxuICAgICAgICApfVxuICAgICAgICB7dXNlckhhc1Blcm1pc3Npb25zICYmIChcbiAgICAgICAgICA8QWJtU2tpbGxNb2RhbCBhZGRTa2lsbD17YWRkU2tpbGx9IHVwZGF0ZVNraWxsSW5MaXN0PXt1cGRhdGVTa2lsbEluTGlzdH0gcmVtb3ZlU2tpbGw9e3JlbW92ZVNraWxsfSAvPlxuICAgICAgICApfVxuICAgICAgICB7dXNlckhhc1Blcm1pc3Npb25zICYmIDxBYm1Ta2lsbEdlbmVyYXRlTW9kYWwgLz59XG4gICAgICAgIDxTbmFja2JhciAvPlxuICAgICAgPC9TQ0NBSU1XcmFwcGVyPixcbiAgICAgIHNlbGVjdG9yXG4gICAgKVxuICApXG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FDRUEsV0FBVyxFQUNYQyxPQUFPLEVBQ1BDLFFBQVEsRUFDUkMsTUFBTSxFQUNOQyxTQUFTLEVBQ1RDLGVBQWUsUUFFVixPQUFPO0FBQ2QsT0FBT0MsUUFBUSxNQUFNLFdBQVc7QUFDaEMsT0FBT0MsTUFBTSxNQUFNLFFBQVE7QUFDM0IsU0FBU0MsY0FBYyxRQUFRLGVBQWU7QUFDOUMsU0FBU0MsT0FBTyxRQUFRLDJCQUEyQjtBQUNuRCxTQUFTQyxpQkFBaUIsUUFBUSxnQ0FBZ0M7QUFDbEUsU0FBU0MsU0FBUyxRQUFRLHVCQUF1QjtBQUNqRCxTQUFTQyxzQkFBc0IsUUFBUSx1Q0FBdUM7QUFFOUUsU0FBU0MsYUFBYSxRQUFRLGtCQUFrQjtBQUNoRCxTQUFTQyxhQUFhLEVBQUVDLE9BQU8sUUFBUSxhQUFhO0FBQ3BELFNBQVNDLE9BQU8sUUFBUSxZQUFZO0FBQ3BDLFNBQVNDLFlBQVksUUFBUSx5Q0FBeUM7QUFDdEUsU0FBU0MsWUFBWSxRQUFRLHlDQUF5QztBQUN0RSxTQUFTQyxnQkFBZ0IsUUFBc0IsaUNBQWlDO0FBR2hGLFNBQVNDLGlCQUFpQixRQUFRLGtEQUFrRDtBQUNwRixTQUFTQyxRQUFRLFFBQVEsbUNBQW1DO0FBQzVELFNBQVNDLHFCQUFxQixRQUFRLDBCQUEwQjtBQUNoRSxTQUFTQyxhQUFhLFFBQVEsNkNBQTZDO0FBQzNFLFNBQVNDLGFBQWEsUUFBUSw2Q0FBNkM7QUFDM0UsU0FBU0MscUJBQXFCLFFBQVEsNkRBQTZEO0FBQ25HLFNBQVNDLFFBQVEsUUFBUSwyQkFBMkI7QUFDcEQsU0FBU0MsYUFBYSxFQUFFQyxvQkFBb0IsRUFBRUMsbUJBQW1CLEVBQUVDLGFBQWEsUUFBUSxzQkFBc0I7QUFDOUcsU0FBU0MsaUJBQWlCLFFBQVEsZ0NBQWdDO0FBQ2xFLFNBQ0VDLDJCQUEyQixFQUUzQkMsZ0NBQWdDLEVBQ2hDQywyQkFBMkIsUUFDdEIsVUFBVTtBQUNqQixTQUFTQyxtQkFBbUIsRUFBRUMsd0JBQXdCLFFBQVEsdUJBQXVCO0FBQ3JGLFNBQVNDLGlCQUFpQixRQUFRLGdDQUFnQztBQUNsRSxTQUFTQyxjQUFjLFFBQVEsd0NBQXdDO0FBQ3ZFLFNBQVNDLDZCQUE2QixRQUFRLGlDQUFpQztBQUsvRSxTQUFTQyxZQUFZLFFBQVEsNkJBQTZCO0FBQzFELFNBQVNDLGtCQUFrQixFQUFFQyxhQUFhLFFBQVEsOEJBQThCO0FBRWhGLFNBQVNDLG9CQUFvQixFQUFFQyxxQkFBcUIsUUFBUSx3Q0FBd0M7QUFDcEcsU0FDRUMscUJBQXFCLEVBQ3JCQyxzQkFBc0IsRUFDdEJDLHFCQUFxQixFQUNyQkMsb0JBQW9CLEVBRXBCQyxxQkFBcUIsUUFDaEIsNENBQTRDO0FBQ25ELFNBQVNDLGdCQUFnQixRQUFRLDBDQUEwQztBQUMzRSxTQUFTQyxxQkFBcUIsUUFBUSx3Q0FBd0M7QUFDOUUsU0FBU0MsU0FBUyxRQUFRLCtCQUErQjtBQUN6RCxTQUFTQyxnQkFBZ0IsUUFBUSxnREFBZ0Q7QUFDakYsU0FBU0MsVUFBVSxRQUFRLHFCQUFxQjtBQUNoRCxTQUFTQyxNQUFNLEVBQUVDLFFBQVEsUUFBUSx5QkFBeUI7QUFDMUQsU0FBU0MseUJBQXlCLFFBQWlDLDZCQUE2Qjs7QUFFaEc7QUFBQSxTQUFBQyxHQUFBLElBQUFDLElBQUEsRUFBQUMsSUFBQSxJQUFBQyxLQUFBLEVBQUFDLFFBQUEsSUFBQUMsU0FBQTtBQWFBLElBQU1DLHVCQUF1QixHQUFHLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQVU7QUFLdEU7QUFDQSxJQUFNQyxtQkFBbUIsR0FBRyxTQUF0QkEsbUJBQW1CQSxDQUFJQyxPQUFnQjtFQUFBLE9BQWNBLE9BQU8sS0FBSyxRQUFRO0FBQUE7QUFFL0UsSUFBTUMsNEJBQTRCLEdBQUcsU0FBL0JBLDRCQUE0QkEsQ0FDaENELE9BQWdCLEVBQ2hCRSxTQUFvQyxFQUNwQ0MsYUFBcUIsRUFDckJDLFVBQWtCLEVBQ1E7RUFDMUIsSUFBSUwsbUJBQW1CLENBQUNDLE9BQU8sQ0FBQyxJQUFJRSxTQUFTLEtBQUssY0FBYyxJQUFJQyxhQUFhLEtBQUtDLFVBQVUsRUFBRTtJQUNoRyxPQUFPLHFCQUFxQjtFQUM5QjtFQUNBLElBQUlKLE9BQU8sS0FBSyxNQUFNLEVBQUUsT0FBTyxXQUFXO0VBQzFDLElBQUlBLE9BQU8sS0FBSyxTQUFTLEVBQUUsT0FBTyxjQUFjO0VBQ2hELElBQUlBLE9BQU8sS0FBSyxTQUFTLEVBQUUsT0FBTyxjQUFjO0VBQ2hELElBQUlBLE9BQU8sS0FBSyxRQUFRLEVBQUUsT0FBTyxhQUFhO0VBQzlDLE9BQU8scUJBQXFCO0FBQzlCLENBQUM7QUFFRCxPQUFPLElBQU1LLG1CQUFtQixHQUFHLCtCQUErQjtBQUVsRSxJQUFNQyx1QkFBdUIsR0FBRyxTQUExQkEsdUJBQXVCQSxDQUFJTixPQUFtQyxFQUFFTyxJQUFnQyxFQUFLO0VBQ3pHLElBQUksQ0FBQ1AsT0FBTyxJQUFJLENBQUN4RCxpQkFBaUIsQ0FBQytELElBQUksQ0FBQyxFQUFFO0lBQ3hDLE9BQU8sS0FBSztFQUNkOztFQUVBO0VBQ0EsSUFBSVAsT0FBTyxLQUFLLFNBQVMsSUFBSUEsT0FBTyxLQUFLLE1BQU0sRUFBRTtJQUMvQyxPQUFPLElBQUk7RUFDYjtFQUVBLElBQUlBLE9BQU8sS0FBSyxRQUFRLEVBQUU7SUFDeEIsT0FBT1EsT0FBTyxDQUFDQyxNQUFNLENBQUNDLDJCQUEyQixJQUFJRCxNQUFNLENBQUNFLHdDQUF3QyxDQUFDO0VBQ3ZHO0VBRUEsT0FBT0gsT0FBTyxDQUFDQyxNQUFNLENBQUNDLDJCQUEyQixDQUFDO0FBQ3BELENBQUM7QUFFRCxPQUFPLElBQU1FLFdBQVcsR0FBRyxTQUFkQSxXQUFXQSxDQUFBLEVBQVM7RUFBQSxJQUFBQyxxQkFBQSxFQUFBQyxzQkFBQSxFQUFBQyxzQkFBQSxFQUFBQyxzQkFBQSxFQUFBQyxpQkFBQSxFQUFBQyxrQkFBQSxFQUFBQyxrQkFBQSxFQUFBQyxzQkFBQSxFQUFBQyxzQkFBQSxFQUFBQyxZQUFBO0VBQy9CLElBQU1mLElBQUksR0FBR2hFLE9BQU8sQ0FBQyxDQUFDO0VBQ3RCLElBQUFnRixlQUFBLEdBQWlCakYsY0FBYyxDQUFDLENBQUNrQixRQUFRLENBQUNnRSxRQUFRLENBQUMsQ0FBQztJQUE1Q0MsSUFBSSxHQUFBRixlQUFBLENBQUpFLElBQUk7RUFDWixJQUFNQyxhQUFhLEdBQUdwQyxRQUFRLENBQUMsQ0FBQztFQUVoQyxJQUFNcUMsc0JBQXNCLEdBQUcxRixNQUFNLENBQWtDNkMsb0JBQW9CLENBQUN5QixJQUFJLENBQUNxQixFQUFFLENBQUMsQ0FBQztFQUNyRyxJQUFNQyxxQkFBcUIsSUFBQWhCLHFCQUFBLElBQUFDLHNCQUFBLEdBQUdhLHNCQUFzQixDQUFDRyxPQUFPLGNBQUFoQixzQkFBQSx1QkFBOUJBLHNCQUFBLENBQWdDaUIsVUFBVSxjQUFBbEIscUJBQUEsY0FBQUEscUJBQUEsR0FBSSxLQUFLO0VBQ2pGLElBQU1tQix3QkFBd0IsR0FBRy9GLE1BQU0sQ0FDckM0RixxQkFBcUIsR0FBR0Ysc0JBQXNCLENBQUNHLE9BQU8sR0FBRyxJQUMzRCxDQUFDO0VBQ0QsSUFBTUcsd0JBQXdCLEdBQUdoRyxNQUFNLENBQUMsS0FBSyxDQUFDO0VBQzlDLElBQU1pRyxjQUFjLEdBQUdqRyxNQUFNLEVBQUE4RSxzQkFBQSxJQUFBQyxzQkFBQSxHQUFDVyxzQkFBc0IsQ0FBQ0csT0FBTyxjQUFBZCxzQkFBQSx1QkFBOUJBLHNCQUFBLENBQWdDbUIsV0FBVyxjQUFBcEIsc0JBQUEsY0FBQUEsc0JBQUEsR0FBSSxLQUFLLENBQUM7O0VBRW5GO0VBQ0EsSUFBQXFCLFNBQUEsR0FBc0NwRyxRQUFRLENBQUM7TUFBQSxPQUFNLENBQUM2RixxQkFBcUI7SUFBQSxFQUFDO0lBQUFRLFVBQUEsR0FBQUMsY0FBQSxDQUFBRixTQUFBO0lBQXJFRyxXQUFXLEdBQUFGLFVBQUE7SUFBRUcsY0FBYyxHQUFBSCxVQUFBO0VBQ2xDLElBQU1JLGtCQUFrQixHQUFHakUsYUFBYSxDQUFDLFVBQUFrRSxLQUFLO0lBQUEsT0FBSUEsS0FBSyxDQUFDRCxrQkFBa0I7RUFBQSxFQUFDO0VBQzNFLElBQU1FLFdBQVcsR0FBR25FLGFBQWEsQ0FBQyxVQUFBa0UsS0FBSztJQUFBLE9BQUlBLEtBQUssQ0FBQ0MsV0FBVztFQUFBLEVBQUM7RUFDN0QsSUFBTUMsWUFBWSxHQUFHcEUsYUFBYSxDQUFDLFVBQUFrRSxLQUFLO0lBQUEsT0FBSUEsS0FBSyxDQUFDRSxZQUFZO0VBQUEsRUFBQztFQUMvRDtFQUNBO0VBQ0EsSUFBTUMsZUFBZSxHQUFHN0QsZ0JBQWdCLENBQUMsVUFBQTBELEtBQUs7SUFBQSxPQUM1Q0ksTUFBTSxDQUFDQyxNQUFNLENBQUNMLEtBQUssQ0FBQ00sSUFBSSxDQUFDLENBQUNDLElBQUksQ0FBQyxVQUFBRCxJQUFJO01BQUEsT0FBSS9ELHFCQUFxQixDQUFDK0QsSUFBSSxDQUFDRSxNQUFNLENBQUM7SUFBQSxFQUFDO0VBQUEsQ0FDNUUsQ0FBQzs7RUFFRDtFQUNBLElBQU1DLFdBQVcsR0FBR2xILE1BQU0sQ0FBd0MsSUFBSSxDQUFDO0VBQ3ZFLElBQU1tSCxTQUFTLEdBQUduSCxNQUFNLENBQXNCLElBQUksQ0FBQzs7RUFFbkQ7RUFDQTtFQUNBQyxTQUFTLENBQUMsWUFBTTtJQUNkLElBQUksQ0FBQzhGLHdCQUF3QixDQUFDRixPQUFPLEVBQUU7TUFDckNXLGtCQUFrQixDQUFDLEtBQUssQ0FBQztJQUMzQjtFQUNGLENBQUMsRUFBRSxDQUFDQSxrQkFBa0IsQ0FBQyxDQUFDOztFQUV4QjtFQUNBO0VBQ0F2RyxTQUFTLENBQUMsWUFBTTtJQUNkLElBQUkwRyxZQUFZLEVBQUU7TUFDaEJsRSxxQkFBcUIsQ0FBQzZCLElBQUksQ0FBQ3FCLEVBQUUsRUFBRWdCLFlBQVksQ0FBQztJQUM5QztFQUNGLENBQUMsRUFBRSxDQUFDQSxZQUFZLEVBQUVyQyxJQUFJLENBQUNxQixFQUFFLENBQUMsQ0FBQztFQUUzQixJQUFNeUIsY0FBYyxHQUFHdkgsV0FBVyxDQUFDLFlBQU07SUFDdkM0RixhQUFhLENBQUNyQyxNQUFNLENBQUNpRSxjQUFjLENBQUM7SUFDcENkLGNBQWMsQ0FBQyxJQUFJLENBQUM7SUFDcEJDLGtCQUFrQixDQUFDLEtBQUssQ0FBQztJQUN6QjFELHFCQUFxQixDQUFDd0IsSUFBSSxDQUFDcUIsRUFBRSxFQUFFO01BQUVHLFVBQVUsRUFBRTtJQUFNLENBQUMsQ0FBQztFQUN2RCxDQUFDLEVBQUUsQ0FBQ0wsYUFBYSxFQUFFZSxrQkFBa0IsRUFBRWxDLElBQUksQ0FBQ3FCLEVBQUUsQ0FBQyxDQUFDO0VBRWhELElBQU0yQixjQUFjLEdBQUd6SCxXQUFXLENBQUMsWUFBTTtJQUN2QzJFLE1BQU0sQ0FBQytDLFVBQVUsQ0FBQyxZQUFNO01BQ3RCQyxRQUFRLENBQUNDLGFBQWEsQ0FBQyxJQUFJQyxXQUFXLENBQUMsb0JBQW9CLENBQUMsQ0FBQztJQUMvRCxDQUFDLEVBQUUsR0FBRyxDQUFDO0VBQ1QsQ0FBQyxFQUFFLEVBQUUsQ0FBQztFQUVOLElBQUFDLFVBQUEsR0FBb0Q1SCxRQUFRLENBU3pEO01BQ0Q2SCxPQUFPLEVBQUUsRUFBRTtNQUNYQyxXQUFXLEVBQUU7SUFDZixDQUFDLENBQUM7SUFBQUMsVUFBQSxHQUFBekIsY0FBQSxDQUFBc0IsVUFBQTtJQVpLSSxrQkFBa0IsR0FBQUQsVUFBQTtJQUFFRSxxQkFBcUIsR0FBQUYsVUFBQTtFQWFoRCxJQUFBRyxVQUFBLEdBQTBDbEksUUFBUSxDQUFnQixJQUFJLENBQUM7SUFBQW1JLFVBQUEsR0FBQTdCLGNBQUEsQ0FBQTRCLFVBQUE7SUFBaEVFLGFBQWEsR0FBQUQsVUFBQTtJQUFFRSxnQkFBZ0IsR0FBQUYsVUFBQTtFQUN0QyxJQUFBRyxVQUFBLEdBQW9DdEksUUFBUSxDQUFDLENBQUMsQ0FBQztJQUFBdUksVUFBQSxHQUFBakMsY0FBQSxDQUFBZ0MsVUFBQTtJQUF4Q0UsVUFBVSxHQUFBRCxVQUFBO0lBQUVFLGFBQWEsR0FBQUYsVUFBQTtFQUNoQyxJQUFBRyxVQUFBLEdBQXNDMUksUUFBUSxDQUFxQixJQUFJLENBQUM7SUFBQTJJLFVBQUEsR0FBQXJDLGNBQUEsQ0FBQW9DLFVBQUE7SUFBakVFLFdBQVcsR0FBQUQsVUFBQTtJQUFFRSxjQUFjLEdBQUFGLFVBQUE7RUFDbEMsSUFBQUcsVUFBQSxHQUFzRDlJLFFBQVEsQ0FXNUQsSUFBSSxDQUFDO0lBQUErSSxXQUFBLEdBQUF6QyxjQUFBLENBQUF3QyxVQUFBO0lBWEFFLG1CQUFtQixHQUFBRCxXQUFBO0lBQUVFLHNCQUFzQixHQUFBRixXQUFBO0VBWWxELElBQUFHLFdBQUEsR0FBNERsSixRQUFRLENBQXNCLElBQUksQ0FBQztJQUFBbUosV0FBQSxHQUFBN0MsY0FBQSxDQUFBNEMsV0FBQTtJQUF4RkUsc0JBQXNCLEdBQUFELFdBQUE7SUFBRUUseUJBQXlCLEdBQUFGLFdBQUE7RUFDeEQsSUFBQUcsV0FBQSxHQUFzQ3RKLFFBQVEsQ0FBQyxLQUFLLENBQUM7SUFBQXVKLFdBQUEsR0FBQWpELGNBQUEsQ0FBQWdELFdBQUE7SUFBOUNFLFdBQVcsR0FBQUQsV0FBQTtJQUFFRSxjQUFjLEdBQUFGLFdBQUE7RUFDbEMsSUFBQUcsV0FBQSxHQUFrQzFKLFFBQVEsQ0FBQyxLQUFLLENBQUM7SUFBQTJKLFdBQUEsR0FBQXJELGNBQUEsQ0FBQW9ELFdBQUE7SUFBMUNFLFNBQVMsR0FBQUQsV0FBQTtJQUFFRSxZQUFZLEdBQUFGLFdBQUE7RUFFOUIsSUFBQUcsV0FBQSxHQUF3QzlKLFFBQVEsQ0FBQyxLQUFLLENBQUM7SUFBQStKLFdBQUEsR0FBQXpELGNBQUEsQ0FBQXdELFdBQUE7SUFBaERFLFlBQVksR0FBQUQsV0FBQTtJQUFFRSxlQUFlLEdBQUFGLFdBQUE7RUFDcEMsSUFBQUcsV0FBQSxHQUEwQ2xLLFFBQVEsQ0FBVSxZQUFNO01BQ2hFLElBQU1tSyxLQUFLLEdBQUd4RSxzQkFBc0IsQ0FBQ0csT0FBTztNQUM1QyxJQUFJLENBQUFxRSxLQUFLLGFBQUxBLEtBQUssdUJBQUxBLEtBQUssQ0FBRUMsZUFBZSxNQUFLLFVBQVUsRUFBRSxPQUFPdkosT0FBTyxDQUFDd0osUUFBUTtNQUNsRSxJQUFJLENBQUFGLEtBQUssYUFBTEEsS0FBSyx1QkFBTEEsS0FBSyxDQUFFQyxlQUFlLE1BQUssVUFBVSxFQUFFLE9BQU92SixPQUFPLENBQUN5SixRQUFRO01BQ2xFLElBQU1DLFdBQVcsR0FBR0osS0FBSyxhQUFMQSxLQUFLLHVCQUFMQSxLQUFLLENBQUVoRyxhQUFhO01BQ3hDLE9BQU9vRyxXQUFXLElBQUkzSCxzQkFBc0IsQ0FBQzJILFdBQVcsQ0FBQyxHQUFJQSxXQUFXLEdBQWUxSixPQUFPLENBQUMySixJQUFJO0lBQ3JHLENBQUMsQ0FBQztJQUFBQyxXQUFBLEdBQUFuRSxjQUFBLENBQUE0RCxXQUFBO0lBTksvRixhQUFhLEdBQUFzRyxXQUFBO0lBQUVDLGdCQUFnQixHQUFBRCxXQUFBO0VBT3RDLElBQUFFLFdBQUEsR0FBZ0MzSyxRQUFRLENBQUMsS0FBSyxDQUFDO0lBQUE0SyxXQUFBLEdBQUF0RSxjQUFBLENBQUFxRSxXQUFBO0lBQXhDRSxRQUFRLEdBQUFELFdBQUE7SUFBRUUsV0FBVyxHQUFBRixXQUFBO0VBQzVCO0VBQ0E7RUFDQTtFQUNBLElBQUFHLFdBQUEsR0FBZ0UvSyxRQUFRLENBQUMsS0FBSyxDQUFDO0lBQUFnTCxXQUFBLEdBQUExRSxjQUFBLENBQUF5RSxXQUFBO0lBQXhFRSx3QkFBd0IsR0FBQUQsV0FBQTtJQUFFRSwyQkFBMkIsR0FBQUYsV0FBQTtFQUM1RCxJQUFNRyx1QkFBdUIsR0FBR2xMLE1BQU0sQ0FBQyxLQUFLLENBQUM7RUFDN0MsSUFBTW1MLFFBQVEsR0FBR3JMLE9BQU8sQ0FBQztJQUFBLE9BQU1hLGFBQWEsQ0FBQzhKLGdCQUFnQixFQUFFSSxXQUFXLENBQUM7RUFBQSxHQUFFLEVBQUUsQ0FBQztFQUNoRixJQUFBTyxXQUFBLEdBQThDckwsUUFBUSxDQUFDLEtBQUssQ0FBQztJQUFBc0wsV0FBQSxHQUFBaEYsY0FBQSxDQUFBK0UsV0FBQTtJQUF0REUsZUFBZSxHQUFBRCxXQUFBO0lBQUVFLGtCQUFrQixHQUFBRixXQUFBO0VBQzFDLElBQU1HLG9CQUFvQixHQUFHeEwsTUFBTSxDQUFzQixJQUFJLENBQUM7RUFDOUQsSUFBTXlMLElBQUksR0FBR2pHLElBQUksQ0FBQ2tHLFFBQVEsS0FBSyxJQUFJLEdBQUcsT0FBTyxHQUFHbEcsSUFBSSxDQUFDa0csUUFBUTtFQUU3RHRMLE1BQU0sQ0FBQ3VMLE1BQU0sQ0FBQ0YsSUFBSSxDQUFDO0VBRW5CLElBQUFHLGlCQUFBLEdBZ0JJNUssZ0JBQWdCLENBQUMsQ0FBQztJQWZwQjZLLFdBQVcsR0FBQUQsaUJBQUEsQ0FBWEMsV0FBVztJQUNYQyxVQUFVLEdBQUFGLGlCQUFBLENBQVZFLFVBQVU7SUFDVi9ILE9BQU8sR0FBQTZILGlCQUFBLENBQVA3SCxPQUFPO0lBQ1BnSSxLQUFLLEdBQUFILGlCQUFBLENBQUxHLEtBQUs7SUFDTEMsT0FBTyxHQUFBSixpQkFBQSxDQUFQSSxPQUFPO0lBQ1BDLE1BQU0sR0FBQUwsaUJBQUEsQ0FBTkssTUFBTTtJQUNOQyxJQUFJLEdBQUFOLGlCQUFBLENBQUpNLElBQUk7SUFDSkMsWUFBWSxHQUFBUCxpQkFBQSxDQUFaTyxZQUFZO0lBQ1pDLGVBQWUsR0FBQVIsaUJBQUEsQ0FBZlEsZUFBZTtJQUNmQyxpQkFBaUIsR0FBQVQsaUJBQUEsQ0FBakJTLGlCQUFpQjtJQUNqQkMsZUFBZSxHQUFBVixpQkFBQSxDQUFmVSxlQUFlO0lBQ2ZDLFNBQVMsR0FBQVgsaUJBQUEsQ0FBVFcsU0FBUztJQUNUQyxVQUFVLEdBQUFaLGlCQUFBLENBQVZZLFVBQVU7SUFDVkMsY0FBYyxHQUFBYixpQkFBQSxDQUFkYSxjQUFjO0lBQ2RDLE9BQU8sR0FBQWQsaUJBQUEsQ0FBUGMsT0FBTzs7RUFHVDtFQUNBLElBQU1DLGFBQWEsR0FBR2xNLHNCQUFzQixDQUFDLElBQUksRUFBRSxTQUFTLENBQUM7RUFFN0QsSUFBQW1NLGFBQUEsR0FlSTlMLFlBQVksQ0FBQztNQUFFK0ssV0FBVyxFQUFYQSxXQUFXO01BQUU5SCxPQUFPLEVBQVBBLE9BQU87TUFBRWdJLEtBQUssRUFBTEEsS0FBSztNQUFFYyxZQUFZLEVBQUUxQixRQUFRLENBQUNaO0lBQUssQ0FBQyxDQUFDO0lBZDVFdUMsTUFBTSxHQUFBRixhQUFBLENBQU5FLE1BQU07SUFDTkMsT0FBTyxHQUFBSCxhQUFBLENBQVBHLE9BQU87SUFDUEMsV0FBVyxHQUFBSixhQUFBLENBQVhJLFdBQVc7SUFDSkMsVUFBVSxHQUFBTCxhQUFBLENBQWpCTSxLQUFLO0lBQ0xDLGVBQWUsR0FBQVAsYUFBQSxDQUFmTyxlQUFlO0lBQ2ZDLGNBQWMsR0FBQVIsYUFBQSxDQUFkUSxjQUFjO0lBQ2RDLGtCQUFrQixHQUFBVCxhQUFBLENBQWxCUyxrQkFBa0I7SUFDbEJDLGFBQWEsR0FBQVYsYUFBQSxDQUFiVSxhQUFhO0lBQ2JDLFFBQVEsR0FBQVgsYUFBQSxDQUFSVyxRQUFRO0lBQ1JDLFdBQVcsR0FBQVosYUFBQSxDQUFYWSxXQUFXO0lBQ1hDLFdBQVcsR0FBQWIsYUFBQSxDQUFYYSxXQUFXO0lBQ1hDLG1CQUFtQixHQUFBZCxhQUFBLENBQW5CYyxtQkFBbUI7SUFDbkJDLGdCQUFnQixHQUFBZixhQUFBLENBQWhCZSxnQkFBZ0I7SUFDaEJDLGNBQWMsR0FBQWhCLGFBQUEsQ0FBZGdCLGNBQWM7RUFHaEIsSUFBQUMsYUFBQSxHQUFzRzlNLFlBQVksQ0FBQyxDQUFDO0lBQTVHK00sTUFBTSxHQUFBRCxhQUFBLENBQU5DLE1BQU07SUFBV0MsYUFBYSxHQUFBRixhQUFBLENBQXRCZCxPQUFPO0lBQWlCaUIsZUFBZSxHQUFBSCxhQUFBLENBQWZHLGVBQWU7SUFBRUMsUUFBUSxHQUFBSixhQUFBLENBQVJJLFFBQVE7SUFBRUMsaUJBQWlCLEdBQUFMLGFBQUEsQ0FBakJLLGlCQUFpQjtJQUFFQyxXQUFXLEdBQUFOLGFBQUEsQ0FBWE0sV0FBVztFQUVqRyxJQUFNQyxNQUFNLEdBQUdqTSxjQUFjLENBQUM0SixLQUFjLENBQUM7RUFFN0MsSUFBTXNDLGtCQUFrQixHQUN0QixDQUFDLENBQUEvSixJQUFJLGFBQUpBLElBQUksZ0JBQUFVLGlCQUFBLEdBQUpWLElBQUksQ0FBRWdLLFdBQVcsY0FBQXRKLGlCQUFBLGdCQUFBQSxpQkFBQSxHQUFqQkEsaUJBQUEsQ0FBbUJ1SixTQUFTLGNBQUF2SixpQkFBQSx1QkFBNUJBLGlCQUFBLENBQThCd0osTUFBTSxNQUNuQ2xLLElBQUksYUFBSkEsSUFBSSxnQkFBQVcsa0JBQUEsR0FBSlgsSUFBSSxDQUFFZ0ssV0FBVyxjQUFBckosa0JBQUEsZ0JBQUFBLGtCQUFBLEdBQWpCQSxrQkFBQSxDQUFtQnNKLFNBQVMsY0FBQXRKLGtCQUFBLHVCQUE1QkEsa0JBQUEsQ0FBOEJ3SixJQUFJLE1BQ2xDbkssSUFBSSxhQUFKQSxJQUFJLGdCQUFBWSxrQkFBQSxHQUFKWixJQUFJLENBQUVnSyxXQUFXLGNBQUFwSixrQkFBQSxnQkFBQUEsa0JBQUEsR0FBakJBLGtCQUFBLENBQW1CcUosU0FBUyxjQUFBckosa0JBQUEsdUJBQTVCQSxrQkFBQSxVQUFvQyxNQUN0Q1YsTUFBTSxDQUFDRSx3Q0FBd0M7RUFFakQsSUFBTWdLLHFCQUFxQixHQUFHNU8sT0FBTyxDQUFDLFlBQU07SUFDMUMsSUFBTTZPLGtCQUFrQixHQUFHUCxNQUFNLElBQUksQ0FBQXJDLEtBQUssYUFBTEEsS0FBSyx1QkFBTEEsS0FBSyxDQUFFNkMsTUFBTSxNQUFLLFFBQVE7SUFDL0QsSUFBTUMsbUJBQW1CLEdBQUdULE1BQU0sS0FBSyxDQUFBckMsS0FBSyxhQUFMQSxLQUFLLHVCQUFMQSxLQUFLLENBQUU2QyxNQUFNLE1BQUssU0FBUyxJQUFJLENBQUE3QyxLQUFLLGFBQUxBLEtBQUssdUJBQUxBLEtBQUssQ0FBRTZDLE1BQU0sS0FBSSxJQUFJLENBQUM7SUFDNUYsSUFBTUUsa0JBQWtCLEdBQUdWLE1BQU0sSUFBSSxDQUFBckMsS0FBSyxhQUFMQSxLQUFLLHVCQUFMQSxLQUFLLENBQUU2QyxNQUFNLE1BQUssUUFBUTtJQUMvRCxJQUFNRyxTQUFTLEdBQUczTSw2QkFBNkIsQ0FBQzJKLEtBQUssQ0FBQztJQUV0RCxJQUFJN0gsYUFBYSxLQUFLdEQsT0FBTyxDQUFDd0osUUFBUSxJQUFJNUYsTUFBTSxDQUFDRSx3Q0FBd0MsRUFBRTtNQUN6RixPQUFPOUQsT0FBTyxDQUFDd0osUUFBUTtJQUN6QjtJQUVBLElBQUlsRyxhQUFhLEtBQUt0RCxPQUFPLENBQUN5SixRQUFRLElBQUk3RixNQUFNLENBQUNFLHdDQUF3QyxFQUFFO01BQ3pGLE9BQU85RCxPQUFPLENBQUN5SixRQUFRO0lBQ3pCOztJQUVBO0lBQ0E7SUFDQSxJQUFJc0Usa0JBQWtCLElBQUksQ0FBQ0ksU0FBUyxJQUFJLENBQUFoRCxLQUFLLGFBQUxBLEtBQUssdUJBQUxBLEtBQUssQ0FBRWlELElBQUksTUFBSyxjQUFjLElBQUk5SyxhQUFhLEtBQUt0RCxPQUFPLENBQUMySixJQUFJLEVBQUU7TUFDeEcsT0FBTzNKLE9BQU8sQ0FBQ3FPLElBQUk7SUFDckI7SUFFQSxJQUFNQyx5QkFBeUIsR0FBR2hMLGFBQWEsS0FBS3RELE9BQU8sQ0FBQ3FPLElBQUksSUFBSUosbUJBQW1CLElBQUksQ0FBQzdDLE9BQU87SUFDbkcsSUFBTW1ELHdCQUF3QixHQUFHakwsYUFBYSxLQUFLdEQsT0FBTyxDQUFDcU8sSUFBSSxJQUFJSCxrQkFBa0IsSUFBSSxDQUFDN0MsTUFBTTtJQUVoRyxJQUFJaUQseUJBQXlCLEVBQUU7TUFDN0IsT0FBT3RPLE9BQU8sQ0FBQ3dPLGVBQWU7SUFDaEM7SUFDQSxJQUFJRCx3QkFBd0IsRUFBRTtNQUM1QixPQUFPdk8sT0FBTyxDQUFDeU8sY0FBYztJQUMvQjtJQUNBLE9BQU9uTCxhQUFhO0VBQ3RCLENBQUMsRUFBRSxDQUFDQSxhQUFhLEVBQUU4SCxPQUFPLEVBQUVDLE1BQU0sRUFBRW1DLE1BQU0sRUFBRXJDLEtBQUssYUFBTEEsS0FBSyx1QkFBTEEsS0FBSyxDQUFFNkMsTUFBTSxFQUFFN0MsS0FBSyxhQUFMQSxLQUFLLHVCQUFMQSxLQUFLLENBQUV1RCxJQUFJLEVBQUV2RCxLQUFLLGFBQUxBLEtBQUssdUJBQUxBLEtBQUssQ0FBRWlELElBQUksQ0FBQyxDQUFDO0VBRXJGLElBQU1PLHNCQUFzQixHQUFHelAsT0FBTyxDQUFDO0lBQUEsT0FBTXNDLDZCQUE2QixDQUFDMkosS0FBSyxDQUFDO0VBQUEsR0FBRSxDQUFDQSxLQUFLLENBQUMsQ0FBQztFQUUzRixJQUFNeUQsc0JBQXNCLEdBQUcxUCxPQUFPLENBQUMsWUFBa0Q7SUFDdkYsSUFBSTRPLHFCQUFxQixLQUFLOU4sT0FBTyxDQUFDeUosUUFBUSxFQUFFLE9BQU8sVUFBVTtJQUNqRSxJQUFJcUUscUJBQXFCLEtBQUs5TixPQUFPLENBQUN3SixRQUFRLEVBQUUsT0FBTyxVQUFVO0lBQ2pFLElBQUltRixzQkFBc0IsRUFBRSxPQUFPLFNBQVM7SUFDNUMsT0FBTyxJQUFJO0VBQ2IsQ0FBQyxFQUFFLENBQUNiLHFCQUFxQixFQUFFYSxzQkFBc0IsQ0FBQyxDQUFDOztFQUVuRDtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztFQUVFLElBQU1FLGdCQUFnQixHQUFHelAsTUFBTSxDQUFDLEtBQUssQ0FBQztFQUV0QyxJQUFNMFAsUUFBUSxHQUFHbEksUUFBUSxDQUFDbUksYUFBYSxLQUFBQyxNQUFBLENBQUt4TCxtQkFBbUIsQ0FBRSxDQUFDOztFQUVsRTtFQUNBO0VBQ0EsSUFBQXlMLFdBQUEsR0FBb0M5UCxRQUFRLENBQTBCO01BQUEsT0FDcEUrQixnQ0FBZ0MsQ0FBQztRQUFFaUMsT0FBTyxFQUFQQSxPQUFPO1FBQUUwSSxjQUFjLEVBQWRBO01BQWUsQ0FBQyxDQUFDO0lBQUEsQ0FDL0QsQ0FBQztJQUFBcUQsV0FBQSxHQUFBekosY0FBQSxDQUFBd0osV0FBQTtJQUZNRSxVQUFVLEdBQUFELFdBQUE7SUFBRUUsYUFBYSxHQUFBRixXQUFBO0VBSWhDLElBQU1HLHNCQUFzQixHQUFHcFEsV0FBVyxDQUFDLFVBQUNxUSxJQUE2QixFQUFLO0lBQzVFbk8sMkJBQTJCLENBQUNtTyxJQUFJLENBQUM7SUFDakNGLGFBQWEsQ0FBQ0UsSUFBSSxDQUFDO0VBQ3JCLENBQUMsRUFBRSxFQUFFLENBQUM7RUFDTixJQUFNQyxRQUFRLEdBQUdKLFVBQVUsS0FBSyxZQUFZO0VBQzVDLElBQU1LLFVBQVUsR0FBR0wsVUFBVSxLQUFLLFVBQVU7RUFDNUMsSUFBTU0saUJBQWlCLEdBQUdyUSxNQUFNLENBQWlCLElBQUksQ0FBQztFQUN0RCxJQUFBc1EsV0FBQSxHQUF3Q3ZRLFFBQVEsQ0FDOUM7TUFBQSxJQUFBd1Esc0JBQUEsRUFBQUMsc0JBQUE7TUFBQSxRQUFBRCxzQkFBQSxJQUFBQyxzQkFBQSxHQUFNOUssc0JBQXNCLENBQUNHLE9BQU8sY0FBQTJLLHNCQUFBLHVCQUE5QkEsc0JBQUEsQ0FBZ0NDLFlBQVksY0FBQUYsc0JBQUEsY0FBQUEsc0JBQUEsR0FBSSxJQUFJO0lBQUEsQ0FDNUQsQ0FBQztJQUFBRyxXQUFBLEdBQUFySyxjQUFBLENBQUFpSyxXQUFBO0lBRk1HLFlBQVksR0FBQUMsV0FBQTtJQUFFQyxlQUFlLEdBQUFELFdBQUE7RUFHcEMsSUFBQUUscUJBQUEsR0FDRTNPLHdCQUF3QixDQUFDbU8sVUFBVSxDQUFDO0lBRDlCUyxVQUFVLEdBQUFELHFCQUFBLENBQVZDLFVBQVU7SUFBRUMsb0JBQW9CLEdBQUFGLHFCQUFBLENBQXBCRSxvQkFBb0I7SUFBRUMsaUJBQWlCLEdBQUFILHFCQUFBLENBQWpCRyxpQkFBaUI7SUFBRUMsa0JBQWtCLEdBQUFKLHFCQUFBLENBQWxCSSxrQkFBa0I7RUFFL0UsSUFBTUMsWUFBWSxHQUFHalIsTUFBTSxDQUlqQixJQUFJLENBQUM7RUFFZixJQUFNa1IsaUJBQWlCLEdBQUdyUixXQUFXLENBQUMsVUFBQ3NSLENBQVMsRUFBRUMsQ0FBUyxFQUFLO0lBQzlELElBQU1DLGNBQWMsR0FBR2hCLGlCQUFpQixDQUFDeEssT0FBTztJQUNoRCxJQUFJLENBQUN3TCxjQUFjLEVBQUU7TUFDbkIsT0FBTztRQUFFRixDQUFDLEVBQURBLENBQUM7UUFBRUMsQ0FBQyxFQUFEQTtNQUFFLENBQUM7SUFDakI7SUFFQSxJQUFBRSxxQkFBQSxHQUEwQkQsY0FBYyxDQUFDRSxxQkFBcUIsQ0FBQyxDQUFDO01BQXhEQyxLQUFLLEdBQUFGLHFCQUFBLENBQUxFLEtBQUs7TUFBRUMsTUFBTSxHQUFBSCxxQkFBQSxDQUFORyxNQUFNO0lBQ3JCLElBQU1DLE1BQU0sR0FBRyxFQUFFO0lBQ2pCLElBQU1DLElBQUksR0FBR0MsSUFBSSxDQUFDQyxHQUFHLENBQUNILE1BQU0sRUFBRWxOLE1BQU0sQ0FBQ3NOLFVBQVUsR0FBR04sS0FBSyxHQUFHRSxNQUFNLENBQUM7SUFDakUsSUFBTUssSUFBSSxHQUFHSCxJQUFJLENBQUNDLEdBQUcsQ0FBQ0gsTUFBTSxFQUFFbE4sTUFBTSxDQUFDd04sV0FBVyxHQUFHUCxNQUFNLEdBQUdDLE1BQU0sQ0FBQztJQUVuRSxPQUFPO01BQ0xQLENBQUMsRUFBRVMsSUFBSSxDQUFDSyxHQUFHLENBQUNMLElBQUksQ0FBQ0MsR0FBRyxDQUFDVixDQUFDLEVBQUVPLE1BQU0sQ0FBQyxFQUFFQyxJQUFJLENBQUM7TUFDdENQLENBQUMsRUFBRVEsSUFBSSxDQUFDSyxHQUFHLENBQUNMLElBQUksQ0FBQ0MsR0FBRyxDQUFDVCxDQUFDLEVBQUVNLE1BQU0sQ0FBQyxFQUFFSyxJQUFJO0lBQ3ZDLENBQUM7RUFDSCxDQUFDLEVBQUUsRUFBRSxDQUFDO0VBRU43UixlQUFlLENBQUMsWUFBTTtJQUNwQixJQUFJNlAsVUFBVSxLQUFLLFVBQVUsRUFBRTtNQUM3QlksZUFBZSxDQUFDLElBQUksQ0FBQztNQUNyQjtJQUNGO0lBRUFBLGVBQWUsQ0FBQyxVQUFBdUIsSUFBSSxFQUFJO01BQ3RCLElBQUlBLElBQUksRUFBRTtRQUNSLE9BQU9oQixpQkFBaUIsQ0FBQ2dCLElBQUksQ0FBQ2YsQ0FBQyxFQUFFZSxJQUFJLENBQUNkLENBQUMsQ0FBQztNQUMxQztNQUNBLElBQU1lLEdBQUcsR0FBRyxFQUFFO01BQ2QsSUFBTWhCLENBQUMsR0FBRzNNLE1BQU0sQ0FBQ3NOLFVBQVUsR0FBR2pRLDJCQUEyQixDQUFDLENBQUMsR0FBR3NRLEdBQUc7TUFDakUsT0FBT2pCLGlCQUFpQixDQUFDQyxDQUFDLEVBQUVnQixHQUFHLENBQUM7SUFDbEMsQ0FBQyxDQUFDO0VBQ0osQ0FBQyxFQUFFLENBQUNwQyxVQUFVLEVBQUVtQixpQkFBaUIsQ0FBQyxDQUFDO0VBRW5DLElBQU1rQixhQUFhLEdBQUd2UyxXQUFXLENBQy9CLFVBQUN3UyxLQUF3QyxFQUFLO0lBQUEsSUFBQUMscUJBQUE7SUFDNUN0QixrQkFBa0IsQ0FBQyxDQUFDO0lBQ3BCLElBQUksRUFBQXNCLHFCQUFBLEdBQUFyQixZQUFZLENBQUNwTCxPQUFPLGNBQUF5TSxxQkFBQSx1QkFBcEJBLHFCQUFBLENBQXNCQyxTQUFTLE1BQUtGLEtBQUssQ0FBQ0UsU0FBUyxFQUFFO01BQ3ZEO0lBQ0Y7SUFFQXRCLFlBQVksQ0FBQ3BMLE9BQU8sR0FBRyxJQUFJO0lBQzNCMkIsUUFBUSxDQUFDZ0wsSUFBSSxDQUFDQyxLQUFLLENBQUNDLFVBQVUsR0FBRyxFQUFFO0lBQ25DbEwsUUFBUSxDQUFDZ0wsSUFBSSxDQUFDQyxLQUFLLENBQUNFLE1BQU0sR0FBRyxFQUFFO0lBRS9CLElBQUk1QyxVQUFVLEtBQUssVUFBVSxJQUFJTSxpQkFBaUIsQ0FBQ3hLLE9BQU8sRUFBRTtNQUMxRCxJQUFNK00sSUFBSSxHQUFHdkMsaUJBQWlCLENBQUN4SyxPQUFPLENBQUMwTCxxQkFBcUIsQ0FBQyxDQUFDO01BQzlEM08scUJBQXFCLENBQUMwQixJQUFJLENBQUNxQixFQUFFLEVBQUU7UUFBRThLLFlBQVksRUFBRTtVQUFFVSxDQUFDLEVBQUV5QixJQUFJLENBQUNDLElBQUk7VUFBRXpCLENBQUMsRUFBRXdCLElBQUksQ0FBQ0U7UUFBSTtNQUFFLENBQUMsQ0FBQztJQUNqRjtFQUNGLENBQUMsRUFDRCxDQUFDOUIsa0JBQWtCLEVBQUVqQixVQUFVLEVBQUV6TCxJQUFJLENBQUNxQixFQUFFLENBQzFDLENBQUM7RUFFRCxJQUFNb04sY0FBYyxHQUFHbFQsV0FBVyxDQUNoQyxVQUFDd1MsS0FBd0MsRUFBSztJQUM1QyxJQUFNVyxTQUFTLEdBQUcvQixZQUFZLENBQUNwTCxPQUFPO0lBQ3RDLElBQUksQ0FBQ21OLFNBQVMsSUFBSUEsU0FBUyxDQUFDVCxTQUFTLEtBQUtGLEtBQUssQ0FBQ0UsU0FBUyxFQUFFO01BQ3pEO0lBQ0Y7SUFFQXhCLGlCQUFpQixDQUFDc0IsS0FBSyxDQUFDWSxPQUFPLEVBQUVaLEtBQUssQ0FBQ2EsT0FBTyxDQUFDO0lBRS9DLElBQU1DLFlBQVksR0FBR2pDLGlCQUFpQixDQUFDbUIsS0FBSyxDQUFDWSxPQUFPLEdBQUdELFNBQVMsQ0FBQ0ksT0FBTyxFQUFFZixLQUFLLENBQUNhLE9BQU8sR0FBR0YsU0FBUyxDQUFDSyxPQUFPLENBQUM7SUFFNUcxQyxlQUFlLENBQUMsVUFBQXVCLElBQUksRUFBSTtNQUN0QixJQUFJQSxJQUFJLElBQUlBLElBQUksQ0FBQ2YsQ0FBQyxLQUFLZ0MsWUFBWSxDQUFDaEMsQ0FBQyxJQUFJZSxJQUFJLENBQUNkLENBQUMsS0FBSytCLFlBQVksQ0FBQy9CLENBQUMsRUFBRTtRQUNsRSxPQUFPYyxJQUFJO01BQ2I7TUFDQSxPQUFPaUIsWUFBWTtJQUNyQixDQUFDLENBQUM7RUFDSixDQUFDLEVBQ0QsQ0FBQ2pDLGlCQUFpQixFQUFFSCxpQkFBaUIsQ0FDdkMsQ0FBQztFQUVELElBQU11QyxvQkFBb0IsR0FBR3hULE9BQU8sQ0FBQyxZQUFNO0lBQ3pDLElBQUlpUSxVQUFVLEtBQUssVUFBVSxFQUFFO01BQzdCLE9BQU9VLFlBQVk7SUFDckI7SUFDQSxJQUFJQSxZQUFZLEVBQUU7TUFDaEIsT0FBT0EsWUFBWTtJQUNyQjtJQUNBLElBQU0wQixHQUFHLEdBQUcsRUFBRTtJQUNkLElBQU1oQixDQUFDLEdBQUcsT0FBTzNNLE1BQU0sS0FBSyxXQUFXLEdBQUdBLE1BQU0sQ0FBQ3NOLFVBQVUsR0FBR2pRLDJCQUEyQixDQUFDLENBQUMsR0FBR3NRLEdBQUcsR0FBR0EsR0FBRztJQUN2RyxPQUFPakIsaUJBQWlCLENBQUNDLENBQUMsRUFBRWdCLEdBQUcsQ0FBQztFQUNsQyxDQUFDLEVBQUUsQ0FBQ3BDLFVBQVUsRUFBRVUsWUFBWSxFQUFFUyxpQkFBaUIsQ0FBQyxDQUFDO0VBRWpELElBQU1xQyxlQUFlLEdBQUcxVCxXQUFXLENBQ2pDLFVBQUN3UyxLQUF3QyxFQUFLO0lBQzVDLElBQUksQ0FBQ2pDLFVBQVUsSUFBSWlDLEtBQUssQ0FBQ21CLE1BQU0sS0FBSyxDQUFDLEVBQUU7TUFDckM7SUFDRjtJQUVBLElBQU1DLE1BQU0sR0FBR3BCLEtBQUssQ0FBQ29CLE1BQXFCO0lBQzFDLElBQUlBLE1BQU0sQ0FBQ0MsT0FBTyxDQUFDLDRFQUE0RSxDQUFDLEVBQUU7TUFDaEc7SUFDRjtJQUVBLElBQU1yQyxjQUFjLEdBQUdoQixpQkFBaUIsQ0FBQ3hLLE9BQU87SUFDaEQsSUFBSSxDQUFDd0wsY0FBYyxFQUFFO01BQ25CO0lBQ0Y7SUFFQSxJQUFNdUIsSUFBSSxHQUFHdkIsY0FBYyxDQUFDRSxxQkFBcUIsQ0FBQyxDQUFDO0lBQ25ELElBQU1vQyxlQUFlLEdBQUdMLG9CQUFvQixhQUFwQkEsb0JBQW9CLGNBQXBCQSxvQkFBb0IsR0FBSXBDLGlCQUFpQixDQUFDMEIsSUFBSSxDQUFDQyxJQUFJLEVBQUVELElBQUksQ0FBQ0UsR0FBRyxDQUFDO0lBQ3RGLElBQU1jLGNBQWMsR0FBR3ZCLEtBQUssQ0FBQ1ksT0FBTyxHQUFHVSxlQUFlLENBQUN4QyxDQUFDO0lBQ3hELElBQU0wQyxjQUFjLEdBQUd4QixLQUFLLENBQUNhLE9BQU8sR0FBR1MsZUFBZSxDQUFDdkMsQ0FBQztJQUV4RFQsZUFBZSxDQUFDZ0QsZUFBZSxDQUFDO0lBQ2hDMUMsWUFBWSxDQUFDcEwsT0FBTyxHQUFHO01BQ3JCME0sU0FBUyxFQUFFRixLQUFLLENBQUNFLFNBQVM7TUFDMUJhLE9BQU8sRUFBRVEsY0FBYztNQUN2QlAsT0FBTyxFQUFFUTtJQUNYLENBQUM7SUFFRHhCLEtBQUssQ0FBQ3lCLGFBQWEsQ0FBQ0MsaUJBQWlCLENBQUMxQixLQUFLLENBQUNFLFNBQVMsQ0FBQztJQUN0REYsS0FBSyxDQUFDMkIsY0FBYyxDQUFDLENBQUM7SUFFdEJ4TSxRQUFRLENBQUNnTCxJQUFJLENBQUNDLEtBQUssQ0FBQ0MsVUFBVSxHQUFHLE1BQU07SUFDdkNsTCxRQUFRLENBQUNnTCxJQUFJLENBQUNDLEtBQUssQ0FBQ0UsTUFBTSxHQUFHLFVBQVU7SUFDdkNsTixhQUFhLENBQUNyQyxNQUFNLENBQUM2USxlQUFlLENBQUM7SUFDckNuRCxvQkFBb0IsQ0FBQ3VCLEtBQUssQ0FBQ1ksT0FBTyxFQUFFWixLQUFLLENBQUNhLE9BQU8sQ0FBQztFQUNwRCxDQUFDLEVBQ0QsQ0FBQ2hDLGlCQUFpQixFQUFFZCxVQUFVLEVBQUVrRCxvQkFBb0IsRUFBRXhDLG9CQUFvQixDQUM1RSxDQUFDO0VBRUQsSUFBTW9ELFNBQVMsR0FBR3JVLFdBQVcsQ0FDM0IsVUFDRStILE9BQWdCLEVBQ2hCQyxXQUE4QixFQUM5QnNNLEtBQWMsRUFDZEMsaUJBQTBCLEVBQzFCQyxRQUEyQixFQUMzQkMsS0FBYyxFQUNkQyxJQUFhLEVBQ2JDLFdBQXFDLEVBQ2xDO0lBQ0gsSUFBSWxKLGVBQWUsRUFBRTtNQUNuQkMsa0JBQWtCLENBQUMsS0FBSyxDQUFDO0lBQzNCO0lBQ0FuRCxnQkFBZ0IsQ0FBQyxJQUFJLENBQUM7SUFDdEJJLGFBQWEsQ0FBQyxVQUFBMEosSUFBSTtNQUFBLE9BQUlBLElBQUksR0FBRyxDQUFDO0lBQUEsRUFBQztJQUMvQmxLLHFCQUFxQixDQUFBeU0sYUFBQSxDQUFBQSxhQUFBLENBQUFBLGFBQUEsQ0FBQUEsYUFBQSxDQUFBQSxhQUFBLENBQUFBLGFBQUE7TUFDbkI3TSxPQUFPLEVBQUVBLE9BQU8sSUFBSSxFQUFFO01BQ3RCQyxXQUFXLEVBQUVBLFdBQVcsSUFBSTtJQUFFLEdBQzFCc00sS0FBSyxHQUFHO01BQUVBLEtBQUssRUFBTEE7SUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQ3RCQyxpQkFBaUIsR0FBRztNQUFFQSxpQkFBaUIsRUFBakJBO0lBQWtCLENBQUMsR0FBRyxDQUFDLENBQUMsR0FDOUNDLFFBQVEsSUFBSUEsUUFBUSxDQUFDSyxNQUFNLEdBQUcsQ0FBQyxHQUFHO01BQUVMLFFBQVEsRUFBUkE7SUFBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQ25EQyxLQUFLLEdBQUc7TUFBRUEsS0FBSyxFQUFMQTtJQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsR0FDdEJDLElBQUksR0FBRztNQUFFQSxJQUFJLEVBQUpBO0lBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUNwQkMsV0FBVyxHQUFHO01BQUVBLFdBQVcsRUFBWEE7SUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQ3ZDLENBQUM7SUFDRnJKLFFBQVEsQ0FBQzhELElBQUksQ0FBQyxDQUFDO0VBQ2pCLENBQUMsRUFDRCxDQUFDOUQsUUFBUSxFQUFFRyxlQUFlLENBQzVCLENBQUM7RUFFRCxJQUFNcUosb0JBQW9CLEdBQUczVSxNQUFNLENBQUMsS0FBSyxDQUFDO0VBRTFDQyxTQUFTLENBQUMsWUFBTTtJQUFBLElBQUEyVSxxQkFBQTtJQUNkLElBQU1DLFdBQVcsR0FBRzlRLE9BQU8sS0FBSyxTQUFTLEdBQUdRLE9BQU8sQ0FBQ3lILE9BQU8sYUFBUEEsT0FBTyx1QkFBUEEsT0FBTyxDQUFFckcsRUFBRSxDQUFDLEdBQUc1QixPQUFPLEtBQUssUUFBUSxHQUFHUSxPQUFPLENBQUMwSCxNQUFNLGFBQU5BLE1BQU0sdUJBQU5BLE1BQU0sQ0FBRXRHLEVBQUUsQ0FBQyxHQUFHLElBQUk7SUFFcEgsSUFBSSxFQUFDOEcsY0FBYyxhQUFkQSxjQUFjLGdCQUFBbUkscUJBQUEsR0FBZG5JLGNBQWMsQ0FBRXFJLFFBQVEsY0FBQUYscUJBQUEsZUFBeEJBLHFCQUFBLENBQTBCRyxJQUFJLENBQUMsQ0FBQyxLQUFJSixvQkFBb0IsQ0FBQzlPLE9BQU8sSUFBSWtILE9BQU8sSUFBSSxFQUFDaEIsS0FBSyxhQUFMQSxLQUFLLGVBQUxBLEtBQUssQ0FBRXBHLEVBQUUsS0FBSSxDQUFDa1AsV0FBVyxFQUFFO01BQzlHO0lBQ0Y7SUFFQUYsb0JBQW9CLENBQUM5TyxPQUFPLEdBQUcsSUFBSTtJQUNuQ3FPLFNBQVMsQ0FDUHpILGNBQWMsQ0FBQ3FJLFFBQVEsRUFDdkIsRUFBRSxFQUNGckksY0FBYyxDQUFDMEgsS0FBSyxFQUNwQmEsU0FBUyxFQUNUQSxTQUFTLEVBQ1RBLFNBQVMsRUFDVEEsU0FBUyxFQUNUdkksY0FBYyxDQUFDK0gsV0FDakIsQ0FBQztFQUNILENBQUMsRUFBRSxDQUNEL0gsY0FBYyxhQUFkQSxjQUFjLHVCQUFkQSxjQUFjLENBQUUwSCxLQUFLLEVBQ3JCMUgsY0FBYyxhQUFkQSxjQUFjLHVCQUFkQSxjQUFjLENBQUVxSSxRQUFRLEVBQ3hCckksY0FBYyxhQUFkQSxjQUFjLHVCQUFkQSxjQUFjLENBQUUrSCxXQUFXLEVBQzNCekgsT0FBTyxFQUNQaEIsS0FBSyxhQUFMQSxLQUFLLHVCQUFMQSxLQUFLLENBQUVwRyxFQUFFLEVBQ1RvRyxLQUFLLGFBQUxBLEtBQUssdUJBQUxBLEtBQUssQ0FBRTZDLE1BQU0sRUFDYjVDLE9BQU8sYUFBUEEsT0FBTyx1QkFBUEEsT0FBTyxDQUFFckcsRUFBRSxFQUNYc0csTUFBTSxhQUFOQSxNQUFNLHVCQUFOQSxNQUFNLENBQUV0RyxFQUFFLEVBQ1Y1QixPQUFPLEVBQ1BtUSxTQUFTLENBQ1YsQ0FBQztFQUVGLElBQU1lLFFBQVEsR0FBR3BWLFdBQVcsQ0FDMUIsVUFBQ29QLElBQVMsRUFBSztJQUNiakgscUJBQXFCLENBQUM7TUFBRUosT0FBTyxFQUFFLEVBQUU7TUFBRUMsV0FBVyxFQUFFO0lBQUcsQ0FBQyxDQUFDO0lBQ3ZETyxnQkFBZ0IsQ0FBQzZHLElBQUksQ0FBQ2lHLGlCQUFpQixDQUFDO0lBQ3hDLElBQU1DLGFBQWEsR0FBR3JJLE1BQU0sQ0FBQ3NJLElBQUksQ0FBQ0MsSUFBSSxDQUFDLFVBQUFDLFNBQVM7TUFBQSxPQUFJQSxTQUFTLENBQUMzUCxFQUFFLEtBQUtzSixJQUFJLENBQUNzRyxPQUFPO0lBQUEsRUFBQztJQUNsRixJQUFJSixhQUFhLEVBQUU7TUFDakJ0SixXQUFXLENBQUNzSixhQUFhLENBQUM7SUFDNUI7SUFDQTtJQUNBM04sUUFBUSxDQUFDQyxhQUFhLENBQUMsSUFBSUMsV0FBVyxDQUFDLHNCQUFzQixDQUFDLENBQUM7SUFDL0R5RCxRQUFRLENBQUM4RCxJQUFJLENBQUMsQ0FBQztFQUNqQixDQUFDLEVBQ0QsQ0FBQzlELFFBQVEsRUFBRTJCLE1BQU0sRUFBRWpCLFdBQVcsQ0FDaEMsQ0FBQztFQUVEM0UsV0FBVyxDQUFDckIsT0FBTyxHQUFHb1AsUUFBUTtFQUU5QixJQUFNTyx1QkFBdUIsR0FBRzNWLFdBQVcsQ0FDekMsVUFBQzRWLElBQWEsRUFBSztJQUNqQnhQLGNBQWMsQ0FBQ0osT0FBTyxHQUFHNFAsSUFBSTtJQUM3QjdTLHFCQUFxQixDQUFDMEIsSUFBSSxDQUFDcUIsRUFBRSxFQUFFO01BQUVPLFdBQVcsRUFBRXVQO0lBQUssQ0FBQyxDQUFDO0VBQ3ZELENBQUMsRUFDRCxDQUFDblIsSUFBSSxDQUFDcUIsRUFBRSxDQUNWLENBQUM7RUFFRCxJQUFNK1AsZ0JBQWdCLEdBQUc3VixXQUFXLENBQUMsWUFBTTtJQUFBLElBQUE4VixTQUFBO0lBQ3pDLElBQUlyUCxXQUFXLEVBQUU7SUFFakIxRCxxQkFBcUIsQ0FBQzBCLElBQUksQ0FBQ3FCLEVBQUUsRUFBRTtNQUM3QkcsVUFBVSxFQUFFLElBQUk7TUFDaEI1QixhQUFhLEVBQWJBLGFBQWE7TUFDYmlHLGVBQWUsRUFBRXFGLHNCQUFzQjtNQUN2QzdJLFlBQVksRUFBWkEsWUFBWTtNQUNaNE8sT0FBTyxHQUFBSSxTQUFBLEdBQUU1SixLQUFLLGFBQUxBLEtBQUssdUJBQUxBLEtBQUssQ0FBRXBHLEVBQUUsY0FBQWdRLFNBQUEsY0FBQUEsU0FBQSxHQUFJLElBQUk7TUFDMUJ6UCxXQUFXLEVBQUVELGNBQWMsQ0FBQ0osT0FBTztNQUNuQzRLLFlBQVksRUFBRVYsVUFBVSxLQUFLLFVBQVUsR0FBR1UsWUFBWSxHQUFHLElBQUk7TUFDN0RtRixXQUFXLEVBQUU7UUFDWDdSLE9BQU8sRUFBUEEsT0FBTztRQUNQaUksT0FBTyxFQUFQQSxPQUFPO1FBQ1BDLE1BQU0sRUFBTkEsTUFBTTtRQUNOQyxJQUFJLEVBQUpBLElBQUk7UUFDSkMsWUFBWSxFQUFaQTtNQUNGO0lBQ0YsQ0FBQyxDQUFDO0VBQ0osQ0FBQyxFQUFFLENBQ0R4RixZQUFZLEVBQ1pvRixLQUFLLGFBQUxBLEtBQUssdUJBQUxBLEtBQUssQ0FBRXBHLEVBQUUsRUFDVHdHLFlBQVksRUFDWkYsTUFBTSxFQUNOL0gsYUFBYSxFQUNidU0sWUFBWSxFQUNabkssV0FBVyxFQUNYeUosVUFBVSxFQUNWL0QsT0FBTyxFQUNQakksT0FBTyxFQUNQeUwsc0JBQXNCLEVBQ3RCdEQsSUFBSSxFQUNKNUgsSUFBSSxDQUFDcUIsRUFBRSxDQUNSLENBQUM7O0VBRUY7RUFDQSxJQUFNa1Esa0JBQWtCLEdBQUdoVyxXQUFXLGNBQUFpVyxpQkFBQSxjQUFBQyxtQkFBQSxDQUFBQyxJQUFBLENBQUMsU0FBQUMsUUFBQTtJQUFBLE9BQUFGLG1CQUFBLENBQUFHLElBQUEsV0FBQUMsUUFBQTtNQUFBLGtCQUFBQSxRQUFBLENBQUFqRSxJQUFBLEdBQUFpRSxRQUFBLENBQUFDLElBQUE7UUFBQTtVQUFBLEtBQ2pDM0csZ0JBQWdCLENBQUM1SixPQUFPO1lBQUFzUSxRQUFBLENBQUFDLElBQUE7WUFBQTtVQUFBO1VBQUEsT0FBQUQsUUFBQSxDQUFBRSxNQUFBO1FBQUE7VUFDNUI1RyxnQkFBZ0IsQ0FBQzVKLE9BQU8sR0FBRyxJQUFJO1VBQUFzUSxRQUFBLENBQUFDLElBQUE7VUFBQSxPQUN6QmpKLGVBQWUsQ0FBQyxDQUFDO1FBQUE7UUFBQTtVQUFBLE9BQUFnSixRQUFBLENBQUFHLElBQUE7TUFBQTtJQUFBLEdBQUFMLE9BQUE7RUFBQSxDQUN4QixJQUFFLENBQUM5SSxlQUFlLENBQUMsQ0FBQztFQUVyQmxOLFNBQVMsQ0FBQyxZQUFNO0lBQ2QsSUFBSXFHLFdBQVcsRUFBRTtNQUNmLE9BQU8wTyxTQUFTO0lBQ2xCO0lBRUEsSUFBTXVCLEtBQUssR0FBRy9SLE1BQU0sQ0FBQytDLFVBQVUsQ0FBQztNQUFBLE9BQU1tTyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQUEsR0FBRSxHQUFHLENBQUM7SUFDOUQsT0FBTztNQUFBLE9BQU1sUixNQUFNLENBQUNnUyxZQUFZLENBQUNELEtBQUssQ0FBQztJQUFBO0VBQ3pDLENBQUMsRUFBRSxDQUFDalEsV0FBVyxFQUFFb1AsZ0JBQWdCLENBQUMsQ0FBQztFQUVuQ3pWLFNBQVMsQ0FBQyxZQUFNO0lBQ2QsSUFBTXdXLFVBQVUsR0FBRyxTQUFiQSxVQUFVQSxDQUFBLEVBQVM7TUFDdkIsSUFBSSxDQUFDblEsV0FBVyxFQUFFO1FBQ2hCb1AsZ0JBQWdCLENBQUMsQ0FBQztNQUNwQjtJQUNGLENBQUM7SUFDRGxSLE1BQU0sQ0FBQ2tTLGdCQUFnQixDQUFDLFVBQVUsRUFBRUQsVUFBVSxDQUFDO0lBQy9DLE9BQU87TUFBQSxPQUFNalMsTUFBTSxDQUFDbVMsbUJBQW1CLENBQUMsVUFBVSxFQUFFRixVQUFVLENBQUM7SUFBQTtFQUNqRSxDQUFDLEVBQUUsQ0FBQ25RLFdBQVcsRUFBRW9QLGdCQUFnQixDQUFDLENBQUM7RUFFbkMsSUFBTWtCLDBCQUEwQixHQUFHL1csV0FBVyxDQUFDLFlBQU07SUFDbkQwRyxjQUFjLENBQUMsS0FBSyxDQUFDO0lBQ3JCQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUM7SUFDeEJmLGFBQWEsQ0FBQ3JDLE1BQU0sQ0FBQ3lULFVBQVUsRUFBRTtNQUFFQyxNQUFNLEVBQUU7SUFBVyxDQUFDLENBQUM7O0lBRXhEO0lBQ0FqQixrQkFBa0IsQ0FBQyxDQUFDLENBQUNrQixJQUFJLENBQUMsWUFBTTtNQUFBLElBQUFDLFdBQUE7TUFDOUI7TUFDQSxJQUFBQyxtQkFBQSxHQUFrQjNVLGtCQUFrQixDQUFDLENBQUM7UUFBOUI0VSxLQUFLLEdBQUFELG1CQUFBLENBQUxDLEtBQUs7TUFDYixJQUFNQyxnQkFBZ0IsR0FBRzNVLG9CQUFvQixDQUFDOEIsSUFBSSxDQUFDcUIsRUFBRSxDQUFDO01BQ3RELElBQU04TixNQUFNLElBQUF1RCxXQUFBLEdBQ1ZFLEtBQUssQ0FBQzdCLElBQUksQ0FBQyxVQUFBcEcsSUFBSTtRQUFBLE9BQUlBLElBQUksQ0FBQ21JLE1BQU0sS0FBSyxLQUFLO01BQUEsRUFBQyxjQUFBSixXQUFBLGNBQUFBLFdBQUEsR0FDeENHLGdCQUFnQixHQUFHRCxLQUFLLENBQUM3QixJQUFJLENBQUMsVUFBQXBHLElBQUk7UUFBQSxPQUFJQSxJQUFJLENBQUNpRyxpQkFBaUIsS0FBS2lDLGdCQUFnQjtNQUFBLEVBQUMsR0FBR25DLFNBQVU7TUFFbEcsSUFBSXZCLE1BQU0sRUFBRTtRQUFBLElBQUE0RCxvQkFBQTtRQUNWLENBQUFBLG9CQUFBLEdBQUFuUSxXQUFXLENBQUNyQixPQUFPLGNBQUF3UixvQkFBQSxlQUFuQkEsb0JBQUEsQ0FBQUMsSUFBQSxDQUFBcFEsV0FBVyxFQUFXdU0sTUFBTSxDQUFDO01BQy9CLENBQUMsTUFBTTtRQUFBLElBQUE4RCxrQkFBQTtRQUNMLENBQUFBLGtCQUFBLEdBQUFwUSxTQUFTLENBQUN0QixPQUFPLGNBQUEwUixrQkFBQSxlQUFqQkEsa0JBQUEsQ0FBQUQsSUFBQSxDQUFBblEsU0FBb0IsQ0FBQztNQUN2QjtNQUVBRyxjQUFjLENBQUMsQ0FBQztJQUNsQixDQUFDLENBQUM7RUFDSixDQUFDLEVBQUUsQ0FBQzdCLGFBQWEsRUFBRW9RLGtCQUFrQixFQUFFdk8sY0FBYyxFQUFFZCxrQkFBa0IsRUFBRWxDLElBQUksQ0FBQ3FCLEVBQUUsQ0FBQyxDQUFDOztFQUVwRjtBQUNGO0FBQ0E7QUFDQTtBQUNBO0VBQ0UsSUFBTTZSLHlCQUF5QixHQUFHM1gsV0FBVyxDQUMzQyxVQUFDNFgsTUFBMEIsRUFBSztJQUFBLElBQUFDLHFCQUFBLEVBQUFDLFVBQUEsRUFBQUMsZ0JBQUEsRUFBQUMsZUFBQSxFQUFBQyxhQUFBO0lBQzlCcFYscUJBQXFCLENBQUM0QixJQUFJLENBQUNxQixFQUFFLENBQUM7SUFDOUJZLGNBQWMsQ0FBQyxLQUFLLENBQUM7SUFDckJDLGtCQUFrQixDQUFDLElBQUksQ0FBQztJQUN4Qi9ELHFCQUFxQixDQUFDNkIsSUFBSSxDQUFDcUIsRUFBRSxFQUFFLElBQUksQ0FBQztJQUNwQ2tRLGtCQUFrQixDQUFDLENBQUM7SUFFcEJ6TixnQkFBZ0IsQ0FBQyxJQUFJLENBQUM7SUFDdEJJLGFBQWEsQ0FBQyxVQUFBMEosSUFBSTtNQUFBLE9BQUlBLElBQUksR0FBRyxDQUFDO0lBQUEsRUFBQztJQUMvQmxLLHFCQUFxQixDQUFDO01BQUVKLE9BQU8sRUFBRSxFQUFFO01BQUVDLFdBQVcsRUFBRTtJQUFHLENBQUMsQ0FBQztJQUN2RDRDLGdCQUFnQixDQUFDN0osT0FBTyxDQUFDMkosSUFBSSxDQUFDO0lBQzlCVSwyQkFBMkIsQ0FBQyxLQUFLLENBQUM7SUFDbENKLFdBQVcsQ0FBQyxLQUFLLENBQUM7SUFDbEJqQixZQUFZLENBQUMsS0FBSyxDQUFDO0lBQ25CdkgsWUFBWSxDQUFDMFYsUUFBUSxDQUFDLENBQUMsQ0FBQ0MsU0FBUyxDQUFDLENBQUM7SUFDbkNyRCxvQkFBb0IsQ0FBQzlPLE9BQU8sR0FBRyxLQUFLO0lBQ3BDLENBQUE2UixxQkFBQSxHQUFBbE0sb0JBQW9CLENBQUMzRixPQUFPLGNBQUE2UixxQkFBQSxlQUE1QkEscUJBQUEsQ0FBQUosSUFBQSxDQUFBOUwsb0JBQStCLENBQUM7SUFDaENsSixrQkFBa0IsQ0FBQyxDQUFDLENBQUMyVixlQUFlLENBQUMsSUFBSSxDQUFDO0lBQzFDelEsUUFBUSxDQUFDQyxhQUFhLENBQUMsSUFBSUMsV0FBVyxDQUFDLHNCQUFzQixDQUFDLENBQUM7SUFFL0QsSUFBSStQLE1BQU0sQ0FBQzFULE9BQU8sS0FBSyxTQUFTLElBQUkwVCxNQUFNLENBQUMxVCxPQUFPLEtBQUssTUFBTSxFQUFFO01BQUEsSUFBQW1VLGVBQUE7TUFDN0QxTCxVQUFVLGFBQVZBLFVBQVUsZUFBVkEsVUFBVSxFQUFBMEwsZUFBQSxHQUFHVCxNQUFNLENBQUN6TCxPQUFPLGNBQUFrTSxlQUFBLGNBQUFBLGVBQUEsR0FBSSxJQUFJLENBQUM7SUFDdEMsQ0FBQyxNQUFNO01BQ0wxTCxVQUFVLGFBQVZBLFVBQVUsZUFBVkEsVUFBVSxDQUFHLElBQUksQ0FBQztJQUNwQjtJQUVBLElBQUlpTCxNQUFNLENBQUMxVCxPQUFPLEtBQUssUUFBUSxFQUFFO01BQUEsSUFBQW9VLGNBQUE7TUFDL0I1TCxTQUFTLGFBQVRBLFNBQVMsZUFBVEEsU0FBUyxFQUFBNEwsY0FBQSxHQUFHVixNQUFNLENBQUN4TCxNQUFNLGNBQUFrTSxjQUFBLGNBQUFBLGNBQUEsR0FBSSxJQUFJLENBQUM7SUFDcEMsQ0FBQyxNQUFNLElBQUlWLE1BQU0sQ0FBQzFULE9BQU8sS0FBSyxRQUFRLElBQUkwVCxNQUFNLENBQUMxVCxPQUFPLEtBQUssU0FBUyxFQUFFO01BQ3RFd0ksU0FBUyxhQUFUQSxTQUFTLGVBQVRBLFNBQVMsQ0FBRyxJQUFJLENBQUM7SUFDbkI7SUFFQSxJQUFJa0wsTUFBTSxDQUFDMVQsT0FBTyxLQUFLLE1BQU0sRUFBRTtNQUFBLElBQUFxVSxZQUFBO01BQzdCMUwsT0FBTyxhQUFQQSxPQUFPLGVBQVBBLE9BQU8sRUFBQTBMLFlBQUEsR0FBR1gsTUFBTSxDQUFDdkwsSUFBSSxjQUFBa00sWUFBQSxjQUFBQSxZQUFBLEdBQUksSUFBSSxDQUFDO0lBQ2hDLENBQUMsTUFBTTtNQUNMMUwsT0FBTyxhQUFQQSxPQUFPLGVBQVBBLE9BQU8sQ0FBRyxJQUFJLENBQUM7SUFDakI7SUFFQSxJQUFJK0ssTUFBTSxDQUFDMVQsT0FBTyxLQUFLLFFBQVEsSUFBSTBULE1BQU0sQ0FBQzFULE9BQU8sS0FBSyxTQUFTLEVBQUU7TUFDL0R1SSxlQUFlLENBQUMsSUFBSSxDQUFDO0lBQ3ZCO0lBRUEsSUFBTStMLFVBQVUsR0FBR3ZXLGdDQUFnQyxDQUFDO01BQ2xEaUMsT0FBTyxFQUFFMFQsTUFBTSxDQUFDMVQsT0FBa0I7TUFDbEMwSSxjQUFjLEVBQUVnTCxNQUFNLENBQUNhO0lBQ3pCLENBQUMsQ0FBQztJQUNGdEksYUFBYSxDQUFDcUksVUFBVSxDQUFDO0lBQ3pCMUgsZUFBZSxDQUFDLElBQUksQ0FBQztJQUVyQnJKLGNBQWMsQ0FBQyxDQUFDO0lBQ2hCMUUscUJBQXFCLENBQUMwQixJQUFJLENBQUNxQixFQUFFLEVBQUU7TUFDN0JHLFVBQVUsRUFBRSxJQUFJO01BQ2hCNUIsYUFBYSxFQUFFdEQsT0FBTyxDQUFDMkosSUFBSTtNQUMzQkosZUFBZSxFQUFFLElBQUk7TUFDckJ4RCxZQUFZLEVBQUUsSUFBSTtNQUNsQjRPLE9BQU8sR0FBQW9DLFVBQUEsR0FBRTVMLEtBQUssYUFBTEEsS0FBSyx1QkFBTEEsS0FBSyxDQUFFcEcsRUFBRSxjQUFBZ1MsVUFBQSxjQUFBQSxVQUFBLEdBQUksSUFBSTtNQUMxQnpSLFdBQVcsRUFBRUQsY0FBYyxDQUFDSixPQUFPO01BQ25DNEssWUFBWSxFQUFFLElBQUk7TUFDbEJtRixXQUFXLEVBQUU7UUFDWDdSLE9BQU8sRUFBRTBULE1BQU0sQ0FBQzFULE9BQWtCO1FBQ2xDaUksT0FBTyxFQUFFeUwsTUFBTSxDQUFDMVQsT0FBTyxLQUFLLFNBQVMsSUFBSTBULE1BQU0sQ0FBQzFULE9BQU8sS0FBSyxNQUFNLElBQUE2VCxnQkFBQSxHQUFJSCxNQUFNLENBQUN6TCxPQUFPLGNBQUE0TCxnQkFBQSxjQUFBQSxnQkFBQSxHQUFJLElBQUksR0FBSSxJQUFJO1FBQ3BHM0wsTUFBTSxFQUFFd0wsTUFBTSxDQUFDMVQsT0FBTyxLQUFLLFFBQVEsSUFBQThULGVBQUEsR0FBSUosTUFBTSxDQUFDeEwsTUFBTSxjQUFBNEwsZUFBQSxjQUFBQSxlQUFBLEdBQUksSUFBSSxHQUFJLElBQUk7UUFDcEUzTCxJQUFJLEVBQUV1TCxNQUFNLENBQUMxVCxPQUFPLEtBQUssTUFBTSxJQUFBK1QsYUFBQSxHQUFJTCxNQUFNLENBQUN2TCxJQUFJLGNBQUE0TCxhQUFBLGNBQUFBLGFBQUEsR0FBSSxJQUFJLEdBQUksSUFBSTtRQUM5RDNMLFlBQVksRUFBRTtNQUNoQjtJQUNGLENBQUMsQ0FBQztFQUNKLENBQUMsRUFDRCxDQUNFSixLQUFLLGFBQUxBLEtBQUssdUJBQUxBLEtBQUssQ0FBRXBHLEVBQUUsRUFDVGtRLGtCQUFrQixFQUNsQnZPLGNBQWMsRUFDZGQsa0JBQWtCLEVBQ2xCOEYsZUFBZSxFQUNmQyxTQUFTLEVBQ1RDLFVBQVUsRUFDVkUsT0FBTyxFQUNQcEksSUFBSSxDQUFDcUIsRUFBRSxDQUVYLENBQUM7RUFFRCxJQUFNNFMsc0JBQXNCLEdBQUcxWSxXQUFXLENBQ3hDLFVBQ0UyWSxXQVFTLEVBQ1RDLGNBQTBCLEVBQzFCQyxTQUFrQixFQUNsQkMsT0FBZ0IsRUFDYjtJQUNIM1Asc0JBQXNCLENBQUM7TUFBQSxPQUFNd1AsV0FBVztJQUFBLEVBQUM7SUFDekNwUCx5QkFBeUIsQ0FBQztNQUFBLE9BQU1xUCxjQUFjO0lBQUEsRUFBQztJQUMvQ2pQLGNBQWMsQ0FBQ2tQLFNBQVMsQ0FBQztJQUN6QjlPLFlBQVksQ0FBQytPLE9BQU8sQ0FBQztFQUN2QixDQUFDLEVBQ0QsRUFDRixDQUFDO0VBRUQsSUFBTUMsaUJBQWlCLEdBQUcvWSxXQUFXLENBQ25DLFVBQ0UrSCxPQUFlLEVBQ2ZDLFdBQThCLEVBQzlCc00sS0FBYyxFQUNkQyxpQkFBMEIsRUFDMUJDLFFBQTJCLEVBQzNCQyxLQUFjLEVBQ2RDLElBQWEsRUFDVjtJQUNILElBQUlqSixlQUFlLEVBQUU7TUFDbkJDLGtCQUFrQixDQUFDLEtBQUssQ0FBQztJQUMzQjtJQUNBLElBQUl4QyxtQkFBbUIsSUFBSTJGLHFCQUFxQixLQUFLOU4sT0FBTyxDQUFDcU8sSUFBSSxFQUFFO01BQ2pFbEcsbUJBQW1CLENBQUNuQixPQUFPLEVBQUVDLFdBQVcsRUFBRXNNLEtBQUssRUFBRUMsaUJBQWlCLEVBQUVDLFFBQVEsRUFBRUMsS0FBSyxFQUFFQyxJQUFJLENBQUM7SUFDNUYsQ0FBQyxNQUFNO01BQ0xMLFNBQVMsQ0FBQ3RNLE9BQU8sRUFBRUMsV0FBVyxFQUFFc00sS0FBSyxFQUFFQyxpQkFBaUIsRUFBRUMsUUFBUSxFQUFFQyxLQUFLLEVBQUVDLElBQUksQ0FBQztJQUNsRjtFQUNGLENBQUMsRUFDRCxDQUFDeEwsbUJBQW1CLEVBQUVtTCxTQUFTLEVBQUV4RixxQkFBcUIsRUFBRXBELGVBQWUsQ0FDekUsQ0FBQztFQUVELElBQU11QixZQUFZLEdBQUdoTixXQUFXLENBQUMsWUFBTTtJQUNyQztJQUNBLElBQUlxRSxhQUFhLEtBQUt0RCxPQUFPLENBQUNxTyxJQUFJLEVBQUU7TUFDbEM7TUFDQTdHLGdCQUFnQixDQUFDLElBQUksQ0FBQztNQUN0QkksYUFBYSxDQUFDLFVBQUEwSixJQUFJO1FBQUEsT0FBSUEsSUFBSSxHQUFHLENBQUM7TUFBQSxFQUFDO01BQy9CdEksWUFBWSxDQUFDLEtBQUssQ0FBQztNQUNuQjtNQUNBLElBQUksQ0FBQW1DLEtBQUssYUFBTEEsS0FBSyx1QkFBTEEsS0FBSyxDQUFFNkMsTUFBTSxNQUFLLFFBQVEsRUFBRTtRQUM5QnJDLFNBQVMsYUFBVEEsU0FBUyxlQUFUQSxTQUFTLENBQUcsSUFBSSxDQUFDO01BQ25CO01BQ0EsSUFBSXhJLE9BQU8sS0FBSyxNQUFNLEVBQUU7UUFDdEIySSxPQUFPLGFBQVBBLE9BQU8sZUFBUEEsT0FBTyxDQUFHLElBQUksQ0FBQztNQUNqQjtJQUNGO0lBQ0EsSUFDRSxDQUFDLENBQUNYLEtBQUssSUFBSUEsS0FBSyxhQUFMQSxLQUFLLGVBQUxBLEtBQUssQ0FBRThNLFVBQVUsSUFBSTlNLEtBQUssYUFBTEEsS0FBSyxlQUFMQSxLQUFLLENBQUUrTSxtQkFBbUIsSUFBSS9NLEtBQUssYUFBTEEsS0FBSyxlQUFMQSxLQUFLLENBQUVnTixjQUFjLElBQUloTixLQUFLLGFBQUxBLEtBQUssZUFBTEEsS0FBSyxDQUFFaU4sZUFBZSxLQUM3R2xNLE1BQU0sQ0FBQ3NJLElBQUksQ0FBQ1YsTUFBTSxHQUFHLENBQUMsRUFDdEI7TUFDQTdJLFdBQVcsQ0FBQ2lCLE1BQU0sQ0FBQ3NJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM3QjtJQUNBO0lBQ0E7SUFDQSxJQUFJdFIsbUJBQW1CLENBQUNDLE9BQU8sQ0FBQyxJQUFJLENBQUFnSSxLQUFLLGFBQUxBLEtBQUssdUJBQUxBLEtBQUssQ0FBRWlELElBQUksTUFBSyxjQUFjLEVBQUU7TUFDbEV4QyxVQUFVLENBQUMsSUFBSSxDQUFDO01BQ2hCRCxTQUFTLGFBQVRBLFNBQVMsZUFBVEEsU0FBUyxDQUFHLElBQUksQ0FBQztNQUNqQkcsT0FBTyxhQUFQQSxPQUFPLGVBQVBBLE9BQU8sQ0FBRyxJQUFJLENBQUM7SUFDakI7SUFDQWpDLGdCQUFnQixDQUFDN0osT0FBTyxDQUFDMkosSUFBSSxDQUFDO0lBQzlCK0IsZUFBZSxDQUFDLElBQUksQ0FBQztJQUNyQnpCLFdBQVcsQ0FBQyxLQUFLLENBQUM7SUFDbEJ3QixpQkFBaUIsSUFBSUQsZUFBZSxDQUFDLENBQUM7SUFDdEMsSUFBSVosb0JBQW9CLENBQUMzRixPQUFPLEVBQUU7TUFDaEMyRixvQkFBb0IsQ0FBQzNGLE9BQU8sQ0FBQyxDQUFDO0lBQ2hDO0VBQ0YsQ0FBQyxFQUFFLENBQ0RqRixPQUFPLENBQUMySixJQUFJLEVBQ1ozSixPQUFPLENBQUNxTyxJQUFJLEVBQ1ovSyxhQUFhLEVBQ2JtSSxpQkFBaUIsRUFDakJELGVBQWUsRUFDZkwsS0FBSyxFQUNMZSxNQUFNLEVBQ05qQixXQUFXLEVBQ1hXLFVBQVUsRUFDVkQsU0FBUyxFQUNURyxPQUFPLEVBQ1B2RCxzQkFBc0IsRUFDdEJwRixPQUFPLENBQ1IsQ0FBQztFQUVGb0QsU0FBUyxDQUFDdEIsT0FBTyxHQUFHZ0gsWUFBWTtFQUVoQyxJQUFNb00sa0JBQWtCLEdBQUdwWixXQUFXLENBQUMsWUFBTTtJQUMzQyxJQUFNcVosWUFBWSxHQUFHeEsscUJBQXFCLEtBQUs5TixPQUFPLENBQUN3SixRQUFRO0lBQy9ELElBQU0rTyxlQUFlLEdBQUd6SyxxQkFBcUIsS0FBSzlOLE9BQU8sQ0FBQzJKLElBQUksSUFBSWdGLHNCQUFzQjtJQUV4RixJQUFJMkosWUFBWSxJQUFJQyxlQUFlLEVBQUU7TUFBQSxJQUFBQyxzQkFBQTtNQUNuQyxJQUFNQyxVQUFVLEdBQUd2TSxNQUFNLENBQUNzSSxJQUFJLENBQUMsQ0FBQyxDQUFDO01BQ2pDLElBQUlpRSxVQUFVLEVBQUU7UUFDZDdNLFVBQVUsQ0FBQyxJQUFJLENBQUM7UUFDaEJELFNBQVMsYUFBVEEsU0FBUyxlQUFUQSxTQUFTLENBQUcsSUFBSSxDQUFDO1FBQ2pCRyxPQUFPLGFBQVBBLE9BQU8sZUFBUEEsT0FBTyxDQUFHLElBQUksQ0FBQztRQUNmYixXQUFXLENBQUN3TixVQUFVLENBQUM7TUFDekI7TUFDQWpSLGdCQUFnQixDQUFDLElBQUksQ0FBQztNQUN0QkksYUFBYSxDQUFDLFVBQUEwSixJQUFJO1FBQUEsT0FBSUEsSUFBSSxHQUFHLENBQUM7TUFBQSxFQUFDO01BQy9CekgsZ0JBQWdCLENBQUM3SixPQUFPLENBQUMySixJQUFJLENBQUM7TUFDOUIrQixlQUFlLENBQUMsSUFBSSxDQUFDO01BQ3JCekIsV0FBVyxDQUFDLEtBQUssQ0FBQztNQUNsQixJQUFJd0IsaUJBQWlCLEVBQUVELGVBQWUsQ0FBQyxDQUFDO01BQ3hDLENBQUFnTixzQkFBQSxHQUFBNU4sb0JBQW9CLENBQUMzRixPQUFPLGNBQUF1VCxzQkFBQSxlQUE1QkEsc0JBQUEsQ0FBQTlCLElBQUEsQ0FBQTlMLG9CQUErQixDQUFDO01BQ2hDaEUsUUFBUSxDQUFDQyxhQUFhLENBQUMsSUFBSUMsV0FBVyxDQUFDLHNCQUFzQixDQUFDLENBQUM7TUFDL0Q7SUFDRjtJQUVBbUYsWUFBWSxDQUFDLENBQUM7RUFDaEIsQ0FBQyxFQUFFLENBQ0RDLE1BQU0sQ0FBQ3NJLElBQUksRUFDWDFHLHFCQUFxQixFQUNyQjdCLFlBQVksRUFDWjBDLHNCQUFzQixFQUN0QmxELGlCQUFpQixFQUNqQlIsV0FBVyxFQUNYVSxTQUFTLEVBQ1RDLFVBQVUsRUFDVkUsT0FBTyxFQUNQTixlQUFlLENBQ2hCLENBQUM7RUFFRixJQUFNa04sZUFBZSxHQUFHelosV0FBVyxjQUFBaVcsaUJBQUEsY0FBQUMsbUJBQUEsQ0FBQUMsSUFBQSxDQUFDLFNBQUF1RCxTQUFBO0lBQUEsT0FBQXhELG1CQUFBLENBQUFHLElBQUEsV0FBQXNELFNBQUE7TUFBQSxrQkFBQUEsU0FBQSxDQUFBdEgsSUFBQSxHQUFBc0gsU0FBQSxDQUFBcEQsSUFBQTtRQUFBO1VBQ2xDcE8scUJBQXFCLENBQUM7WUFBRUosT0FBTyxFQUFFLEVBQUU7WUFBRUMsV0FBVyxFQUFFO1VBQUcsQ0FBQyxDQUFDO1VBQ3ZETyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUM7VUFDdEI7VUFDQVosUUFBUSxDQUFDQyxhQUFhLENBQUMsSUFBSUMsV0FBVyxDQUFDLHNCQUFzQixDQUFDLENBQUM7VUFDL0RtRixZQUFZLENBQUMsQ0FBQztRQUFBO1FBQUE7VUFBQSxPQUFBMk0sU0FBQSxDQUFBbEQsSUFBQTtNQUFBO0lBQUEsR0FBQWlELFFBQUE7RUFBQSxDQUNmLElBQUUsQ0FBQzFNLFlBQVksQ0FBQyxDQUFDOztFQUVsQjtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQSxJQUFNNE0sVUFBVSxHQUFHNVosV0FBVyxDQUFDLFlBQU07SUFDbkMsSUFBTTZaLEVBQUUsR0FBRzFWLDRCQUE0QixDQUFDRCxPQUFPLEVBQUVnSSxLQUFLLGFBQUxBLEtBQUssdUJBQUxBLEtBQUssQ0FBRWlELElBQUksRUFBRU4scUJBQXFCLEVBQUU5TixPQUFPLENBQUMySixJQUFJLENBQUM7SUFDbEc5RSxhQUFhLENBQUNyQyxNQUFNLENBQUN1VyxVQUFVLEVBQUU7TUFBRUQsRUFBRSxFQUFGQTtJQUFHLENBQUMsQ0FBQzs7SUFFeEM7SUFDQSxJQUFJaEwscUJBQXFCLEtBQUs5TixPQUFPLENBQUNxTyxJQUFJLEVBQUU7TUFDMUM7TUFDQXJGLFlBQVksQ0FBQyxLQUFLLENBQUM7TUFDbkI1QixxQkFBcUIsQ0FBQztRQUFFSixPQUFPLEVBQUUsRUFBRTtRQUFFQyxXQUFXLEVBQUU7TUFBRyxDQUFDLENBQUM7TUFDdkRPLGdCQUFnQixDQUFDLElBQUksQ0FBQztNQUN0QkksYUFBYSxDQUFDLFVBQUEwSixJQUFJO1FBQUEsT0FBSUEsSUFBSSxHQUFHLENBQUM7TUFBQSxFQUFDO01BQy9CckgsV0FBVyxDQUFDLEtBQUssQ0FBQztNQUNsQndCLGlCQUFpQixJQUFJRCxlQUFlLENBQUMsQ0FBQztNQUN0QyxJQUFJWixvQkFBb0IsQ0FBQzNGLE9BQU8sRUFBRTtRQUNoQzJGLG9CQUFvQixDQUFDM0YsT0FBTyxDQUFDLENBQUM7TUFDaEM7TUFDQTRFLGdCQUFnQixDQUFDN0osT0FBTyxDQUFDMkosSUFBSSxDQUFDO01BQzlCL0MsUUFBUSxDQUFDQyxhQUFhLENBQUMsSUFBSUMsV0FBVyxDQUFDLHNCQUFzQixDQUFDLENBQUM7TUFDL0Q7SUFDRjs7SUFFQTtJQUNBLElBQUlnSCxxQkFBcUIsS0FBSzlOLE9BQU8sQ0FBQzJKLElBQUksS0FBS3pHLG1CQUFtQixDQUFDQyxPQUFPLENBQUMsSUFBSWlILHdCQUF3QixDQUFDLEVBQUU7TUFDeEd3QixVQUFVLENBQUMsSUFBSSxDQUFDO01BQ2hCRCxTQUFTLGFBQVRBLFNBQVMsZUFBVEEsU0FBUyxDQUFHLElBQUksQ0FBQztNQUNqQkcsT0FBTyxhQUFQQSxPQUFPLGVBQVBBLE9BQU8sQ0FBRyxJQUFJLENBQUM7TUFDZkosZUFBZSxDQUFDLElBQUksQ0FBQztJQUN2QjtFQUNGLENBQUMsRUFBRSxDQUNEb0MscUJBQXFCLEVBQ3JCM0ssT0FBTyxFQUNQZ0ksS0FBSyxhQUFMQSxLQUFLLHVCQUFMQSxLQUFLLENBQUVpRCxJQUFJLEVBQ1h2SixhQUFhLEVBQ2I3RSxPQUFPLENBQUMySixJQUFJLEVBQ1pwQixzQkFBc0IsRUFDdEJrRCxpQkFBaUIsRUFDakJELGVBQWUsRUFDZnBCLHdCQUF3QixFQUN4QndCLFVBQVUsRUFDVkQsU0FBUyxFQUNURyxPQUFPLEVBQ1BKLGVBQWUsQ0FDaEIsQ0FBQzs7RUFFRjtFQUNBO0VBQ0E7RUFDQXJNLFNBQVMsQ0FBQyxZQUFNO0lBQ2QsSUFBTTJaLE1BQU0sR0FBRyxDQUFDLEVBQUUxTixJQUFJLGFBQUpBLElBQUksZUFBSkEsSUFBSSxDQUFFdkcsRUFBRSxJQUFJd0csWUFBWSxhQUFaQSxZQUFZLGVBQVpBLFlBQVksQ0FBRTBOLFNBQVMsSUFBSTVOLE1BQU0sYUFBTkEsTUFBTSxlQUFOQSxNQUFNLENBQUV0RyxFQUFFLElBQUlxRyxPQUFPLGFBQVBBLE9BQU8sZUFBUEEsT0FBTyxDQUFFckcsRUFBRSxDQUFDO0lBQ25GLElBQU1tVSxTQUFTLEdBQUc1Tyx1QkFBdUIsQ0FBQ3JGLE9BQU87SUFDakRxRix1QkFBdUIsQ0FBQ3JGLE9BQU8sR0FBRytULE1BQU07SUFDeEMsSUFBSSxDQUFDOVYsbUJBQW1CLENBQUNDLE9BQU8sQ0FBQyxJQUFJLENBQUFnSSxLQUFLLGFBQUxBLEtBQUssdUJBQUxBLEtBQUssQ0FBRWlELElBQUksTUFBSyxjQUFjLElBQUk4SyxTQUFTLElBQUksQ0FBQ0YsTUFBTSxFQUFFO01BQzNGM08sMkJBQTJCLENBQUMsSUFBSSxDQUFDO0lBQ25DO0VBQ0YsQ0FBQyxFQUFFLENBQUNpQixJQUFJLGFBQUpBLElBQUksdUJBQUpBLElBQUksQ0FBRXZHLEVBQUUsRUFBRXdHLFlBQVksYUFBWkEsWUFBWSx1QkFBWkEsWUFBWSxDQUFFME4sU0FBUyxFQUFFNU4sTUFBTSxhQUFOQSxNQUFNLHVCQUFOQSxNQUFNLENBQUV0RyxFQUFFLEVBQUVxRyxPQUFPLGFBQVBBLE9BQU8sdUJBQVBBLE9BQU8sQ0FBRXJHLEVBQUUsRUFBRTVCLE9BQU8sRUFBRWdJLEtBQUssYUFBTEEsS0FBSyx1QkFBTEEsS0FBSyxDQUFFaUQsSUFBSSxDQUFDLENBQUM7RUFFdEYvTyxTQUFTLENBQUMsWUFBTTtJQUNkLElBQU04WixtQkFBbUIsR0FBRyxTQUF0QkEsbUJBQW1CQSxDQUFJQyxHQUFVLEVBQUs7TUFDMUMsSUFBQUMsS0FBQSxHQUE4QkQsR0FBRyxDQUFtQ3ZDLE1BQU0sSUFBSSxDQUFDLENBQUM7UUFBakV5QyxTQUFTLEdBQUFELEtBQUEsQ0FBaEJsTyxLQUFLO01BQ2IsSUFBSW1PLFNBQVMsYUFBVEEsU0FBUyxlQUFUQSxTQUFTLENBQUV2VSxFQUFFLEVBQUU7UUFDakI0SCxRQUFRLENBQUMyTSxTQUFTLEVBQUU7VUFBRUMsWUFBWSxFQUFFO1FBQU0sQ0FBQyxDQUFDO01BQzlDO0lBQ0YsQ0FBQztJQUNEM1MsUUFBUSxDQUFDa1AsZ0JBQWdCLENBQUMsb0NBQW9DLEVBQUVxRCxtQkFBbUIsQ0FBQztJQUNwRixPQUFPLFlBQU07TUFDWHZTLFFBQVEsQ0FBQ21QLG1CQUFtQixDQUFDLG9DQUFvQyxFQUFFb0QsbUJBQW1CLENBQUM7SUFDekYsQ0FBQztFQUNILENBQUMsRUFBRSxDQUFDeE0sUUFBUSxDQUFDLENBQUM7RUFFZHROLFNBQVMsQ0FBQyxZQUFNO0lBQ2QsSUFBTW1hLGlCQUFpQixHQUFHLFNBQXBCQSxpQkFBaUJBLENBQUlKLEdBQVUsRUFBSztNQUN4QyxJQUFBSyxLQUFBLEdBQThCTCxHQUFHLENBQW1DdkMsTUFBTSxJQUFJLENBQUMsQ0FBQztRQUFqRXlDLFNBQVMsR0FBQUcsS0FBQSxDQUFoQnRPLEtBQUs7TUFDYixJQUFJLEVBQUNtTyxTQUFTLGFBQVRBLFNBQVMsZUFBVEEsU0FBUyxDQUFFdlUsRUFBRSxHQUFFO01BQ3BCOEgsV0FBVyxDQUFDeU0sU0FBUyxDQUFDO01BQ3RCLElBQUksQ0FBQW5PLEtBQUssYUFBTEEsS0FBSyx1QkFBTEEsS0FBSyxDQUFFcEcsRUFBRSxNQUFLdVUsU0FBUyxDQUFDdlUsRUFBRSxFQUFFO1FBQzlCa0csV0FBVyxDQUFDcU8sU0FBUyxDQUFDO01BQ3hCO0lBQ0YsQ0FBQztJQUNEMVMsUUFBUSxDQUFDa1AsZ0JBQWdCLENBQUMsa0NBQWtDLEVBQUUwRCxpQkFBaUIsQ0FBQztJQUNoRixPQUFPLFlBQU07TUFDWDVTLFFBQVEsQ0FBQ21QLG1CQUFtQixDQUFDLGtDQUFrQyxFQUFFeUQsaUJBQWlCLENBQUM7SUFDckYsQ0FBQztFQUNILENBQUMsRUFBRSxDQUFDM00sV0FBVyxFQUFFNUIsV0FBVyxFQUFFRSxLQUFLLGFBQUxBLEtBQUssdUJBQUxBLEtBQUssQ0FBRXBHLEVBQUUsQ0FBQyxDQUFDO0VBRXpDMUYsU0FBUyxDQUFDLFlBQU07SUFDZCxJQUFNcWEsWUFBWSxHQUFHLFNBQWZBLFlBQVlBLENBQUEsRUFBUztNQUN6QnpQLFdBQVcsQ0FBQyxLQUFLLENBQUM7TUFDbEJ6QyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUM7TUFDdEJJLGFBQWEsQ0FBQyxVQUFBMEosSUFBSTtRQUFBLE9BQUlBLElBQUksR0FBRyxDQUFDO01BQUEsRUFBQztNQUMvQmxLLHFCQUFxQixDQUFDO1FBQUVKLE9BQU8sRUFBRSxFQUFFO1FBQUVDLFdBQVcsRUFBRTtNQUFHLENBQUMsQ0FBQztNQUN2RDRDLGdCQUFnQixDQUFDN0osT0FBTyxDQUFDcU8sSUFBSSxDQUFDO01BQzlCekgsUUFBUSxDQUFDQyxhQUFhLENBQUMsSUFBSUMsV0FBVyxDQUFDLHNCQUFzQixDQUFDLENBQUM7SUFDakUsQ0FBQztJQUNERixRQUFRLENBQUNrUCxnQkFBZ0IsQ0FBQyxxQkFBcUIsRUFBRTRELFlBQVksQ0FBQztJQUM5RCxPQUFPLFlBQU07TUFDWDlTLFFBQVEsQ0FBQ21QLG1CQUFtQixDQUFDLHFCQUFxQixFQUFFMkQsWUFBWSxDQUFDO0lBQ25FLENBQUM7RUFDSCxDQUFDLEVBQUUsRUFBRSxDQUFDOztFQUVOO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7RUFDRXJhLFNBQVMsQ0FBQyxZQUFNO0lBQ2QsSUFBTXNhLFFBQVEsR0FBRyxTQUFYQSxRQUFRQSxDQUFBLEVBQVM7TUFDckIvQyx5QkFBeUIsQ0FBQztRQUN4QnpULE9BQU8sRUFBRSxRQUFRO1FBQ2pCNkssTUFBTSxFQUFFO1VBQUVpTCxTQUFTLEVBQUUsSUFBSTtVQUFFVyxRQUFRLEVBQUU7UUFBSztNQUM1QyxDQUFDLENBQUM7SUFDSixDQUFDO0lBQ0RoVCxRQUFRLENBQUNrUCxnQkFBZ0IsQ0FBQyxnQkFBZ0IsRUFBRTZELFFBQVEsQ0FBQztJQUNyRCxPQUFPLFlBQU07TUFDWC9TLFFBQVEsQ0FBQ21QLG1CQUFtQixDQUFDLGdCQUFnQixFQUFFNEQsUUFBUSxDQUFDO0lBQzFELENBQUM7RUFDSCxDQUFDLEVBQUUsQ0FBQy9DLHlCQUF5QixDQUFDLENBQUM7O0VBRS9CO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7RUFDRXZYLFNBQVMsQ0FBQyxZQUFNO0lBQ2QsSUFBTXdhLFlBQVksR0FBRyxTQUFmQSxZQUFZQSxDQUFJcEksS0FBWSxFQUFLO01BQ3JDLElBQUFxSSxLQUFBLEdBQW1CckksS0FBSztRQUFoQm9GLE1BQU0sR0FBQWlELEtBQUEsQ0FBTmpELE1BQU07TUFDZCxJQUFJLENBQUNBLE1BQU0sRUFBRTtNQUNiRCx5QkFBeUIsQ0FBQ0MsTUFBTSxDQUFDO0lBQ25DLENBQUM7SUFFRGpRLFFBQVEsQ0FBQ2tQLGdCQUFnQixDQUFDcFQseUJBQXlCLEVBQUVtWCxZQUFZLENBQUM7SUFDbEUsT0FBTyxZQUFNO01BQ1hqVCxRQUFRLENBQUNtUCxtQkFBbUIsQ0FBQ3JULHlCQUF5QixFQUFFbVgsWUFBWSxDQUFDO0lBQ3ZFLENBQUM7RUFDSCxDQUFDLEVBQUUsQ0FBQ2pELHlCQUF5QixDQUFDLENBQUM7O0VBRS9CO0FBQ0Y7QUFDQTtBQUNBO0VBQ0V2WCxTQUFTLENBQUMsWUFBTTtJQUNkLElBQU0wYSxvQkFBb0IsR0FBRyxTQUF2QkEsb0JBQW9CQSxDQUFJdEksS0FBWSxFQUFLO01BQUEsSUFBQXVJLGdCQUFBLEVBQUFDLGVBQUE7TUFDN0MsSUFBQUMsS0FBQSxHQUFtQnpJLEtBQUs7UUFBaEJvRixNQUFNLEdBQUFxRCxLQUFBLENBQU5yRCxNQUFNO01BTWQsSUFBTXlDLFNBQVMsR0FBR3pDLE1BQU0sYUFBTkEsTUFBTSx1QkFBTkEsTUFBTSxDQUFFMUwsS0FBSztNQUMvQixJQUFJLENBQUNtTyxTQUFTLEVBQUU7TUFFaEIxTixVQUFVLEVBQUFvTyxnQkFBQSxHQUFDbkQsTUFBTSxhQUFOQSxNQUFNLHVCQUFOQSxNQUFNLENBQUV6TCxPQUFPLGNBQUE0TyxnQkFBQSxjQUFBQSxnQkFBQSxHQUFJLElBQUksQ0FBQztNQUNuQ3JPLFNBQVMsYUFBVEEsU0FBUyxlQUFUQSxTQUFTLEVBQUFzTyxlQUFBLEdBQUdwRCxNQUFNLGFBQU5BLE1BQU0sdUJBQU5BLE1BQU0sQ0FBRXhMLE1BQU0sY0FBQTRPLGVBQUEsY0FBQUEsZUFBQSxHQUFJLElBQUksQ0FBQztNQUNuQyxJQUFJLENBQUFwRCxNQUFNLGFBQU5BLE1BQU0sdUJBQU5BLE1BQU0sQ0FBRXZMLElBQUksTUFBSzhJLFNBQVMsRUFBRTtRQUM5QnRJLE9BQU8sYUFBUEEsT0FBTyxlQUFQQSxPQUFPLENBQUcrSyxNQUFNLENBQUN2TCxJQUFJLENBQUM7TUFDeEI7TUFDQUwsV0FBVyxDQUFDcU8sU0FBUyxDQUFDO01BQ3RCclAsV0FBVyxDQUFDLEtBQUssQ0FBQztNQUNsQkosZ0JBQWdCLENBQUM3SixPQUFPLENBQUMySixJQUFJLENBQUM7SUFDaEMsQ0FBQztJQUVEL0MsUUFBUSxDQUFDa1AsZ0JBQWdCLENBQUMsK0JBQStCLEVBQUVpRSxvQkFBb0IsQ0FBQztJQUNoRixPQUFPLFlBQU07TUFDWG5ULFFBQVEsQ0FBQ21QLG1CQUFtQixDQUFDLCtCQUErQixFQUFFZ0Usb0JBQW9CLENBQUM7SUFDckYsQ0FBQztFQUNILENBQUMsRUFBRSxDQUFDOU8sV0FBVyxFQUFFVSxTQUFTLEVBQUVDLFVBQVUsRUFBRUUsT0FBTyxDQUFDLENBQUM7O0VBRWpEO0VBQ0F6TSxTQUFTLENBQUMsWUFBTTtJQUNkLElBQU04YSxhQUFhLEdBQUcsU0FBaEJBLGFBQWFBLENBQUlmLEdBQVUsRUFBSztNQUNwQyxJQUFBZ0IsS0FBQSxHQUFtQmhCLEdBQUc7UUFBZHZDLE1BQU0sR0FBQXVELEtBQUEsQ0FBTnZELE1BQU07TUFDZCxJQUFJQSxNQUFNLEVBQUU3TyxjQUFjLENBQUM2TyxNQUFNLENBQUM7SUFDcEMsQ0FBQztJQUNEalEsUUFBUSxDQUFDa1AsZ0JBQWdCLENBQUMsd0JBQXdCLEVBQUVxRSxhQUFhLENBQUM7SUFDbEUsT0FBTyxZQUFNO01BQ1h2VCxRQUFRLENBQUNtUCxtQkFBbUIsQ0FBQyx3QkFBd0IsRUFBRW9FLGFBQWEsQ0FBQztJQUN2RSxDQUFDO0VBQ0gsQ0FBQyxFQUFFLEVBQUUsQ0FBQzs7RUFFTjtFQUNBOWEsU0FBUyxDQUFDLFlBQU07SUFDZDJJLGNBQWMsQ0FBQyxJQUFJLENBQUM7RUFDdEIsQ0FBQyxFQUFFLENBQUNULGFBQWEsQ0FBQyxDQUFDOztFQUVuQjtFQUNBO0VBQ0EsSUFBTThTLG9CQUFvQixHQUFHbmIsT0FBTyxDQUFrRSxZQUFNO0lBQzFHLElBQUk0TyxxQkFBcUIsS0FBSzlOLE9BQU8sQ0FBQ3FPLElBQUksRUFBRSxPQUFPLElBQUk7SUFDdkQsSUFBSSxDQUFDdEcsV0FBVyxJQUFJQSxXQUFXLENBQUMxRSxTQUFTLEtBQUssT0FBTyxFQUFFLE9BQU8sSUFBSTtJQUNsRSxJQUFNMkssTUFBTSxHQUFHakcsV0FBVyxDQUFDdVMsV0FBVztJQUN0QyxJQUFJLENBQUN0TSxNQUFNLElBQUksQ0FBQy9LLHVCQUF1QixDQUFDc1gsUUFBUSxDQUFDdk0sTUFBNkIsQ0FBQyxFQUFFLE9BQU8sSUFBSTtJQUM1RixJQUFNd00sV0FBVyxHQUNmeE0sTUFBTSxLQUFLLE1BQU0sR0FBR2pHLFdBQVcsQ0FBQzBTLFFBQVEsR0FBR3pNLE1BQU0sS0FBSyxTQUFTLEdBQUdqRyxXQUFXLENBQUMyUyxXQUFXLEdBQUczUyxXQUFXLENBQUM0UyxVQUFVO0lBQ3BILE9BQU87TUFBRUMsVUFBVSxFQUFFNU0sTUFBNkI7TUFBRXdNLFdBQVcsRUFBRUEsV0FBVyxJQUFJO0lBQUcsQ0FBQztFQUN0RixDQUFDLEVBQUUsQ0FBQzFNLHFCQUFxQixFQUFFL0YsV0FBVyxDQUFDLENBQUM7O0VBRXhDO0VBQ0E7RUFDQTFJLFNBQVMsQ0FBQyxZQUFNO0lBQ2QsSUFBSWdiLG9CQUFvQixJQUFJbFAsS0FBSyxJQUFJLENBQUNBLEtBQUssQ0FBQzBQLGlCQUFpQixFQUFFO01BQzdENVAsV0FBVyxDQUFBNEksYUFBQSxDQUFBQSxhQUFBLEtBQU0xSSxLQUFLO1FBQUUwUCxpQkFBaUIsRUFBRTtNQUFJLEVBQUUsQ0FBQztJQUNwRDtFQUNGLENBQUMsRUFBRSxDQUFDUixvQkFBb0IsRUFBRWxQLEtBQUssRUFBRUYsV0FBVyxDQUFDLENBQUM7O0VBRTlDO0VBQ0E7RUFDQSxJQUFNNlAsb0NBQW9DLEdBQUc3YixXQUFXLENBQUMsWUFBTTtJQUM3RCxJQUFJLENBQUM4SSxXQUFXLEVBQUU7SUFDbEIsSUFDRXVTLFdBQVcsR0FPVHZTLFdBQVcsQ0FQYnVTLFdBQVc7TUFDQVMsR0FBRyxHQU1aaFQsV0FBVyxDQU5ia1IsU0FBUztNQUNJK0IsS0FBSyxHQUtoQmpULFdBQVcsQ0FMYjJTLFdBQVc7TUFDRE8sR0FBRyxHQUlYbFQsV0FBVyxDQUpiNlIsUUFBUTtNQUNJc0IsS0FBSyxHQUdmblQsV0FBVyxDQUhiNFMsVUFBVTtNQUNGUSxHQUFHLEdBRVRwVCxXQUFXLENBRmJxVCxNQUFNO01BQ0lDLEtBQUssR0FDYnRULFdBQVcsQ0FEYjBTLFFBQVE7SUFHVixJQUFNYSxZQUFZLEdBQUdwUCxNQUFNLENBQUNzSSxJQUFJLENBQUNDLElBQUksQ0FBQyxVQUFDOEcsQ0FBUTtNQUFBLE9BQUtBLENBQUMsQ0FBQ25OLElBQUksS0FBSyxjQUFjO0lBQUEsRUFBQztJQUM5RSxJQUFJLENBQUNrTixZQUFZLEVBQUU7O0lBRW5CO0lBQ0F0UyxZQUFZLENBQUMsS0FBSyxDQUFDO0lBQ25CNUIscUJBQXFCLENBQUM7TUFBRUosT0FBTyxFQUFFLEVBQUU7TUFBRUMsV0FBVyxFQUFFO0lBQUcsQ0FBQyxDQUFDO0lBQ3ZETyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUM7SUFDdEJJLGFBQWEsQ0FBQyxVQUFBMEosSUFBSTtNQUFBLE9BQUlBLElBQUksR0FBRyxDQUFDO0lBQUEsRUFBQztJQUMvQnJILFdBQVcsQ0FBQyxLQUFLLENBQUM7O0lBRWxCO0lBQ0E2QixPQUFPLGFBQVBBLE9BQU8sZUFBUEEsT0FBTyxDQUFHLElBQUksQ0FBQztJQUNmRixVQUFVLENBQUMsSUFBSSxDQUFDO0lBQ2hCRCxTQUFTLGFBQVRBLFNBQVMsZUFBVEEsU0FBUyxDQUFHLElBQUksQ0FBQztJQUNqQkQsZUFBZSxDQUFDLElBQUksQ0FBQztJQUVyQixJQUFJNE8sV0FBVyxLQUFLLFFBQVEsSUFBSVcsR0FBRyxJQUFJLElBQUksRUFBRTtNQUMzQ3RQLFNBQVMsYUFBVEEsU0FBUyxlQUFUQSxTQUFTLENBQUc7UUFBRTVHLEVBQUUsRUFBRWtXLEdBQUc7UUFBRXZNLElBQUksRUFBRXdNLEtBQUssSUFBSTtNQUFHLENBQUMsQ0FBQztJQUM3QyxDQUFDLE1BQU0sSUFBSVosV0FBVyxLQUFLLFNBQVMsSUFBSVMsR0FBRyxJQUFJLElBQUksRUFBRTtNQUNuRG5QLFVBQVUsQ0FBQWlJLGFBQUE7UUFDUjlPLEVBQUUsRUFBRWdXLEdBQUc7UUFDUHJNLElBQUksRUFBRXNNLEtBQUssSUFBSTtNQUFFLEdBQ2JDLEdBQUcsSUFBSSxJQUFJLEdBQUc7UUFBRXJCLFFBQVEsRUFBRXFCLEdBQUc7UUFBRTVQLE1BQU0sRUFBRTtVQUFFdEcsRUFBRSxFQUFFa1csR0FBRztVQUFFdk0sSUFBSSxFQUFFd00sS0FBSyxJQUFJO1FBQUc7TUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQ2pGLENBQUM7TUFDRnhQLGVBQWUsQ0FBQztRQUFFdU4sU0FBUyxFQUFFdUMsTUFBTSxDQUFDVCxHQUFHLENBQUM7UUFBRUwsV0FBVyxFQUFFTSxLQUFLLElBQUksRUFBRTtRQUFFTCxVQUFVLEVBQUVPLEtBQUssSUFBSTtNQUFHLENBQUMsQ0FBQztJQUNoRyxDQUFDLE1BQU0sSUFBSVosV0FBVyxLQUFLLE1BQU0sSUFBSWEsR0FBRyxJQUFJLElBQUksRUFBRTtNQUNoRHJQLE9BQU8sYUFBUEEsT0FBTyxlQUFQQSxPQUFPLENBQUErSCxhQUFBLENBQUFBLGFBQUE7UUFDTDlPLEVBQUUsRUFBRW9XLEdBQUc7UUFDUHpNLElBQUksRUFBRTJNLEtBQUssSUFBSTtNQUFFLEdBQ2JOLEdBQUcsSUFBSSxJQUFJLEdBQUc7UUFBRTlCLFNBQVMsRUFBRThCO01BQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUNyQ0UsR0FBRyxJQUFJLElBQUksR0FBRztRQUFFckIsUUFBUSxFQUFFcUI7TUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQ3pDLENBQUM7TUFDRixJQUFJQSxHQUFHLElBQUksSUFBSSxFQUFFdFAsU0FBUyxhQUFUQSxTQUFTLGVBQVRBLFNBQVMsQ0FBRztRQUFFNUcsRUFBRSxFQUFFa1csR0FBRztRQUFFdk0sSUFBSSxFQUFFd00sS0FBSyxJQUFJO01BQUcsQ0FBQyxDQUFDO01BQzVELElBQUlILEdBQUcsSUFBSSxJQUFJLEVBQUU7UUFDZm5QLFVBQVUsQ0FBQWlJLGFBQUE7VUFDUjlPLEVBQUUsRUFBRWdXLEdBQUc7VUFDUHJNLElBQUksRUFBRXNNLEtBQUssSUFBSTtRQUFFLEdBQ2JDLEdBQUcsSUFBSSxJQUFJLEdBQUc7VUFBRXJCLFFBQVEsRUFBRXFCLEdBQUc7VUFBRTVQLE1BQU0sRUFBRTtZQUFFdEcsRUFBRSxFQUFFa1csR0FBRztZQUFFdk0sSUFBSSxFQUFFd00sS0FBSyxJQUFJO1VBQUc7UUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQ2pGLENBQUM7UUFDRnhQLGVBQWUsQ0FBQztVQUFFdU4sU0FBUyxFQUFFdUMsTUFBTSxDQUFDVCxHQUFHLENBQUM7VUFBRUwsV0FBVyxFQUFFTSxLQUFLLElBQUksRUFBRTtVQUFFTCxVQUFVLEVBQUVPLEtBQUssSUFBSTtRQUFHLENBQUMsQ0FBQztNQUNoRztJQUNGO0lBRUFqUSxXQUFXLENBQUNxUSxZQUFZLENBQUM7SUFDekJ0VCxjQUFjLENBQUMsSUFBSSxDQUFDO0lBQ3BCNkIsZ0JBQWdCLENBQUM3SixPQUFPLENBQUMySixJQUFJLENBQUM7SUFDOUIvQyxRQUFRLENBQUNDLGFBQWEsQ0FBQyxJQUFJQyxXQUFXLENBQUMsc0JBQXNCLENBQUMsQ0FBQztFQUNqRSxDQUFDLEVBQUUsQ0FBQ2lCLFdBQVcsRUFBRW1FLE1BQU0sQ0FBQ3NJLElBQUksRUFBRXZKLFdBQVcsRUFBRVUsU0FBUyxFQUFFQyxVQUFVLEVBQUVFLE9BQU8sRUFBRUosZUFBZSxFQUFFbkQsc0JBQXNCLENBQUMsQ0FBQztFQUVwSCxJQUFNa1QsV0FBVyxHQUFHM04scUJBQXFCLEtBQUs5TixPQUFPLENBQUNxTyxJQUFJO0VBQzFELElBQU1xTix1QkFBdUIsR0FBRzVOLHFCQUFxQixLQUFLOU4sT0FBTyxDQUFDeUosUUFBUTtFQUMxRSxJQUFNa1MsaUJBQWlCLEdBQUc3TixxQkFBcUIsS0FBSzlOLE9BQU8sQ0FBQ3dKLFFBQVE7O0VBRXBFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQSxJQUFNb1MsZ0JBQWdCLEdBQUcsQ0FBQyxFQUFFdFEsSUFBSSxhQUFKQSxJQUFJLGVBQUpBLElBQUksQ0FBRXZHLEVBQUUsSUFBSXdHLFlBQVksYUFBWkEsWUFBWSxlQUFaQSxZQUFZLENBQUUwTixTQUFTLElBQUk1TixNQUFNLGFBQU5BLE1BQU0sZUFBTkEsTUFBTSxDQUFFdEcsRUFBRSxJQUFJcUcsT0FBTyxhQUFQQSxPQUFPLGVBQVBBLE9BQU8sQ0FBRXJHLEVBQUUsQ0FBQztFQUM3RixJQUFNOFcsVUFBVSxHQUFHL04scUJBQXFCLEtBQUs5TixPQUFPLENBQUNxTyxJQUFJO0VBQ3pELElBQU15TixXQUFXLEdBQUdoTyxxQkFBcUIsS0FBSzlOLE9BQU8sQ0FBQzJKLElBQUksSUFBSWlTLGdCQUFnQjtFQUM5RSxJQUFNRyxpQkFBaUIsR0FBRzdZLG1CQUFtQixDQUFDQyxPQUFPLENBQUMsSUFBSTJZLFdBQVc7RUFDckUsSUFBTUUsdUJBQXVCLEdBQUcsQ0FBQzlZLG1CQUFtQixDQUFDQyxPQUFPLENBQUMsSUFBSTJZLFdBQVcsSUFBSTFSLHdCQUF3QjtFQUN4RyxJQUFNNlIsY0FBYyxHQUNsQixDQUFBOVEsS0FBSyxhQUFMQSxLQUFLLHVCQUFMQSxLQUFLLENBQUVpRCxJQUFJLE1BQUssY0FBYyxJQUM5QixDQUFDcEUsUUFBUSxJQUNULENBQUNtQyxPQUFPLEtBQ1AwUCxVQUFVLElBQUlFLGlCQUFpQixJQUFJQyx1QkFBdUIsQ0FBQztFQUM5RCxJQUFNRSxxQkFBcUIsR0FBR2pkLFdBQVcsQ0FBQyxZQUFNO0lBQzlDLElBQUksQ0FBQzJFLE1BQU0sQ0FBQ0Usd0NBQXdDLEVBQUU7TUFDcEQ7SUFDRjtJQUNBb0gsVUFBVSxDQUFDLENBQUM7SUFDWnJCLGdCQUFnQixDQUFDN0osT0FBTyxDQUFDd0osUUFBUSxDQUFDO0lBQ2xDeEgscUJBQXFCLENBQUMwQixJQUFJLENBQUNxQixFQUFFLEVBQUU7TUFDN0J3RSxlQUFlLEVBQUUsVUFBVTtNQUMzQmpHLGFBQWEsRUFBRXRELE9BQU8sQ0FBQ3dKLFFBQVE7TUFDL0J6RCxZQUFZLEVBQUUsSUFBSTtNQUNsQjRPLE9BQU8sRUFBRTtJQUNYLENBQUMsQ0FBQztFQUNKLENBQUMsRUFBRSxDQUFDekosVUFBVSxFQUFFeEgsSUFBSSxDQUFDcUIsRUFBRSxDQUFDLENBQUM7RUFFekIsSUFBTW9YLGdCQUFnQixHQUFHbGQsV0FBVyxDQUFDLFlBQU07SUFDekMsSUFBSSxDQUFDMkUsTUFBTSxDQUFDRSx3Q0FBd0MsRUFBRTtNQUNwRDtJQUNGO0lBQ0FtRyxXQUFXLENBQUMsS0FBSyxDQUFDO0lBQ2xCSixnQkFBZ0IsQ0FBQzdKLE9BQU8sQ0FBQ3lKLFFBQVEsQ0FBQztJQUNsQzJELGVBQWUsQ0FBQyxDQUFDO0lBQ2pCcEwscUJBQXFCLENBQUMwQixJQUFJLENBQUNxQixFQUFFLEVBQUU7TUFDN0J3RSxlQUFlLEVBQUUsVUFBVTtNQUMzQmpHLGFBQWEsRUFBRXRELE9BQU8sQ0FBQ3lKO0lBQ3pCLENBQUMsQ0FBQztFQUNKLENBQUMsRUFBRSxDQUFDMkQsZUFBZSxFQUFFMUosSUFBSSxDQUFDcUIsRUFBRSxDQUFDLENBQUM7RUFFOUIsSUFBTXFYLGlCQUFpQixHQUFHbmQsV0FBVyxjQUFBaVcsaUJBQUEsY0FBQUMsbUJBQUEsQ0FBQUMsSUFBQSxDQUFDLFNBQUFpSCxTQUFBO0lBQUEsSUFBQUMsWUFBQSxFQUFBQyxRQUFBLEVBQUEvSCxJQUFBLEVBQUFnSSxFQUFBO0lBQUEsT0FBQXJILG1CQUFBLENBQUFHLElBQUEsV0FBQW1ILFNBQUE7TUFBQSxrQkFBQUEsU0FBQSxDQUFBbkwsSUFBQSxHQUFBbUwsU0FBQSxDQUFBakgsSUFBQTtRQUFBO1VBQ3BDdkwsV0FBVyxDQUFDLEtBQUssQ0FBQztVQUNkcVMsWUFBWSxHQUFHcFEsTUFBTSxDQUFDc0ksSUFBSSxDQUFDQyxJQUFJLENBQUMsVUFBQzhHLENBQVE7WUFBQSxPQUFLL1osNkJBQTZCLENBQUMrWixDQUFDLENBQUM7VUFBQSxFQUFDO1VBQUEsSUFDOUVlLFlBQVk7WUFBQUcsU0FBQSxDQUFBakgsSUFBQTtZQUFBO1VBQUE7VUFBQWlILFNBQUEsQ0FBQW5MLElBQUE7VUFBQW1MLFNBQUEsQ0FBQWpILElBQUE7VUFBQSxPQUVVblQsU0FBUyxDQUFDO1lBQy9CcWEsSUFBSSxnREFBQTFOLE1BQUEsQ0FBZ0R6TSxVQUFVLENBQUNxQyxJQUFJLENBQUNrRyxRQUFRLENBQUMsQ0FBRTtZQUMvRTZSLE1BQU0sRUFBRTtVQUNWLENBQUMsQ0FBQztRQUFBO1VBSElKLFFBQVEsR0FBQUUsU0FBQSxDQUFBRyxJQUFBO1VBQUFILFNBQUEsQ0FBQWpILElBQUE7VUFBQSxPQUlLK0csUUFBUSxDQUFDTSxJQUFJLENBQUMsQ0FBQztRQUFBO1VBQTVCckksSUFBSSxHQUFBaUksU0FBQSxDQUFBRyxJQUFBO1VBQ1ZOLFlBQVksR0FBRyxDQUFDOUgsSUFBSSxDQUFDQSxJQUFJLElBQUksRUFBRSxFQUFFQyxJQUFJLENBQUMsVUFBQzhHLENBQVE7WUFBQSxPQUFLL1osNkJBQTZCLENBQUMrWixDQUFDLENBQUM7VUFBQSxFQUFDO1VBQUFrQixTQUFBLENBQUFqSCxJQUFBO1VBQUE7UUFBQTtVQUFBaUgsU0FBQSxDQUFBbkwsSUFBQTtVQUFBa0wsRUFBQSxHQUFBQyxTQUFBO1VBQUEsT0FBQUEsU0FBQSxDQUFBaEgsTUFBQTtRQUFBO1VBQUEsSUFLcEY2RyxZQUFZO1lBQUFHLFNBQUEsQ0FBQWpILElBQUE7WUFBQTtVQUFBO1VBQUEsT0FBQWlILFNBQUEsQ0FBQWhILE1BQUE7UUFBQTtVQUdqQjdKLFVBQVUsQ0FBQyxJQUFJLENBQUM7VUFDaEJELFNBQVMsYUFBVEEsU0FBUyxlQUFUQSxTQUFTLENBQUcsSUFBSSxDQUFDO1VBQ2pCRyxPQUFPLGFBQVBBLE9BQU8sZUFBUEEsT0FBTyxDQUFHLElBQUksQ0FBQztVQUNmYixXQUFXLENBQUNxUixZQUFZLENBQUM7VUFDekJ6UyxnQkFBZ0IsQ0FBQzdKLE9BQU8sQ0FBQzJKLElBQUksQ0FBQztVQUM5QixJQUFJaUIsb0JBQW9CLENBQUMzRixPQUFPLEVBQUU7WUFDaEMyRixvQkFBb0IsQ0FBQzNGLE9BQU8sQ0FBQyxDQUFDO1VBQ2hDO1VBQ0FqRCxxQkFBcUIsQ0FBQzBCLElBQUksQ0FBQ3FCLEVBQUUsRUFBRTtZQUM3QndFLGVBQWUsRUFBRSxTQUFTO1lBQzFCakcsYUFBYSxFQUFFdEQsT0FBTyxDQUFDMkosSUFBSTtZQUMzQmdMLE9BQU8sRUFBRTJILFlBQVksQ0FBQ3ZYLEVBQUU7WUFDeEJnQixZQUFZLEVBQUU7VUFDaEIsQ0FBQyxDQUFDO1FBQUE7UUFBQTtVQUFBLE9BQUEwVyxTQUFBLENBQUEvRyxJQUFBO01BQUE7SUFBQSxHQUFBMkcsUUFBQTtFQUFBLENBQ0gsSUFBRSxDQUFDblEsTUFBTSxDQUFDc0ksSUFBSSxFQUFFNVAsSUFBSSxDQUFDa0csUUFBUSxFQUFFRyxXQUFXLEVBQUVVLFNBQVMsRUFBRUMsVUFBVSxFQUFFRSxPQUFPLEVBQUVwSSxJQUFJLENBQUNxQixFQUFFLENBQUMsQ0FBQztFQUV0RixJQUFNK1gsMkJBQTJCLEdBQUc3ZCxXQUFXO0lBQUEsSUFBQThkLEtBQUEsR0FBQTdILGlCQUFBLGNBQUFDLG1CQUFBLENBQUFDLElBQUEsQ0FDN0MsU0FBQTRILFNBQU9DLFFBQWtDO01BQUEsSUFBQUMsYUFBQSxFQUFBQyxHQUFBO01BQUEsT0FBQWhJLG1CQUFBLENBQUFHLElBQUEsV0FBQThILFNBQUE7UUFBQSxrQkFBQUEsU0FBQSxDQUFBOUwsSUFBQSxHQUFBOEwsU0FBQSxDQUFBNUgsSUFBQTtVQUFBO1lBQUEsTUFDbkN5SCxRQUFRLENBQUMxVCxlQUFlLEtBQUssVUFBVSxJQUFJMFQsUUFBUSxDQUFDMVQsZUFBZSxLQUFLLFVBQVU7Y0FBQTZULFNBQUEsQ0FBQTVILElBQUE7Y0FBQTtZQUFBO1lBQUEsT0FBQTRILFNBQUEsQ0FBQTNILE1BQUE7VUFBQTtZQUFBLEtBS2xGd0gsUUFBUSxDQUFDdEksT0FBTztjQUFBeUksU0FBQSxDQUFBNUgsSUFBQTtjQUFBO1lBQUE7WUFBQTRILFNBQUEsQ0FBQTlMLElBQUE7WUFBQThMLFNBQUEsQ0FBQTVILElBQUE7WUFBQSxPQUVNbFQsZ0JBQWdCLENBQUMyYSxRQUFRLENBQUN0SSxPQUFPLENBQUM7VUFBQTtZQUF4RHVJLGFBQWEsR0FBQUUsU0FBQSxDQUFBUixJQUFBO1lBQUFRLFNBQUEsQ0FBQTVILElBQUE7WUFBQTtVQUFBO1lBQUE0SCxTQUFBLENBQUE5TCxJQUFBO1lBQUE2TCxHQUFBLEdBQUFDLFNBQUE7WUFFYkYsYUFBYSxHQUFHOUksU0FBUztVQUFBO1lBQUEsSUFJeEJ2RixnQkFBZ0IsQ0FBQzVKLE9BQU87Y0FBQW1ZLFNBQUEsQ0FBQTVILElBQUE7Y0FBQTtZQUFBO1lBQzNCM0csZ0JBQWdCLENBQUM1SixPQUFPLEdBQUcsSUFBSTtZQUFBbVksU0FBQSxDQUFBNUgsSUFBQTtZQUFBLE9BQ3pCakosZUFBZSxDQUFDMlEsYUFBYSxDQUFDO1VBQUE7WUFBQSxPQUFBRSxTQUFBLENBQUEzSCxNQUFBO1VBQUE7WUFJdEMsSUFBSXlILGFBQWEsRUFBRTtjQUNqQmpTLFdBQVcsQ0FBQ2lTLGFBQWEsQ0FBQztZQUM1QjtVQUFDO1VBQUE7WUFBQSxPQUFBRSxTQUFBLENBQUExSCxJQUFBO1FBQUE7TUFBQSxHQUFBc0gsUUFBQTtJQUFBLENBQ0Y7SUFBQSxpQkFBQUssRUFBQTtNQUFBLE9BQUFOLEtBQUEsQ0FBQU8sS0FBQSxPQUFBQyxTQUFBO0lBQUE7RUFBQSxLQUNELENBQUNoUixlQUFlLEVBQUV0QixXQUFXLENBQy9CLENBQUM7RUFFRCxJQUFNdVMsbUJBQW1CLEdBQUd2ZSxXQUFXO0lBQUEsSUFBQXdlLEtBQUEsR0FBQXZJLGlCQUFBLGNBQUFDLG1CQUFBLENBQUFDLElBQUEsQ0FDckMsU0FBQXNJLFNBQU9ULFFBQWtDO01BQUEsSUFBQVUscUJBQUE7TUFBQSxPQUFBeEksbUJBQUEsQ0FBQUcsSUFBQSxXQUFBc0ksU0FBQTtRQUFBLGtCQUFBQSxTQUFBLENBQUF0TSxJQUFBLEdBQUFzTSxTQUFBLENBQUFwSSxJQUFBO1VBQUE7WUFDdkM3UCxjQUFjLENBQUMsS0FBSyxDQUFDO1lBQ3JCQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUM7WUFFeEIsS0FBQStYLHFCQUFBLEdBQUlWLFFBQVEsQ0FBQ2pJLFdBQVcsY0FBQTJJLHFCQUFBLGVBQXBCQSxxQkFBQSxDQUFzQnBTLFlBQVksRUFBRTtjQUN0Q0csZUFBZSxDQUFDdVIsUUFBUSxDQUFDakksV0FBVyxDQUFDekosWUFBWSxDQUFDO1lBQ3BEO1lBQUMsTUFFRzBSLFFBQVEsQ0FBQzFULGVBQWUsS0FBSyxVQUFVO2NBQUFxVSxTQUFBLENBQUFwSSxJQUFBO2NBQUE7WUFBQTtZQUN6QzBHLHFCQUFxQixDQUFDLENBQUM7WUFDdkJ4VixjQUFjLENBQUMsQ0FBQztZQUNoQm9PLGdCQUFnQixDQUFDLENBQUM7WUFBQSxPQUFBOEksU0FBQSxDQUFBbkksTUFBQTtVQUFBO1lBQUEsTUFJaEJ3SCxRQUFRLENBQUMxVCxlQUFlLEtBQUssVUFBVTtjQUFBcVUsU0FBQSxDQUFBcEksSUFBQTtjQUFBO1lBQUE7WUFDekMyRyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQ2xCelYsY0FBYyxDQUFDLENBQUM7WUFDaEJvTyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQUEsT0FBQThJLFNBQUEsQ0FBQW5JLE1BQUE7VUFBQTtZQUFBLE1BSWhCd0gsUUFBUSxDQUFDMVQsZUFBZSxLQUFLLFNBQVM7Y0FBQXFVLFNBQUEsQ0FBQXBJLElBQUE7Y0FBQTtZQUFBO1lBQUFvSSxTQUFBLENBQUFwSSxJQUFBO1lBQUEsT0FDbEM0RyxpQkFBaUIsQ0FBQyxDQUFDO1VBQUE7WUFDekIxVixjQUFjLENBQUMsQ0FBQztZQUNoQm9PLGdCQUFnQixDQUFDLENBQUM7WUFBQSxPQUFBOEksU0FBQSxDQUFBbkksTUFBQTtVQUFBO1lBSXBCLElBQUl3SCxRQUFRLENBQUMzWixhQUFhLEtBQUt0RCxPQUFPLENBQUNxTyxJQUFJLElBQUk0TyxRQUFRLENBQUNsWCxZQUFZLEVBQUU7Y0FDcEVxQixxQkFBcUIsQ0FBQztnQkFBRUosT0FBTyxFQUFFLEVBQUU7Z0JBQUVDLFdBQVcsRUFBRTtjQUFHLENBQUMsQ0FBQztjQUN2RE8sZ0JBQWdCLENBQUN5VixRQUFRLENBQUNsWCxZQUFZLENBQUM7Y0FDdkNyRSxrQkFBa0IsQ0FBQyxDQUFDLENBQUMyVixlQUFlLENBQUM0RixRQUFRLENBQUNsWCxZQUFZLENBQUM7Y0FDM0RhLFFBQVEsQ0FBQ0MsYUFBYSxDQUFDLElBQUlDLFdBQVcsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO2NBQy9EeUQsUUFBUSxDQUFDOEQsSUFBSSxDQUFDLENBQUM7WUFDakIsQ0FBQyxNQUFNLElBQUk0TyxRQUFRLENBQUMzWixhQUFhLElBQUl2QixzQkFBc0IsQ0FBQ2tiLFFBQVEsQ0FBQzNaLGFBQWEsQ0FBQyxFQUFFO2NBQ25GdUcsZ0JBQWdCLENBQUNvVCxRQUFRLENBQUMzWixhQUF3QixDQUFDO1lBQ3JEO1lBRUFvRCxjQUFjLENBQUMsQ0FBQztZQUNoQm9PLGdCQUFnQixDQUFDLENBQUM7VUFBQTtVQUFBO1lBQUEsT0FBQThJLFNBQUEsQ0FBQWxJLElBQUE7UUFBQTtNQUFBLEdBQUFnSSxRQUFBO0lBQUEsQ0FDbkI7SUFBQSxpQkFBQUcsR0FBQTtNQUFBLE9BQUFKLEtBQUEsQ0FBQUgsS0FBQSxPQUFBQyxTQUFBO0lBQUE7RUFBQSxLQUNELENBQ0U3VyxjQUFjLEVBQ2QwVixpQkFBaUIsRUFDakJGLHFCQUFxQixFQUNyQkMsZ0JBQWdCLEVBQ2hCNVIsUUFBUSxFQUNSM0Usa0JBQWtCLEVBQ2xCOEYsZUFBZSxFQUNmb0osZ0JBQWdCLENBRXBCLENBQUM7RUFFRHpWLFNBQVMsQ0FBQyxZQUFNO0lBQ2QsSUFBTTRkLFFBQVEsR0FBRzlYLHdCQUF3QixDQUFDRixPQUFPO0lBQ2pELElBQUksQ0FBQ2dZLFFBQVEsSUFBSTdYLHdCQUF3QixDQUFDSCxPQUFPLEVBQUU7SUFDbkRHLHdCQUF3QixDQUFDSCxPQUFPLEdBQUcsSUFBSTtJQUV2Q1csa0JBQWtCLENBQUMsSUFBSSxDQUFDO0lBRXhCLElBQU1rWSxVQUFVO01BQUEsSUFBQUMsS0FBQSxHQUFBN0ksaUJBQUEsY0FBQUMsbUJBQUEsQ0FBQUMsSUFBQSxDQUFHLFNBQUE0SSxTQUFBO1FBQUEsT0FBQTdJLG1CQUFBLENBQUFHLElBQUEsV0FBQTJJLFNBQUE7VUFBQSxrQkFBQUEsU0FBQSxDQUFBM00sSUFBQSxHQUFBMk0sU0FBQSxDQUFBekksSUFBQTtZQUFBO2NBQUF5SSxTQUFBLENBQUF6SSxJQUFBO2NBQUEsT0FDWHNILDJCQUEyQixDQUFDRyxRQUFRLENBQUM7WUFBQTtjQUMzQzlYLHdCQUF3QixDQUFDRixPQUFPLEdBQUcsSUFBSTtjQUFBZ1osU0FBQSxDQUFBekksSUFBQTtjQUFBLE9BQ2pDZ0ksbUJBQW1CLENBQUNQLFFBQVEsQ0FBQztZQUFBO1lBQUE7Y0FBQSxPQUFBZ0IsU0FBQSxDQUFBdkksSUFBQTtVQUFBO1FBQUEsR0FBQXNJLFFBQUE7TUFBQSxDQUNwQztNQUFBLGdCQUpLRixVQUFVQSxDQUFBO1FBQUEsT0FBQUMsS0FBQSxDQUFBVCxLQUFBLE9BQUFDLFNBQUE7TUFBQTtJQUFBLEdBSWY7SUFFRE8sVUFBVSxDQUFDLENBQUMsU0FBTSxDQUFDO01BQUEsT0FBTTFKLFNBQVM7SUFBQSxFQUFDO0VBQ3JDLENBQUMsRUFBRSxDQUFDb0osbUJBQW1CLEVBQUVWLDJCQUEyQixFQUFFbFgsa0JBQWtCLENBQUMsQ0FBQztFQUUxRSxJQUFNc1ksNkJBQTZCLEdBQUdqZixXQUFXLENBQy9DLFVBQUMwVixPQUFlLEVBQUs7SUFDbkIvSCxXQUFXLENBQUMrSCxPQUFPLENBQUM7SUFDcEIsSUFBSSxDQUFBeEosS0FBSyxhQUFMQSxLQUFLLHVCQUFMQSxLQUFLLENBQUVwRyxFQUFFLE1BQUs0UCxPQUFPLEVBQUU7TUFDekI1SCxnQkFBZ0IsQ0FBQzRILE9BQU8sQ0FBQztJQUMzQjtFQUNGLENBQUMsRUFDRCxDQUFDeEosS0FBSyxhQUFMQSxLQUFLLHVCQUFMQSxLQUFLLENBQUVwRyxFQUFFLEVBQUU2SCxXQUFXLEVBQUVHLGdCQUFnQixDQUMzQyxDQUFDOztFQUVEO0VBQ0E7RUFDQSxJQUFNb1Isb0JBQW9CLEdBQUdyUSxxQkFBcUIsS0FBSzlOLE9BQU8sQ0FBQzJKLElBQUksSUFBSWdGLHNCQUFzQjtFQUU3RixJQUFNeVAsVUFBVSxnQkFDZHRiLEtBQUEsQ0FBQUUsU0FBQTtJQUFBcWIsUUFBQSxHQUNHNWEsdUJBQXVCLENBQUNOLE9BQU8sRUFBRU8sSUFBSSxDQUFDLElBQUksQ0FBQzhMLFVBQVUsZ0JBQ3BENU0sSUFBQSxDQUFDM0MsT0FBTztNQUNOcWUsVUFBVSxFQUFFakssUUFBUztNQUNyQmtLLE9BQU8sRUFBRSxTQUFUQSxPQUFPQSxDQUFBO1FBQUEsT0FBUTVULGtCQUFrQixDQUFDLElBQUksQ0FBQztNQUFBLENBQUM7TUFDeEM2VCxjQUFjLEVBQUV2UyxZQUFhO01BQzdCb00sa0JBQWtCLEVBQUVBLGtCQUFtQjtNQUN2QzZELHFCQUFxQixFQUFFQSxxQkFBc0I7TUFDN0NULFdBQVcsRUFBRUEsV0FBWTtNQUN6QnRTLFlBQVksRUFBRUEsWUFBYTtNQUMzQnNWLHFCQUFxQixFQUFFclYsZUFBZ0I7TUFDdkNZLFFBQVEsRUFBRVUsZUFBZ0I7TUFDMUJFLG9CQUFvQixFQUFFQSxvQkFBcUI7TUFDM0NyQixlQUFlLEVBQUVxRixzQkFBdUI7TUFDeEN1TixnQkFBZ0IsRUFBRUEsZ0JBQWlCO01BQ25DdUMsb0JBQW9CLEVBQUV0QyxpQkFBa0I7TUFDeEN1QyxzQkFBc0IsRUFBRSxDQUFDLENBQUN0RSxvQkFBcUI7TUFDL0N1RSxXQUFXLEdBQUFyYSxzQkFBQSxJQUFBQyxzQkFBQSxHQUFFTSxzQkFBc0IsQ0FBQ0csT0FBTyxjQUFBVCxzQkFBQSx1QkFBOUJBLHNCQUFBLENBQWdDYyxXQUFXLGNBQUFmLHNCQUFBLGNBQUFBLHNCQUFBLEdBQUksS0FBTTtNQUNsRXNhLFlBQVksRUFBRWpLO0lBQXdCLENBQ3ZDLENBQUMsR0FDQSxJQUFJLGVBQ1I5UixLQUFBLENBQUNsQyxhQUFhO01BQUMyTyxRQUFRLEVBQUVBLFFBQVM7TUFBQ3VQLFFBQVEsRUFBRXRQLFVBQVc7TUFBQTZPLFFBQUEsZ0JBQ3REemIsSUFBQSxDQUFDdkMsaUJBQWlCO1FBQ2hCOE8sVUFBVSxFQUFFQSxVQUFXO1FBQ3ZCNFAsa0JBQWtCLEVBQUUxUCxzQkFBdUI7UUFDM0NFLFFBQVEsRUFBRUEsUUFBUztRQUNuQnlQLFNBQVMsRUFBRXhQLFVBQVc7UUFDdEJ5UCxXQUFXLEVBQUV0TSxlQUFnQjtRQUM3QnVNLFVBQVUsRUFBRS9NLGNBQWU7UUFDM0JnTixTQUFTLEVBQUUzTixhQUFjO1FBQ3pCaEwsY0FBYyxFQUFFQSxjQUFlO1FBQy9CMEYsTUFBTSxFQUFFQSxNQUFNLENBQUNzSSxJQUFLO1FBQ3BCeEssUUFBUSxFQUFFLENBQUMsQ0FBQ3FDLFVBQVc7UUFDdkJGLE9BQU8sRUFBRUEsT0FBUTtRQUNqQkMsV0FBVyxFQUFFQSxXQUFZO1FBQ3pCZ1QsT0FBTyxFQUFFbFQsTUFBTSxDQUFDbVQsUUFBUztRQUN6QjNHLGVBQWUsRUFBRUEsZUFBZ0I7UUFDakM0RyxhQUFhLEVBQUV4UyxtQkFBb0I7UUFDbkNOLGNBQWMsRUFBRUEsY0FBZTtRQUMvQlEsY0FBYyxFQUFFQSxjQUFlO1FBQy9CMk8saUJBQWlCLEVBQUVBLGlCQUFrQjtRQUNyQzRELGdCQUFnQixFQUFFcEIsb0JBQXFCO1FBQ3ZDcUIsaUJBQWlCLEVBQUU5RCx1QkFBd0I7UUFDM0NPLGNBQWMsRUFBRUEsY0FBZTtRQUMvQndELE1BQU0sRUFBRTVHO01BQVcsQ0FDcEIsQ0FBQyxFQUNEN08sUUFBUSxnQkFDUHBILElBQUEsQ0FBQ2hELFNBQVMsSUFBRSxDQUFDLEdBQ1g2RCx1QkFBdUIsQ0FBQ04sT0FBTyxFQUFFTyxJQUFJLENBQUMsZ0JBQ3hDZCxJQUFBLENBQUM5QyxhQUFhO1FBQ1p3RCxhQUFhLEVBQUV3SyxxQkFBc0I7UUFDckN2RCxRQUFRLEVBQUFzSixhQUFBLENBQUFBLGFBQUEsS0FBT3RKLFFBQVE7VUFBRThELElBQUksRUFBRWlGLFNBQVM7VUFBRTNKLElBQUksRUFBRVksUUFBUSxDQUFDWixJQUFJO1VBQUVzQyxZQUFZLEVBQVpBO1FBQVksRUFBRztRQUM5RXNTLE9BQU8sRUFBRSxTQUFUQSxPQUFPQSxDQUFBO1VBQUEsT0FBUXRVLFdBQVcsQ0FBQyxJQUFJLENBQUM7UUFBQSxDQUFDO1FBQ2pDeVYsSUFBSSxFQUFFO1VBQUV2WSxrQkFBa0IsRUFBbEJBLGtCQUFrQjtVQUFFSSxhQUFhLEVBQWJBO1FBQWMsQ0FBRTtRQUM1Q29ZLGtCQUFrQixFQUFFaEksc0JBQXVCO1FBQzNDcEksUUFBUSxFQUFFQSxRQUFTO1FBQ25CdVAsUUFBUSxFQUFFdFAsVUFBVztRQUNyQnRELE1BQU0sRUFBRUEsTUFBTSxDQUFDc0ksSUFBSztRQUNwQm9MLGFBQWEsRUFBRXpULE9BQVE7UUFDdkIwVCxhQUFhLEVBQUUzQiw2QkFBOEI7UUFDN0M0QixxQkFBcUIsRUFBRWhULG1CQUFvQjtRQUMzQ2lULGFBQWEsRUFBRSxDQUFDLENBQUM3VCxNQUFNLENBQUNtVCxRQUFTO1FBQ2pDVyxpQkFBaUIsRUFBRTVULFdBQVk7UUFDL0I2VCxnQkFBZ0IsRUFBRXpULGNBQWU7UUFDakMwVCxhQUFhLEVBQUU5RCxpQkFBa0I7UUFDakNsUCxNQUFNLEVBQUVBLE1BQU87UUFDZkMsYUFBYSxFQUFFQSxhQUFjO1FBQzdCZ1QsYUFBYSxFQUFFNVMsV0FBWTtRQUMzQjZTLGNBQWMsRUFBRTNULGtCQUFtQjtRQUNuQzRULG1CQUFtQixFQUFFM1QsYUFBYztRQUNuQ0wsVUFBVSxFQUFFQTtNQUFXLENBQ3hCLENBQUMsZ0JBRUZ6SixJQUFBLENBQUNyQyxxQkFBcUI7UUFBQytmLGdCQUFnQixFQUFFL1YsUUFBUSxDQUFDWjtNQUFLLENBQUUsQ0FDMUQsRUFDQSxDQUFFbUUscUJBQXFCLEtBQUs5TixPQUFPLENBQUMySixJQUFJLElBQUksQ0FBQyxFQUFDdUMsTUFBTSxhQUFOQSxNQUFNLGdCQUFBekgsWUFBQSxHQUFOeUgsTUFBTSxDQUFFc0ksSUFBSSxjQUFBL1AsWUFBQSxlQUFaQSxZQUFBLENBQWNxUCxNQUFNLEtBQ2pFaEcscUJBQXFCLEtBQUs5TixPQUFPLENBQUNxTyxJQUFJLEtBQ3RDLENBQUM4UCxvQkFBb0IsSUFDckIsQ0FBQ25VLFFBQVEsSUFDVCxDQUFDbUMsT0FBTyxJQUNSMUksdUJBQXVCLENBQUNOLE9BQU8sRUFBRU8sSUFBSSxDQUFDLGlCQUNwQ2QsSUFBQSxDQUFDdEIsaUJBQWlCO1FBQ2hCNkosS0FBSyxFQUFFQSxLQUFNO1FBQ2I2TSxpQkFBaUIsRUFBRUEsaUJBQWtCO1FBQ3JDdUksb0JBQW9CLEVBQUVoWSxzQkFBdUI7UUFDN0NJLFdBQVcsRUFBRUEsV0FBWTtRQUN6QkksU0FBUyxFQUFFQSxTQUFVO1FBQ3JCeVgsTUFBTSxFQUFFalosYUFBYztRQUN0QkksVUFBVSxFQUFFQSxVQUFXO1FBQ3ZCb0UsYUFBYSxFQUFFQSxhQUFjO1FBQzdCc08sb0JBQW9CLEVBQUVBLG9CQUFxQjtRQUMzQ29HLG1CQUFtQixFQUFFM0Ysb0NBQXFDO1FBQzFEM0wsVUFBVSxFQUFFQTtNQUFXLENBQ3hCLENBQ0Y7SUFBQSxDQUNVLENBQUM7RUFBQSxDQUNoQixDQUNIO0VBRUQsSUFBTXNCLGNBQWMsZ0JBQ2xCN04sSUFBQSxDQUFDL0Isb0JBQW9CO0lBQUMwTyxRQUFRLEVBQUVBLFFBQVM7SUFBQ3VQLFFBQVEsRUFBRXRQLFVBQVc7SUFBQ2tSLEdBQUcsRUFBRWpSLGlCQUFrQjtJQUFBNE8sUUFBQSxFQUNwRkQ7RUFBVSxDQUNTLENBQ3ZCO0VBRUQsT0FDRXRQLFFBQVEsaUJBQ1J2UCxRQUFRLENBQUNvaEIsWUFBWSxjQUNuQjdkLEtBQUEsQ0FBQy9CLGFBQWE7SUFDWndPLFFBQVEsRUFBRUEsUUFBUztJQUNuQkosVUFBVSxFQUFFQSxVQUFXO0lBQ3ZCVSxZQUFZLEVBQUU2QyxvQkFBcUI7SUFDbkNrTyxRQUFRLEVBQUV6ZCxPQUFPLEtBQUssTUFBTztJQUM3QjBkLFVBQVUsRUFBRW5iLFdBQVk7SUFBQTJZLFFBQUEsZ0JBRXhCemIsSUFBQSxDQUFDOUIsbUJBQW1CO01BQUNnZ0IsT0FBTyxFQUFFcGIsV0FBWTtNQUFBMlksUUFBQSxlQUN4Q3piLElBQUEsQ0FBQ3hCLG1CQUFtQjtRQUFDMmYsSUFBSSxFQUFFOVEsVUFBVztRQUFDVixRQUFRLEVBQUVBLFFBQVM7UUFBQThPLFFBQUEsRUFDdkQ1TjtNQUFjLENBQ0k7SUFBQyxDQUNILENBQUMsRUFDckIvSyxXQUFXLGlCQUNWOUMsSUFBQSxDQUFDNUIsaUJBQWlCO01BQ2hCOEUsV0FBVyxFQUFFQSxXQUFZO01BQ3pCNkMsV0FBVyxFQUFFM0MsZUFBZ0I7TUFDN0JnYixTQUFTLEVBQUVoTDtJQUEyQixDQUN2QyxDQUNGLEVBQ0F2SSxrQkFBa0IsaUJBQ2pCN0ssSUFBQSxDQUFDcEMsYUFBYTtNQUNabU0sUUFBUSxFQUFFQSxRQUFTO01BQ25CRSxXQUFXLEVBQUVBLFdBQVk7TUFDekJELFdBQVcsRUFBRUEsV0FBWTtNQUN6QkUsbUJBQW1CLEVBQUVBLG1CQUFvQjtNQUN6Q0MsZ0JBQWdCLEVBQUVBO0lBQWlCLENBQ3BDLENBQ0YsRUFDQVUsa0JBQWtCLGlCQUNqQjdLLElBQUEsQ0FBQ25DLGFBQWE7TUFBQzRNLFFBQVEsRUFBRUEsUUFBUztNQUFDQyxpQkFBaUIsRUFBRUEsaUJBQWtCO01BQUNDLFdBQVcsRUFBRUE7SUFBWSxDQUFFLENBQ3JHLEVBQ0FFLGtCQUFrQixpQkFBSTdLLElBQUEsQ0FBQ2xDLHFCQUFxQixJQUFFLENBQUMsZUFDaERrQyxJQUFBLENBQUN0QyxRQUFRLElBQUUsQ0FBQztFQUFBLENBQ0MsQ0FBQyxFQUNoQndPLFFBQ0YsQ0FBQztBQUVMLENBQUMiLCJpZ25vcmVMaXN0IjpbXX0=
1504
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZU1lbW8iLCJ1c2VTdGF0ZSIsInVzZVJlZiIsInVzZUVmZmVjdCIsInVzZUxheW91dEVmZmVjdCIsIlJlYWN0RE9NIiwibW9tZW50IiwidXNlVHJhbnNsYXRpb24iLCJ1c2VVc2VyIiwiY2FuQWNjZXNzVG9DaGF0QUkiLCJNQUlBRXJyb3IiLCJ1c2VNYWlhVGFza1BhbmVsWkluZGV4IiwiQ2hhdEFJQ29udGVudCIsImJ1aWxkSGFuZGxlcnMiLCJvcHRpb25zIiwiU2lkZWJhciIsInVzZUdldEFnZW50cyIsInVzZUdldFNraWxscyIsInVzZUdsb2JhbENvbnRleHQiLCJDaGF0QUlNb2RhbEhlYWRlciIsIlNuYWNrYmFyIiwiUHJvamVjdFN1bW1hcnlDb250ZW50IiwiQWJtQWdlbnRNb2RhbCIsIkFibVNraWxsTW9kYWwiLCJBYm1Ta2lsbEdlbmVyYXRlTW9kYWwiLCJTRUNUSU9OUyIsIlNDQ0FJTUNvbnRlbnQiLCJTQ0NBSU1Db250ZW50V3JhcHBlciIsIlNDQ0FJTU1pbmltaXplZEhpZGUiLCJTQ0NBSU1XcmFwcGVyIiwiTWFpYU1pbmltaXplZFBpbGwiLCJnZXRNYWlhRmxvYXRpbmdQYW5lbFdpZHRoUHgiLCJyZXNvbHZlSW5pdGlhbE1haWFDaGF0TGF5b3V0TW9kZSIsInNldFN0b3JlZE1haWFDaGF0TGF5b3V0TW9kZSIsIkZsb2F0aW5nUGFuZWxNb3Rpb24iLCJ1c2VGbG9hdGluZ1BhbmVsRHJhZ1RpbHQiLCJDaGF0QWlNb2RhbEZvb3RlciIsInZhbGlkYXRlSXNNYWlhIiwiaXNNYXJrZXRwbGFjZUdsb2JhbENsb25lQWdlbnQiLCJ1c2VGYXFzU3RvcmUiLCJnZXRDaGF0c1N0b3JlU3RhdGUiLCJ1c2VDaGF0c1N0b3JlIiwicmVhZExhc3RBY3RpdmVDaGF0SWQiLCJ3cml0ZUxhc3RBY3RpdmVDaGF0SWQiLCJjbGVhck1haWFQYW5lbFNlc3Npb24iLCJpc1ZhbGlkTWFpYVBhbmVsT3B0aW9uIiwicGF0Y2hNYWlhUGFuZWxTZXNzaW9uIiwicmVhZE1haWFQYW5lbFNlc3Npb24iLCJ3cml0ZU1haWFQYW5lbFNlc3Npb24iLCJ1c2VTZXNzaW9uc1N0b3JlIiwiaXNBY3RpdmVTZXNzaW9uU3RhdHVzIiwiZmV0Y2hNYWlhIiwiZmV0Y2hBZ2VudERldGFpbCIsIm1hcENPUkxhbmciLCJFVkVOVFMiLCJ1c2VFdmVudCIsIk1BSUFfT1BFTl9GUk9NX0hPU1RfRVZFTlQiLCJqc3giLCJfanN4IiwianN4cyIsIl9qc3hzIiwiRnJhZ21lbnQiLCJfRnJhZ21lbnQiLCJMRUdBQ1lfQ09OVEVYVF9FTlRJVElFUyIsImlzR2xvYmFsTWFpYVNlY3Rpb24iLCJzZWN0aW9uIiwicmVzb2x2ZUFpQ2hhdEJhY2tEZXN0aW5hdGlvbiIsImFnZW50VHlwZSIsImN1cnJlbnRPcHRpb24iLCJob21lT3B0aW9uIiwiSURfTU9EQUxfQ0hBVF9BR0VOVCIsInZhbGlkYXRlQWNjZXNzQnlGZWF0dXJlIiwidXNlciIsIkJvb2xlYW4iLCJ3aW5kb3ciLCJNQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1MiLCJNQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1NfTVVMVElfQUdFTlRTIiwiQ2hhdEFJTW9kYWwiLCJfc2F2ZWRTZXNzaW9uT25Nb3VudFIiLCJfc2F2ZWRTZXNzaW9uT25Nb3VudFIyIiwiX3NhdmVkU2Vzc2lvbk9uTW91bnRSMyIsIl9zYXZlZFNlc3Npb25Pbk1vdW50UjQiLCJfdXNlciRwZXJtaXNzaW9ucyIsIl91c2VyJHBlcm1pc3Npb25zMiIsIl91c2VyJHBlcm1pc3Npb25zMyIsIl9zYXZlZFNlc3Npb25Pbk1vdW50UjciLCJfc2F2ZWRTZXNzaW9uT25Nb3VudFI4IiwiX2FnZW50cyRkYXRhIiwiX3VzZVRyYW5zbGF0aW9uIiwiYWJtQWdlbnQiLCJpMThuIiwiYW1wbGl0dWRFdmVudCIsInNhdmVkU2Vzc2lvbk9uTW91bnRSZWYiLCJpZCIsInNob3VsZFJlc3RvcmVFeHBhbmRlZCIsImN1cnJlbnQiLCJpc0V4cGFuZGVkIiwicGVuZGluZ1Nlc3Npb25SZXN0b3JlUmVmIiwic2Vzc2lvblJlc3RvcmVTdGFydGVkUmVmIiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5IiwiaXNSZXN0b3JpbmdTZXNzaW9uIiwic2V0SXNSZXN0b3JpbmdTZXNzaW9uIiwic2lkZWJhck9wZW5SZWYiLCJzaWRlYmFyT3BlbiIsIl91c2VTdGF0ZTMiLCJfdXNlU3RhdGU0IiwiaXNNaW5pbWl6ZWQiLCJzZXRJc01pbmltaXplZCIsInNldENoYXRWaWV3VmlzaWJsZSIsInN0YXRlIiwidW5yZWFkQ291bnQiLCJhY3RpdmVDaGF0SWQiLCJoYXNBY3RpdmVTdHJlYW0iLCJPYmplY3QiLCJ2YWx1ZXMiLCJtZXRhIiwic29tZSIsInN0YXR1cyIsImdvVG9DaGF0UmVmIiwiZ29Ib21lUmVmIiwiaGFuZGxlTWluaW1pemUiLCJhaUNoYXRNaW5pbWl6ZSIsImZvY3VzQ2hhdElucHV0Iiwic2V0VGltZW91dCIsImRvY3VtZW50IiwiZGlzcGF0Y2hFdmVudCIsIkN1c3RvbUV2ZW50IiwiX3VzZVN0YXRlNSIsIm1lc3NhZ2UiLCJhdHRhY2htZW50cyIsIl91c2VTdGF0ZTYiLCJ1c2VySW5pdGlhbE1lc3NhZ2UiLCJzZXRVc2VySW5pdGlhbE1lc3NhZ2UiLCJfdXNlU3RhdGU3IiwiX3VzZVN0YXRlOCIsImluaXRpYWxDaGF0SWQiLCJzZXRJbml0aWFsQ2hhdElkIiwiX3VzZVN0YXRlOSIsIl91c2VTdGF0ZTAiLCJuZXdDaGF0S2V5Iiwic2V0TmV3Q2hhdEtleSIsIl91c2VTdGF0ZTEiLCJfdXNlU3RhdGUxMCIsInNlc3Npb25NZXRhIiwic2V0U2Vzc2lvbk1ldGEiLCJfdXNlU3RhdGUxMSIsIl91c2VTdGF0ZTEyIiwic2VuZE1lc3NhZ2VGdW5jdGlvbiIsInNldFNlbmRNZXNzYWdlRnVuY3Rpb24iLCJfdXNlU3RhdGUxMyIsIl91c2VTdGF0ZTE0Iiwic3RvcEdlbmVyYXRpb25GdW5jdGlvbiIsInNldFN0b3BHZW5lcmF0aW9uRnVuY3Rpb24iLCJfdXNlU3RhdGUxNSIsIl91c2VTdGF0ZTE2IiwiaXNTdHJlYW1pbmciLCJzZXRJc1N0cmVhbWluZyIsIl91c2VTdGF0ZTE3IiwiX3VzZVN0YXRlMTgiLCJpc1dyaXRpbmciLCJzZXRJc1dyaXRpbmciLCJfdXNlU3RhdGUxOSIsIl91c2VTdGF0ZTIwIiwicmVmZXRjaENoYXRzIiwic2V0UmVmZXRjaENoYXRzIiwiX3VzZVN0YXRlMjEiLCJzYXZlZCIsImFnZW50c05hdkFjdGl2ZSIsIm15QWdlbnRzIiwibXlTa2lsbHMiLCJzYXZlZE9wdGlvbiIsImhvbWUiLCJfdXNlU3RhdGUyMiIsInNldEN1cnJlbnRPcHRpb24iLCJfdXNlU3RhdGUyMyIsIl91c2VTdGF0ZTI0IiwiaGFzRXJyb3IiLCJzZXRIYXNFcnJvciIsIl91c2VTdGF0ZTI1IiwiX3VzZVN0YXRlMjYiLCJkaWRSZXNldENvbnRleHRJblNlY3Rpb24iLCJzZXREaWRSZXNldENvbnRleHRJblNlY3Rpb24iLCJwcmV2SGFzUGlubmVkQ29udGV4dFJlZiIsImhhbmRsZXJzIiwiX3VzZVN0YXRlMjciLCJfdXNlU3RhdGUyOCIsInNpZGViYXJIYXNFcnJvciIsInNldFNpZGViYXJIYXNFcnJvciIsInJlc2V0U2VsZWN0ZWRDaGF0UmVmIiwibGFuZyIsImxhbmd1YWdlIiwibG9jYWxlIiwiX3VzZUdsb2JhbENvbnRleHQiLCJzZWxlY3RBZ2VudCIsImNsZWFyQWdlbnQiLCJhZ2VudCIsInByb2plY3QiLCJjbGllbnQiLCJ0YXNrIiwiY2hpcHNQcm9qZWN0IiwidG9nZ2xlV2ViU2VhcmNoIiwiaXNXZWJTZWFyY2hBY3RpdmUiLCJzZXRDaGlwc1Byb2plY3QiLCJzZXRDbGllbnQiLCJzZXRQcm9qZWN0IiwiYmFubmVyRW50cnlGYXEiLCJzZXRUYXNrIiwidG9vbHRpcFpJbmRleCIsIl91c2VHZXRBZ2VudHMiLCJoYW5kbGVHb0hvbWUiLCJhZ2VudHMiLCJsb2FkaW5nIiwibG9hZGluZ01vcmUiLCJhZ2VudEVycm9yIiwiZXJyb3IiLCJoYW5kbGVHZXRBZ2VudHMiLCJsb2FkTW9yZUFnZW50cyIsInNlYXJjaEN1c3RvbUFnZW50cyIsInNlYXJjaExvYWRpbmciLCJhZGRBZ2VudCIsInJlbW92ZUFnZW50IiwidXBkYXRlQWdlbnQiLCJ1cGRhdGVBZ2VudEZhdm9yaXRlIiwic2VsZWN0Rmlyc3RBZ2VudCIsInNvcnRBZ2VudHNMaXN0IiwiX3VzZUdldFNraWxscyIsInNraWxscyIsImxvYWRpbmdTa2lsbHMiLCJoYW5kbGVHZXRTa2lsbHMiLCJhZGRTa2lsbCIsInVwZGF0ZVNraWxsSW5MaXN0IiwicmVtb3ZlU2tpbGwiLCJpc01BSUEiLCJ1c2VySGFzUGVybWlzc2lvbnMiLCJwZXJtaXNzaW9ucyIsImFpX2FnZW50cyIsImNyZWF0ZSIsImVkaXQiLCJjb21wdXRlZEN1cnJlbnRPcHRpb24iLCJpc0dsb2JhbFNwZWNpYWxpc3QiLCJlbnRpdHkiLCJpc1Byb2plY3RTcGVjaWFsaXN0IiwiaXNDbGllbnRTcGVjaWFsaXN0IiwiaXNNYWlha2VyIiwidHlwZSIsImNoYXQiLCJzaG91bGRTaG93UHJvamVjdFNlbGVjdG9yIiwic2hvdWxkU2hvd0NsaWVudFNlbGVjdG9yIiwicHJvamVjdFNlbGVjdG9yIiwiY2xpZW50U2VsZWN0b3IiLCJuYW1lIiwiaXNNYWlha2VyQWdlbnRTZWxlY3RlZCIsInNpZGViYXJBZ2VudHNOYXZBY3RpdmUiLCJhZ2VudHNGZXRjaGVkUmVmIiwic2VsZWN0b3IiLCJxdWVyeVNlbGVjdG9yIiwiY29uY2F0IiwiX3VzZVN0YXRlMjkiLCJfdXNlU3RhdGUzMCIsImxheW91dE1vZGUiLCJzZXRMYXlvdXRNb2RlIiwiaGFuZGxlTGF5b3V0TW9kZUNoYW5nZSIsIm1vZGUiLCJleHBhbmRlZCIsImlzRmxvYXRpbmciLCJjb250ZW50V3JhcHBlclJlZiIsIl91c2VTdGF0ZTMxIiwiX3NhdmVkU2Vzc2lvbk9uTW91bnRSNSIsIl9zYXZlZFNlc3Npb25Pbk1vdW50UjYiLCJkcmFnUG9zaXRpb24iLCJfdXNlU3RhdGUzMiIsInNldERyYWdQb3NpdGlvbiIsIl91c2VGbG9hdGluZ1BhbmVsRHJhZyIsInRpbHRNb3Rpb24iLCJzdGFydFBvaW50ZXJUcmFja2luZyIsInNhbXBsZVBvaW50ZXJNb3ZlIiwiZW5kUG9pbnRlclRyYWNraW5nIiwiZHJhZ1N0YXRlUmVmIiwiY2xhbXBEcmFnUG9zaXRpb24iLCJ4IiwieSIsImNvbnRlbnRXcmFwcGVyIiwiX2NvbnRlbnRXcmFwcGVyJGdldEJvIiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0Iiwid2lkdGgiLCJoZWlnaHQiLCJvZmZzZXQiLCJtYXhYIiwiTWF0aCIsIm1heCIsImlubmVyV2lkdGgiLCJtYXhZIiwiaW5uZXJIZWlnaHQiLCJtaW4iLCJwcmV2IiwicGFkIiwiaGFuZGxlRHJhZ0VuZCIsImV2ZW50IiwiX2RyYWdTdGF0ZVJlZiRjdXJyZW50IiwicG9pbnRlcklkIiwiYm9keSIsInN0eWxlIiwidXNlclNlbGVjdCIsImN1cnNvciIsInJlY3QiLCJsZWZ0IiwidG9wIiwiaGFuZGxlRHJhZ01vdmUiLCJkcmFnU3RhdGUiLCJjbGllbnRYIiwiY2xpZW50WSIsIm5leHRQb3NpdGlvbiIsIm9mZnNldFgiLCJvZmZzZXRZIiwicmVzb2x2ZWREcmFnUG9zaXRpb24iLCJoYW5kbGVEcmFnU3RhcnQiLCJidXR0b24iLCJ0YXJnZXQiLCJjbG9zZXN0IiwiaW5pdGlhbFBvc2l0aW9uIiwicG9pbnRlck9mZnNldFgiLCJwb2ludGVyT2Zmc2V0WSIsImN1cnJlbnRUYXJnZXQiLCJzZXRQb2ludGVyQ2FwdHVyZSIsInByZXZlbnREZWZhdWx0IiwiYWlDaGF0RHJhZ2dhYmxlIiwic3RhcnRDaGF0IiwiZmFxSWQiLCJhZ2VudFN1Z2dlc3Rpb25JZCIsIm1lbnRpb25zIiwiZnVhSWQiLCJzY0lkIiwiY29udGV4dERhdGEiLCJfb2JqZWN0U3ByZWFkIiwibGVuZ3RoIiwiYmFubmVyRmFxQXV0b1NlbnRSZWYiLCJfYmFubmVyRW50cnlGYXEkZmFxVGkiLCJlbnRpdHlSZWFkeSIsImZhcVRpdGxlIiwidHJpbSIsInVuZGVmaW5lZCIsImdvVG9DaGF0Iiwic2Vzc2lvbkV4dGVybmFsSWQiLCJzZWxlY3RlZEFnZW50IiwiZGF0YSIsImZpbmQiLCJhZ2VudEl0ZW0iLCJhZ2VudElkIiwiaGFuZGxlU2lkZWJhck9wZW5DaGFuZ2UiLCJvcGVuIiwic3luY1BhbmVsU2Vzc2lvbiIsIl9hZ2VudCRpZCIsImhvc3RDb250ZXh0IiwiZW5zdXJlQWdlbnRzTG9hZGVkIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJfcmVnZW5lcmF0b3JSdW50aW1lIiwibWFyayIsIl9jYWxsZWUiLCJ3cmFwIiwiX2NvbnRleHQiLCJuZXh0IiwiYWJydXB0Iiwic3RvcCIsInRpbWVyIiwiY2xlYXJUaW1lb3V0Iiwib25QYWdlSGlkZSIsImFkZEV2ZW50TGlzdGVuZXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiaGFuZGxlUmVzdG9yZUZyb21NaW5pbWl6ZWQiLCJhaUNoYXRPcGVuIiwib3B0aW9uIiwidGhlbiIsIl9jaGF0cyRmaW5kIiwiX2dldENoYXRzU3RvcmVTdGF0ZSIsImNoYXRzIiwibGFzdEFjdGl2ZUNoYXRJZCIsImlzUmVhZCIsIl9nb1RvQ2hhdFJlZiRjdXJyZW50IiwiY2FsbCIsIl9nb0hvbWVSZWYkY3VycmVudCIsImFwcGx5RXhwYW5kZWRIb3N0VGFrZW92ZXIiLCJkZXRhaWwiLCJfcmVzZXRTZWxlY3RlZENoYXRSZWYiLCJfYWdlbnQkaWQyIiwiX2RldGFpbCRwcm9qZWN0MiIsIl9kZXRhaWwkY2xpZW50MiIsIl9kZXRhaWwkdGFzazIiLCJnZXRTdGF0ZSIsImNsZWFyRmFxcyIsInNldEFjdGl2ZUNoYXRJZCIsIl9kZXRhaWwkcHJvamVjdCIsIl9kZXRhaWwkY2xpZW50IiwiX2RldGFpbCR0YXNrIiwibmV4dExheW91dCIsImZhcSIsImhhbmRsZVNlbmRNZXNzYWdlUmVhZHkiLCJzZW5kTWVzc2FnZSIsInN0b3BHZW5lcmF0aW9uIiwic3RyZWFtaW5nIiwid3JpdGluZyIsImhhbmRsZVNlbmRNZXNzYWdlIiwiaXNfZGVsZXRlZCIsImhhc19ub3RfcGVybWlzc2lvbnMiLCJoYXNfbm90X2FjY2VzcyIsInByb2plY3RfZGVsZXRlZCIsImhhbmRsZVN0YXJ0TmV3Q2hhdCIsImZyb21NeUFnZW50cyIsImZyb21NYWlha2VySG9tZSIsIl9yZXNldFNlbGVjdGVkQ2hhdFJlZjIiLCJmaXJzdEFnZW50IiwiaGFuZGxlUmVzZXRDaGF0IiwiX2NhbGxlZTIiLCJfY29udGV4dDIiLCJoYW5kbGVCYWNrIiwidG8iLCJhaUNoYXRCYWNrIiwicGlubmVkIiwicHJvamVjdElkIiwid2FzUGlubmVkIiwib25NZXJnZUNyZWF0ZWRBZ2VudCIsImV2dCIsIl9yZWYzIiwibmV4dEFnZW50IiwibmF2aWdhdGVIb21lIiwib25TeW5jRWRpdGVkQWdlbnQiLCJfcmVmNCIsIm9wZW5DaGF0VmlldyIsIm9wZW5Ib21lIiwiY2xpZW50SWQiLCJvcGVuRnJvbUhvc3QiLCJfcmVmNSIsIm9wZW5OZXdDaGF0V2l0aEFnZW50IiwiX2RldGFpbCRwcm9qZWN0MyIsIl9kZXRhaWwkY2xpZW50MyIsIl9yZWY2Iiwib25TZXNzaW9uTWV0YSIsIl9yZWY3IiwibGVnYWN5Q29udGV4dFNlc3Npb24iLCJhZ2VudEVudGl0eSIsImluY2x1ZGVzIiwiY29udGV4dE5hbWUiLCJ0YXNrTmFtZSIsInByb2plY3ROYW1lIiwiY2xpZW50TmFtZSIsImVudGl0eVR5cGUiLCJpc19sZWdhY3lfY29udGV4dCIsImhhbmRsZUNvbnRpbnVlTGVnYWN5Q29udGV4dEluTmV3Q2hhdCIsInBJZCIsInBOYW1lIiwiY0lkIiwiY05hbWUiLCJ0SWQiLCJ0YXNrSWQiLCJ0TmFtZSIsIm9yY2hlc3RyYXRvciIsImEiLCJTdHJpbmciLCJzaG93TmV3Q2hhdCIsImhpZGVIZWFkZXJBZ2VudFNlbGVjdG9yIiwiaXNNeUFnZW50c1NlY3Rpb24iLCJoYXNQaW5uZWRDb250ZXh0IiwiaXNDaGF0VmlldyIsImlzSG9tZVN0ZXAyIiwiaXNIZWFkZXJIb21lU3RlcDIiLCJpc1NlY3Rpb25SZXNldEhvbWVTdGVwMiIsInNob3dCYWNrQnV0dG9uIiwiaGFuZGxlT3Blbk1hcmtldHBsYWNlIiwiX2NhbGxlZTMiLCJfY29udGV4dDMiLCJoYW5kbGVPcGVuU2tpbGxzIiwiaGFuZGxlR29Ub01haWFrZXIiLCJfY2FsbGVlNCIsIm1haWFrZXJBZ2VudCIsInJlc3BvbnNlIiwiX3QiLCJfY29udGV4dDQiLCJwYXRoIiwibWV0aG9kIiwic2VudCIsImpzb24iLCJsb2FkQWdlbnRzRm9yU2Vzc2lvblJlc3RvcmUiLCJfcmVmMCIsIl9jYWxsZWU1Iiwic25hcHNob3QiLCJhZ2VudFRvU2VsZWN0IiwiX3QyIiwiX2NvbnRleHQ1IiwiX3giLCJhcHBseSIsImFyZ3VtZW50cyIsImFwcGx5U2Vzc2lvblJlc3RvcmUiLCJfcmVmMSIsIl9jYWxsZWU2IiwiX3NuYXBzaG90JGhvc3RDb250ZXh0IiwiX2NvbnRleHQ2IiwiX3gyIiwicnVuUmVzdG9yZSIsIl9yZWYxMCIsIl9jYWxsZWU3IiwiX2NvbnRleHQ3IiwiZmluaXNoIiwiaGFuZGxlRGVsZXRlQWdlbnRGcm9tTXlBZ2VudHMiLCJpc01haWFrZXJDcmVhdG9ySG9tZSIsIm1vZGFsUGFuZWwiLCJjaGlsZHJlbiIsIm9uR29Ub0NoYXQiLCJvbkVycm9yIiwiaGFuZGxlR29Ub0hvbWUiLCJoYW5kbGVTZXRSZWZldGNoQ2hhdHMiLCJvbk9wZW5NYWlha2VyQ3JlYXRvciIsImlzTGVnYWN5Q29udGV4dFNlc3Npb24iLCJpbml0aWFsT3BlbiIsIm9uT3BlbkNoYW5nZSIsImZsb2F0aW5nIiwib25MYXlvdXRNb2RlQ2hhbmdlIiwiZHJhZ2dhYmxlIiwib25EcmFnU3RhcnQiLCJvbkRyYWdNb3ZlIiwib25EcmFnRW5kIiwiaGFzTW9yZSIsImhhc19tb3JlIiwib25BZ2VudFVwZGF0ZSIsImlzTWFpYWtlclNlY3Rpb24iLCJoaWRlQWdlbnRTZWxlY3RvciIsIm9uQmFjayIsInJlZnMiLCJvblNlbmRNZXNzYWdlUmVhZHkiLCJsb2FkaW5nQWdlbnRzIiwib25EZWxldGVBZ2VudCIsIm9uRmF2b3JpdGVBZ2VudFVwZGF0ZSIsImhhc01vcmVBZ2VudHMiLCJsb2FkaW5nTW9yZUFnZW50cyIsIm9uTG9hZE1vcmVBZ2VudHMiLCJvbkdvVG9NYWlha2VyIiwib25EZWxldGVTa2lsbCIsIm9uU2VhcmNoQWdlbnRzIiwic2VhcmNoTG9hZGluZ0FnZW50cyIsIm9uUmVzdGFydFN1bW1hcnkiLCJoYW5kbGVTdG9wR2VuZXJhdGlvbiIsImNoYXRJZCIsIm9uQ29udGludWVJbk5ld0NoYXQiLCJyZWYiLCJjcmVhdGVQb3J0YWwiLCJlbGV2YXRlZCIsIiRtaW5pbWl6ZWQiLCIkaGlkZGVuIiwidGlsdCIsIm9uUmVzdG9yZSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL21vbGVjdWxlcy9DaGF0QUlNb2RhbC9DaGF0QUlNb2RhbC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tbmVzdGVkLXRlcm5hcnkgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9pbmRlbnQgKi9cbi8qIGVzbGludC1kaXNhYmxlIHJlYWN0L2pzeC1uby11c2VsZXNzLWZyYWdtZW50ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG4vKiBlc2xpbnQtZGlzYWJsZSByZWFjdC9uby1hcnJheS1pbmRleC1rZXkgKi9cbi8qIGVzbGludC1kaXNhYmxlIGpzeC1hMTF5L2NsaWNrLWV2ZW50cy1oYXZlLWtleS1ldmVudHMgKi9cbi8qIGVzbGludC1kaXNhYmxlIGpzeC1hMTF5L25vLXN0YXRpYy1lbGVtZW50LWludGVyYWN0aW9ucyAqL1xuLyogZXNsaW50LWRpc2FibGUgcmVhY3QvZnVuY3Rpb24tY29tcG9uZW50LWRlZmluaXRpb24gKi9cbi8qIGVzbGludC1kaXNhYmxlIHJlYWN0L3JlcXVpcmUtZGVmYXVsdC1wcm9wcyAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tY29uc29sZSAqL1xuaW1wb3J0IHtcbiAgdXNlQ2FsbGJhY2ssXG4gIHVzZU1lbW8sXG4gIHVzZVN0YXRlLFxuICB1c2VSZWYsXG4gIHVzZUVmZmVjdCxcbiAgdXNlTGF5b3V0RWZmZWN0LFxuICBQb2ludGVyRXZlbnQgYXMgUmVhY3RQb2ludGVyRXZlbnQsXG59IGZyb20gJ3JlYWN0J1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gJ3JlYWN0LWRvbSdcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50J1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICdyZWFjdC1pMThuZXh0J1xuaW1wb3J0IHsgdXNlVXNlciB9IGZyb20gJy4uLy4uLy4uL2NvbnRleHQvY29yLXVzZXInXG5pbXBvcnQgeyBjYW5BY2Nlc3NUb0NoYXRBSSB9IGZyb20gJy4uLy4uLy4uL2NvbnN0YW50cy9wZXJtaXNzaW9ucydcbmltcG9ydCB7IE1BSUFFcnJvciB9IGZyb20gJy4uLy4uL2F0b21zL01BSUFFcnJvcidcbmltcG9ydCB7IHVzZU1haWFUYXNrUGFuZWxaSW5kZXggfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VNYWlhVGFza1BhbmVsWkluZGV4J1xuXG5pbXBvcnQgeyBDaGF0QUlDb250ZW50IH0gZnJvbSAnLi4vQ2hhdEFJQ29udGVudCdcbmltcG9ydCB7IGJ1aWxkSGFuZGxlcnMsIG9wdGlvbnMgfSBmcm9tICcuL2NvbnN0YW50cydcbmltcG9ydCB7IFNpZGViYXIgfSBmcm9tICcuLi9TaWRlYmFyJ1xuaW1wb3J0IHsgdXNlR2V0QWdlbnRzIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbWFpYS9BZ2VudHMvZ2V0QWdlbnRzJ1xuaW1wb3J0IHsgdXNlR2V0U2tpbGxzIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbWFpYS9Ta2lsbHMvZ2V0U2tpbGxzJ1xuaW1wb3J0IHsgdXNlR2xvYmFsQ29udGV4dCwgdHlwZSBTZWN0aW9uIH0gZnJvbSAnLi4vLi4vLi4vY29udGV4dC9nbG9iYWwtY29udGV4dCdcbmltcG9ydCB7IEF0dGFjaG1lbnRGaWxlIH0gZnJvbSAnLi4vQ2hhdEZvb3Rlci9DaGF0Rm9vdGVyJ1xuaW1wb3J0IHsgQ29udGV4dE1lbnRpb24gfSBmcm9tICcuLi8uLi8uLi90eXBlcy9jb250ZXh0TWVudGlvbidcbmltcG9ydCB7IENoYXRBSU1vZGFsSGVhZGVyIH0gZnJvbSAnLi9jb21wb25lbnRzL0NoYXRBaU1vZGFsSGVhZGVyL0NoYXRBaU1vZGFsSGVhZGVyJ1xuaW1wb3J0IHsgU25hY2tiYXIgfSBmcm9tICcuLi8uLi9vcmdhbmlzbXMvU25hY2tCYXIvU25hY2tiYXInXG5pbXBvcnQgeyBQcm9qZWN0U3VtbWFyeUNvbnRlbnQgfSBmcm9tICcuLi9Qcm9qZWN0U3VtbWFyeUNvbnRlbnQnXG5pbXBvcnQgeyBBYm1BZ2VudE1vZGFsIH0gZnJvbSAnLi4vLi4vb3JnYW5pc21zL0FibUFnZW50TW9kYWwvQWJtQWdlbnRNb2RhbCdcbmltcG9ydCB7IEFibVNraWxsTW9kYWwgfSBmcm9tICcuLi8uLi9vcmdhbmlzbXMvQWJtU2tpbGxNb2RhbC9BYm1Ta2lsbE1vZGFsJ1xuaW1wb3J0IHsgQWJtU2tpbGxHZW5lcmF0ZU1vZGFsIH0gZnJvbSAnLi4vLi4vb3JnYW5pc21zL0FibVNraWxsR2VuZXJhdGVNb2RhbC9BYm1Ta2lsbEdlbmVyYXRlTW9kYWwnXG5pbXBvcnQgeyBTRUNUSU9OUyB9IGZyb20gJy4uLy4uLy4uL2NvbnN0YW50cy9jb25maWcnXG5pbXBvcnQgeyBTQ0NBSU1Db250ZW50LCBTQ0NBSU1Db250ZW50V3JhcHBlciwgU0NDQUlNTWluaW1pemVkSGlkZSwgU0NDQUlNV3JhcHBlciB9IGZyb20gJy4vQ2hhdEFJTW9kYWwuc3R5bGVzJ1xuaW1wb3J0IHsgTWFpYU1pbmltaXplZFBpbGwgfSBmcm9tICcuL2NvbXBvbmVudHMvTWFpYU1pbmltaXplZFBpbGwnXG5pbXBvcnQge1xuICBnZXRNYWlhRmxvYXRpbmdQYW5lbFdpZHRoUHgsXG4gIE1haWFDaGF0TW9kYWxMYXlvdXRNb2RlLFxuICByZXNvbHZlSW5pdGlhbE1haWFDaGF0TGF5b3V0TW9kZSxcbiAgc2V0U3RvcmVkTWFpYUNoYXRMYXlvdXRNb2RlLFxufSBmcm9tICcuL2xheW91dCdcbmltcG9ydCB7IEZsb2F0aW5nUGFuZWxNb3Rpb24sIHVzZUZsb2F0aW5nUGFuZWxEcmFnVGlsdCB9IGZyb20gJy4vZmxvYXRpbmdQYW5lbE1vdGlvbidcbmltcG9ydCB7IENoYXRBaU1vZGFsRm9vdGVyIH0gZnJvbSAnLi9jb21wb25lbnRzL0NoYXRBaU1vZGFsRm9vdGVyJ1xuaW1wb3J0IHsgdmFsaWRhdGVJc01haWEgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy91dGlscy92YWxpZGF0ZUlzTWFpYSdcbmltcG9ydCB7IGlzTWFya2V0cGxhY2VHbG9iYWxDbG9uZUFnZW50IH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvYWdlbnREaXNwbGF5TmFtZSdcbmltcG9ydCB7IEFnZW50IH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvYWdlbnQnXG5pbXBvcnQgeyBQcm9qZWN0IH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvUHJvamVjdCdcbmltcG9ydCB7IENsaWVudCB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL0NsaWVudCdcbmltcG9ydCB7IFRhc2sgfSBmcm9tICcuLi8uLi8uLi90eXBlcy9UYXNrJ1xuaW1wb3J0IHsgdXNlRmFxc1N0b3JlIH0gZnJvbSAnLi4vLi4vLi4vc3RvcmUvdXNlRmFxc1N0b3JlJ1xuaW1wb3J0IHsgZ2V0Q2hhdHNTdG9yZVN0YXRlLCB1c2VDaGF0c1N0b3JlIH0gZnJvbSAnLi4vLi4vLi4vc3RvcmUvdXNlQ2hhdHNTdG9yZSdcbmltcG9ydCB0eXBlIHsgQ2hhdExpc3RJdGVtIH0gZnJvbSAnLi4vLi4vLi4vc3RvcmUvY2hhdHNTdG9yZS50eXBlcydcbmltcG9ydCB7IHJlYWRMYXN0QWN0aXZlQ2hhdElkLCB3cml0ZUxhc3RBY3RpdmVDaGF0SWQgfSBmcm9tICcuLi8uLi8uLi9zdG9yZS9tYWlhTGFzdENoYXRQZXJzaXN0ZW5jZSdcbmltcG9ydCB7XG4gIGNsZWFyTWFpYVBhbmVsU2Vzc2lvbixcbiAgaXNWYWxpZE1haWFQYW5lbE9wdGlvbixcbiAgcGF0Y2hNYWlhUGFuZWxTZXNzaW9uLFxuICByZWFkTWFpYVBhbmVsU2Vzc2lvbixcbiAgdHlwZSBNYWlhUGFuZWxTZXNzaW9uU25hcHNob3QsXG4gIHdyaXRlTWFpYVBhbmVsU2Vzc2lvbixcbn0gZnJvbSAnLi4vLi4vLi4vc3RvcmUvbWFpYVBhbmVsU2Vzc2lvblBlcnNpc3RlbmNlJ1xuaW1wb3J0IHsgdXNlU2Vzc2lvbnNTdG9yZSB9IGZyb20gJy4uLy4uLy4uL3N0b3JlL3Nlc3Npb25zL3VzZVNlc3Npb25zU3RvcmUnXG5pbXBvcnQgeyBpc0FjdGl2ZVNlc3Npb25TdGF0dXMgfSBmcm9tICcuLi8uLi8uLi9zdG9yZS9zZXNzaW9ucy9zZXNzaW9ucy50eXBlcydcbmltcG9ydCB7IGZldGNoTWFpYSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL21haWEvY2xpZW50J1xuaW1wb3J0IHsgZmV0Y2hBZ2VudERldGFpbCB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL21haWEvQWdlbnRzL2ZldGNoQWdlbnREZXRhaWwnXG5pbXBvcnQgeyBtYXBDT1JMYW5nIH0gZnJvbSAnLi4vLi4vLi4vbGFuZy91dGlscydcbmltcG9ydCB7IEVWRU5UUywgdXNlRXZlbnQgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VFdmVudCdcbmltcG9ydCB7IE1BSUFfT1BFTl9GUk9NX0hPU1RfRVZFTlQsIHR5cGUgTWFpYUhvc3RPcGVuRGV0YWlsIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvbWFpYUhvc3RPcGVuJ1xuXG4vKiogTWV0YWRhdGEgZGUgbGEgc2Vzc2lvbiBhYmllcnRhIChlbWl0aWRhIHBvciB1c2VDaGF0TWVzc2FnZXMgYWwgY2FyZ2FyIHVuYSBjb252ZXJzYWNpw7NuKS4gKi9cbnR5cGUgU2Vzc2lvbk1ldGEgPSB7XG4gIGNoYXRJZDogc3RyaW5nXG4gIGFnZW50VHlwZT86IHN0cmluZ1xuICBhZ2VudEVudGl0eT86IHN0cmluZ1xuICBwcm9qZWN0SWQ/OiBudW1iZXJcbiAgcHJvamVjdE5hbWU/OiBzdHJpbmdcbiAgY2xpZW50SWQ/OiBudW1iZXJcbiAgY2xpZW50TmFtZT86IHN0cmluZ1xuICB0YXNrSWQ/OiBudW1iZXJcbiAgdGFza05hbWU/OiBzdHJpbmdcbn1cblxuY29uc3QgTEVHQUNZX0NPTlRFWFRfRU5USVRJRVMgPSBbJ3Byb2plY3QnLCAndGFzaycsICdjbGllbnQnXSBhcyBjb25zdFxudHlwZSBMZWdhY3lDb250ZXh0RW50aXR5ID0gKHR5cGVvZiBMRUdBQ1lfQ09OVEVYVF9FTlRJVElFUylbbnVtYmVyXVxuXG50eXBlIEFpQ2hhdEJhY2tEZXN0aW5hdGlvbiA9ICdnbG9iYWxfY29udGV4dF9ob21lJyB8ICd0YXNrX2hvbWUnIHwgJ3BsYW5uZXJfaG9tZScgfCAncHJvamVjdF9ob21lJyB8ICdjbGllbnRfaG9tZSdcblxuLyoqIEhvbWUgZ2xvYmFsIGRlbCBvcmNoZXN0cmF0b3IgKHNvbG8gaGVhZGVyKS4gUGxhbm5lciBlcyBob21lIGRlIEZVQXMsIG5vIGRlIGNvbnRleHRvcy4gKi9cbmNvbnN0IGlzR2xvYmFsTWFpYVNlY3Rpb24gPSAoc2VjdGlvbjogU2VjdGlvbik6IGJvb2xlYW4gPT4gc2VjdGlvbiA9PT0gJ2hlYWRlcidcblxuY29uc3QgcmVzb2x2ZUFpQ2hhdEJhY2tEZXN0aW5hdGlvbiA9IChcbiAgc2VjdGlvbjogU2VjdGlvbixcbiAgYWdlbnRUeXBlOiBBZ2VudFsndHlwZSddIHwgdW5kZWZpbmVkLFxuICBjdXJyZW50T3B0aW9uOiBzdHJpbmcsXG4gIGhvbWVPcHRpb246IHN0cmluZ1xuKTogQWlDaGF0QmFja0Rlc3RpbmF0aW9uID0+IHtcbiAgaWYgKGlzR2xvYmFsTWFpYVNlY3Rpb24oc2VjdGlvbikgJiYgYWdlbnRUeXBlID09PSAnb3JjaGVzdHJhdG9yJyAmJiBjdXJyZW50T3B0aW9uID09PSBob21lT3B0aW9uKSB7XG4gICAgcmV0dXJuICdnbG9iYWxfY29udGV4dF9ob21lJ1xuICB9XG4gIGlmIChzZWN0aW9uID09PSAndGFzaycpIHJldHVybiAndGFza19ob21lJ1xuICBpZiAoc2VjdGlvbiA9PT0gJ3BsYW5uZXInKSByZXR1cm4gJ3BsYW5uZXJfaG9tZSdcbiAgaWYgKHNlY3Rpb24gPT09ICdwcm9qZWN0JykgcmV0dXJuICdwcm9qZWN0X2hvbWUnXG4gIGlmIChzZWN0aW9uID09PSAnY2xpZW50JykgcmV0dXJuICdjbGllbnRfaG9tZSdcbiAgcmV0dXJuICdnbG9iYWxfY29udGV4dF9ob21lJ1xufVxuXG5leHBvcnQgY29uc3QgSURfTU9EQUxfQ0hBVF9BR0VOVCA9ICdtb2RhbHMtcG9ydGFsLW1haWEtY2hhdC1hZ2VudCdcblxuY29uc3QgdmFsaWRhdGVBY2Nlc3NCeUZlYXR1cmUgPSAoc2VjdGlvbjogU2VjdGlvbiB8IG51bGwgfCB1bmRlZmluZWQsIHVzZXI6IFJldHVyblR5cGU8dHlwZW9mIHVzZVVzZXI+KSA9PiB7XG4gIGlmICghc2VjdGlvbiB8fCAhY2FuQWNjZXNzVG9DaGF0QUkodXNlcikpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8vIFBsYW5uZXIgeSB0YXNrIGFicmVuIHNpZW1wcmUgZWwgY2hhdCAoaG9tZSBkZSBGVUFzKSwgbnVuY2EgcmVzdW1lbiBkZSBwcm95ZWN0b3MuXG4gIGlmIChzZWN0aW9uID09PSAncGxhbm5lcicgfHwgc2VjdGlvbiA9PT0gJ3Rhc2snKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIGlmIChzZWN0aW9uID09PSAnaGVhZGVyJykge1xuICAgIHJldHVybiBCb29sZWFuKHdpbmRvdy5NQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1MgfHwgd2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFMpXG4gIH1cblxuICByZXR1cm4gQm9vbGVhbih3aW5kb3cuTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTKVxufVxuXG5leHBvcnQgY29uc3QgQ2hhdEFJTW9kYWwgPSAoKSA9PiB7XG4gIGNvbnN0IHVzZXIgPSB1c2VVc2VyKClcbiAgY29uc3QgeyBpMThuIH0gPSB1c2VUcmFuc2xhdGlvbihbU0VDVElPTlMuYWJtQWdlbnRdKVxuICBjb25zdCBhbXBsaXR1ZEV2ZW50ID0gdXNlRXZlbnQoKVxuXG4gIGNvbnN0IHNhdmVkU2Vzc2lvbk9uTW91bnRSZWYgPSB1c2VSZWY8TWFpYVBhbmVsU2Vzc2lvblNuYXBzaG90IHwgbnVsbD4ocmVhZE1haWFQYW5lbFNlc3Npb24odXNlci5pZCkpXG4gIGNvbnN0IHNob3VsZFJlc3RvcmVFeHBhbmRlZCA9IHNhdmVkU2Vzc2lvbk9uTW91bnRSZWYuY3VycmVudD8uaXNFeHBhbmRlZCA/PyBmYWxzZVxuICBjb25zdCBwZW5kaW5nU2Vzc2lvblJlc3RvcmVSZWYgPSB1c2VSZWY8TWFpYVBhbmVsU2Vzc2lvblNuYXBzaG90IHwgbnVsbD4oXG4gICAgc2hvdWxkUmVzdG9yZUV4cGFuZGVkID8gc2F2ZWRTZXNzaW9uT25Nb3VudFJlZi5jdXJyZW50IDogbnVsbFxuICApXG4gIGNvbnN0IHNlc3Npb25SZXN0b3JlU3RhcnRlZFJlZiA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3QgW2lzUmVzdG9yaW5nU2Vzc2lvbiwgc2V0SXNSZXN0b3JpbmdTZXNzaW9uXSA9IHVzZVN0YXRlKCgpID0+IHBlbmRpbmdTZXNzaW9uUmVzdG9yZVJlZi5jdXJyZW50ICE9IG51bGwpXG4gIGNvbnN0IHNpZGViYXJPcGVuUmVmID0gdXNlUmVmKHNhdmVkU2Vzc2lvbk9uTW91bnRSZWYuY3VycmVudD8uc2lkZWJhck9wZW4gPz8gZmFsc2UpXG5cbiAgLy8gVHJhcyBuYXZlZ2FyIGVuIGVsIGhvc3QgKGZ1bGwgcGFnZSByZWxvYWQpLCByZXN0YXVyYW1vcyBlbCBwYW5lbCBzaSBlc3RhYmEgYWJpZXJ0by5cbiAgY29uc3QgW2lzTWluaW1pemVkLCBzZXRJc01pbmltaXplZF0gPSB1c2VTdGF0ZSgoKSA9PiAhc2hvdWxkUmVzdG9yZUV4cGFuZGVkKVxuICBjb25zdCBzZXRDaGF0Vmlld1Zpc2libGUgPSB1c2VDaGF0c1N0b3JlKHN0YXRlID0+IHN0YXRlLnNldENoYXRWaWV3VmlzaWJsZSlcbiAgY29uc3QgdW5yZWFkQ291bnQgPSB1c2VDaGF0c1N0b3JlKHN0YXRlID0+IHN0YXRlLnVucmVhZENvdW50KVxuICBjb25zdCBhY3RpdmVDaGF0SWQgPSB1c2VDaGF0c1N0b3JlKHN0YXRlID0+IHN0YXRlLmFjdGl2ZUNoYXRJZClcbiAgLy8gTG9zIFwiLi4uXCIgZGVsIHBpbGwgc2FsZW4gZGVsIG1vdG9yLCBubyBkZSBpc1N0cmVhbWluZy9pc1dyaXRpbmc6IGVzb3MgcmVmbGVqYW5cbiAgLy8gbGEgc2VzacOzbiBhY3RpdmEgeSBxdWVkYW4gc3RhbGUgY3VhbmRvIHVuYSByZXNwdWVzdGEgdGVybWluYSBlbiBiYWNrZ3JvdW5kLlxuICBjb25zdCBoYXNBY3RpdmVTdHJlYW0gPSB1c2VTZXNzaW9uc1N0b3JlKHN0YXRlID0+XG4gICAgT2JqZWN0LnZhbHVlcyhzdGF0ZS5tZXRhKS5zb21lKG1ldGEgPT4gaXNBY3RpdmVTZXNzaW9uU3RhdHVzKG1ldGEuc3RhdHVzKSlcbiAgKVxuXG4gIC8qKiBnb1RvQ2hhdCAvIGhhbmRsZUdvSG9tZSBzZSBkZWZpbmVuIG3DoXMgYWJham87IGxvcyByZWZzIGV2aXRhbiBkZXBlbmRlciBkZWwgb3JkZW4gZGUgZGVjbGFyYWNpw7NuLiAqL1xuICBjb25zdCBnb1RvQ2hhdFJlZiA9IHVzZVJlZjwoKGNoYXQ6IENoYXRMaXN0SXRlbSkgPT4gdm9pZCkgfCBudWxsPihudWxsKVxuICBjb25zdCBnb0hvbWVSZWYgPSB1c2VSZWY8KCgpID0+IHZvaWQpIHwgbnVsbD4obnVsbClcblxuICAvLyBNb250YSBjZXJyYWRhIHNhbHZvIHJlc3RhdXJhY2nDs24gZGUgc2VzacOzbjogc2kgZWwgcGFuZWwgbm8gZXN0w6EgdmlzaWJsZSwgbGFzIHJlc3B1ZXN0YXNcbiAgLy8gbnVldmFzIHF1ZWRhbiBjb21vIG5vIGxlw61kYXMuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFwZW5kaW5nU2Vzc2lvblJlc3RvcmVSZWYuY3VycmVudCkge1xuICAgICAgc2V0Q2hhdFZpZXdWaXNpYmxlKGZhbHNlKVxuICAgIH1cbiAgfSwgW3NldENoYXRWaWV3VmlzaWJsZV0pXG5cbiAgLy8gUGVyc2lzdGltb3MgbGEgY29udmVyc2FjacOzbiBhYmllcnRhIHBhcmEgcG9kZXIgdm9sdmVyIGEgZWxsYSBkZXNkZSBlbCBwaWxsIGRlc3B1w6lzXG4gIC8vIGRlIG5hdmVnYXIgbyByZWZyZXNjYXIuIEVsIHRha2VvdmVyIGRlc2RlIHVuIGhvc3QgbGEgbGltcGlhICh2YSBhbCBIb21lKS5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoYWN0aXZlQ2hhdElkKSB7XG4gICAgICB3cml0ZUxhc3RBY3RpdmVDaGF0SWQodXNlci5pZCwgYWN0aXZlQ2hhdElkKVxuICAgIH1cbiAgfSwgW2FjdGl2ZUNoYXRJZCwgdXNlci5pZF0pXG5cbiAgY29uc3QgaGFuZGxlTWluaW1pemUgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgYW1wbGl0dWRFdmVudChFVkVOVFMuYWlDaGF0TWluaW1pemUpXG4gICAgc2V0SXNNaW5pbWl6ZWQodHJ1ZSlcbiAgICBzZXRDaGF0Vmlld1Zpc2libGUoZmFsc2UpXG4gICAgd3JpdGVNYWlhUGFuZWxTZXNzaW9uKHVzZXIuaWQsIHsgaXNFeHBhbmRlZDogZmFsc2UgfSlcbiAgfSwgW2FtcGxpdHVkRXZlbnQsIHNldENoYXRWaWV3VmlzaWJsZSwgdXNlci5pZF0pXG5cbiAgY29uc3QgZm9jdXNDaGF0SW5wdXQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ21haWEtaW5wdXQtcmVmb2N1cycpKVxuICAgIH0sIDEwMClcbiAgfSwgW10pXG5cbiAgY29uc3QgW3VzZXJJbml0aWFsTWVzc2FnZSwgc2V0VXNlckluaXRpYWxNZXNzYWdlXSA9IHVzZVN0YXRlPHtcbiAgICBtZXNzYWdlOiBzdHJpbmdcbiAgICBhdHRhY2htZW50czogQXR0YWNobWVudEZpbGVbXVxuICAgIGZhcUlkPzogc3RyaW5nXG4gICAgYWdlbnRTdWdnZXN0aW9uSWQ/OiBzdHJpbmdcbiAgICBtZW50aW9ucz86IENvbnRleHRNZW50aW9uW11cbiAgICBmdWFJZD86IHN0cmluZ1xuICAgIHNjSWQ/OiBzdHJpbmdcbiAgICBjb250ZXh0RGF0YT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gIH0+KHtcbiAgICBtZXNzYWdlOiAnJyxcbiAgICBhdHRhY2htZW50czogW10sXG4gIH0pXG4gIGNvbnN0IFtpbml0aWFsQ2hhdElkLCBzZXRJbml0aWFsQ2hhdElkXSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bGw+KG51bGwpXG4gIGNvbnN0IFtuZXdDaGF0S2V5LCBzZXROZXdDaGF0S2V5XSA9IHVzZVN0YXRlKDApXG4gIGNvbnN0IFtzZXNzaW9uTWV0YSwgc2V0U2Vzc2lvbk1ldGFdID0gdXNlU3RhdGU8U2Vzc2lvbk1ldGEgfCBudWxsPihudWxsKVxuICBjb25zdCBbc2VuZE1lc3NhZ2VGdW5jdGlvbiwgc2V0U2VuZE1lc3NhZ2VGdW5jdGlvbl0gPSB1c2VTdGF0ZTxcbiAgICB8ICgoXG4gICAgICAgIG1lc3NhZ2U6IHN0cmluZyxcbiAgICAgICAgYXR0YWNobWVudHM/OiBBdHRhY2htZW50RmlsZVtdLFxuICAgICAgICBmYXFJZD86IHN0cmluZyxcbiAgICAgICAgYWdlbnRTdWdnZXN0aW9uSWQ/OiBzdHJpbmcsXG4gICAgICAgIG1lbnRpb25zPzogQ29udGV4dE1lbnRpb25bXSxcbiAgICAgICAgZnVhSWQ/OiBzdHJpbmcsXG4gICAgICAgIHNjSWQ/OiBzdHJpbmdcbiAgICAgICkgPT4gdm9pZClcbiAgICB8IG51bGxcbiAgPihudWxsKVxuICBjb25zdCBbc3RvcEdlbmVyYXRpb25GdW5jdGlvbiwgc2V0U3RvcEdlbmVyYXRpb25GdW5jdGlvbl0gPSB1c2VTdGF0ZTwoKCkgPT4gdm9pZCkgfCBudWxsPihudWxsKVxuICBjb25zdCBbaXNTdHJlYW1pbmcsIHNldElzU3RyZWFtaW5nXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbaXNXcml0aW5nLCBzZXRJc1dyaXRpbmddID0gdXNlU3RhdGUoZmFsc2UpXG5cbiAgY29uc3QgW3JlZmV0Y2hDaGF0cywgc2V0UmVmZXRjaENoYXRzXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbY3VycmVudE9wdGlvbiwgc2V0Q3VycmVudE9wdGlvbl0gPSB1c2VTdGF0ZTxvcHRpb25zPigoKSA9PiB7XG4gICAgY29uc3Qgc2F2ZWQgPSBzYXZlZFNlc3Npb25Pbk1vdW50UmVmLmN1cnJlbnRcbiAgICBpZiAoc2F2ZWQ/LmFnZW50c05hdkFjdGl2ZSA9PT0gJ215QWdlbnRzJykgcmV0dXJuIG9wdGlvbnMubXlBZ2VudHNcbiAgICBpZiAoc2F2ZWQ/LmFnZW50c05hdkFjdGl2ZSA9PT0gJ215U2tpbGxzJykgcmV0dXJuIG9wdGlvbnMubXlTa2lsbHNcbiAgICBjb25zdCBzYXZlZE9wdGlvbiA9IHNhdmVkPy5jdXJyZW50T3B0aW9uXG4gICAgcmV0dXJuIHNhdmVkT3B0aW9uICYmIGlzVmFsaWRNYWlhUGFuZWxPcHRpb24oc2F2ZWRPcHRpb24pID8gKHNhdmVkT3B0aW9uIGFzIG9wdGlvbnMpIDogb3B0aW9ucy5ob21lXG4gIH0pXG4gIGNvbnN0IFtoYXNFcnJvciwgc2V0SGFzRXJyb3JdID0gdXNlU3RhdGUoZmFsc2UpXG4gIC8vIEVuIHByb2plY3QvY2xpZW50L3Rhc2s6IGVsIHVzdWFyaW8gcmVpbmljacOzIGVsIGNvbnRleHRvIGRlbCBvcmNoZXN0cmF0b3IgKGxvIGxpbXBpw7MgeSBwYXPDsyBwb3JcbiAgLy8gZWwgc2VsZWN0b3IgZGUgY29udGV4dG9zIHJlY2llbnRlcykuIEhhYmlsaXRhIGVsIGJvdMOzbiBcInZvbHZlclwiIGVuIGVsIGhvbWUgcGFzbyAyIGRlIGVzYXNcbiAgLy8gc2VjY2lvbmVzLiBTZSByZXNldGVhIGFsIGNlcnJhci9yZWFicmlyIGVsIG1vZGFsIChlbCBjb21wb25lbnRlIHNlIGRlc21vbnRhKS5cbiAgY29uc3QgW2RpZFJlc2V0Q29udGV4dEluU2VjdGlvbiwgc2V0RGlkUmVzZXRDb250ZXh0SW5TZWN0aW9uXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBwcmV2SGFzUGlubmVkQ29udGV4dFJlZiA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3QgaGFuZGxlcnMgPSB1c2VNZW1vKCgpID0+IGJ1aWxkSGFuZGxlcnMoc2V0Q3VycmVudE9wdGlvbiwgc2V0SGFzRXJyb3IpLCBbXSlcbiAgY29uc3QgW3NpZGViYXJIYXNFcnJvciwgc2V0U2lkZWJhckhhc0Vycm9yXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCByZXNldFNlbGVjdGVkQ2hhdFJlZiA9IHVzZVJlZjwoKCkgPT4gdm9pZCkgfCBudWxsPihudWxsKVxuICBjb25zdCBsYW5nID0gaTE4bi5sYW5ndWFnZSA9PT0gJ2JyJyA/ICdwdC1icicgOiBpMThuLmxhbmd1YWdlXG5cbiAgbW9tZW50LmxvY2FsZShsYW5nKVxuXG4gIGNvbnN0IHtcbiAgICBzZWxlY3RBZ2VudCxcbiAgICBjbGVhckFnZW50LFxuICAgIHNlY3Rpb24sXG4gICAgYWdlbnQsXG4gICAgcHJvamVjdCxcbiAgICBjbGllbnQsXG4gICAgdGFzayxcbiAgICBjaGlwc1Byb2plY3QsXG4gICAgdG9nZ2xlV2ViU2VhcmNoLFxuICAgIGlzV2ViU2VhcmNoQWN0aXZlLFxuICAgIHNldENoaXBzUHJvamVjdCxcbiAgICBzZXRDbGllbnQsXG4gICAgc2V0UHJvamVjdCxcbiAgICBiYW5uZXJFbnRyeUZhcSxcbiAgICBzZXRUYXNrLFxuICB9ID0gdXNlR2xvYmFsQ29udGV4dCgpXG5cbiAgLy8gWi1pbmRleCBwYXJhIHRvb2x0aXBzIGVuIHNlY3Rpb24gJ3Rhc2snIChtb2RhbCBmbG90YW50ZSBlbGV2YWRvKVxuICBjb25zdCB0b29sdGlwWkluZGV4ID0gdXNlTWFpYVRhc2tQYW5lbFpJbmRleCgxNTAwLCAnb3ZlcmxheScpXG5cbiAgY29uc3Qge1xuICAgIGFnZW50cyxcbiAgICBsb2FkaW5nLFxuICAgIGxvYWRpbmdNb3JlLFxuICAgIGVycm9yOiBhZ2VudEVycm9yLFxuICAgIGhhbmRsZUdldEFnZW50cyxcbiAgICBsb2FkTW9yZUFnZW50cyxcbiAgICBzZWFyY2hDdXN0b21BZ2VudHMsXG4gICAgc2VhcmNoTG9hZGluZyxcbiAgICBhZGRBZ2VudCxcbiAgICByZW1vdmVBZ2VudCxcbiAgICB1cGRhdGVBZ2VudCxcbiAgICB1cGRhdGVBZ2VudEZhdm9yaXRlLFxuICAgIHNlbGVjdEZpcnN0QWdlbnQsXG4gICAgc29ydEFnZW50c0xpc3QsXG4gIH0gPSB1c2VHZXRBZ2VudHMoeyBzZWxlY3RBZ2VudCwgc2VjdGlvbiwgYWdlbnQsIGhhbmRsZUdvSG9tZTogaGFuZGxlcnMuaG9tZSB9KVxuXG4gIGNvbnN0IHsgc2tpbGxzLCBsb2FkaW5nOiBsb2FkaW5nU2tpbGxzLCBoYW5kbGVHZXRTa2lsbHMsIGFkZFNraWxsLCB1cGRhdGVTa2lsbEluTGlzdCwgcmVtb3ZlU2tpbGwgfSA9IHVzZUdldFNraWxscygpXG5cbiAgY29uc3QgaXNNQUlBID0gdmFsaWRhdGVJc01haWEoYWdlbnQgYXMgQWdlbnQpXG5cbiAgY29uc3QgdXNlckhhc1Blcm1pc3Npb25zID1cbiAgICAodXNlcj8ucGVybWlzc2lvbnM/LmFpX2FnZW50cz8uY3JlYXRlIHx8XG4gICAgICB1c2VyPy5wZXJtaXNzaW9ucz8uYWlfYWdlbnRzPy5lZGl0IHx8XG4gICAgICB1c2VyPy5wZXJtaXNzaW9ucz8uYWlfYWdlbnRzPy5kZWxldGUpICYmXG4gICAgd2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFNcblxuICBjb25zdCBjb21wdXRlZEN1cnJlbnRPcHRpb24gPSB1c2VNZW1vKCgpID0+IHtcbiAgICBjb25zdCBpc0dsb2JhbFNwZWNpYWxpc3QgPSBpc01BSUEgJiYgYWdlbnQ/LmVudGl0eSA9PT0gJ2dsb2JhbCdcbiAgICBjb25zdCBpc1Byb2plY3RTcGVjaWFsaXN0ID0gaXNNQUlBICYmIChhZ2VudD8uZW50aXR5ID09PSAncHJvamVjdCcgfHwgYWdlbnQ/LmVudGl0eSA9PSBudWxsKVxuICAgIGNvbnN0IGlzQ2xpZW50U3BlY2lhbGlzdCA9IGlzTUFJQSAmJiBhZ2VudD8uZW50aXR5ID09PSAnY2xpZW50J1xuICAgIGNvbnN0IGlzTWFpYWtlciA9IGlzTWFya2V0cGxhY2VHbG9iYWxDbG9uZUFnZW50KGFnZW50KVxuXG4gICAgaWYgKGN1cnJlbnRPcHRpb24gPT09IG9wdGlvbnMubXlBZ2VudHMgJiYgd2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFMpIHtcbiAgICAgIHJldHVybiBvcHRpb25zLm15QWdlbnRzXG4gICAgfVxuXG4gICAgaWYgKGN1cnJlbnRPcHRpb24gPT09IG9wdGlvbnMubXlTa2lsbHMgJiYgd2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFMpIHtcbiAgICAgIHJldHVybiBvcHRpb25zLm15U2tpbGxzXG4gICAgfVxuXG4gICAgLy8gRWwgb3JjaGVzdHJhdG9yIChNQUlBKSBtdWVzdHJhIHN1IGhvbWUgY29uIEZBUXMvYWNjaW9uZXMgZnJlY3VlbnRlczsgZWwgcmVzdG8gZGVcbiAgICAvLyBsb3MgZ2xvYmFsIHNwZWNpYWxpc3RzIChjbG9uZXMgZ2xvYmFsZXMgbm8tbWFpYWtlcikgc2lndWVuIHllbmRvIGRpcmVjdG8gYWwgY2hhdC5cbiAgICBpZiAoaXNHbG9iYWxTcGVjaWFsaXN0ICYmICFpc01haWFrZXIgJiYgYWdlbnQ/LnR5cGUgIT09ICdvcmNoZXN0cmF0b3InICYmIGN1cnJlbnRPcHRpb24gPT09IG9wdGlvbnMuaG9tZSkge1xuICAgICAgcmV0dXJuIG9wdGlvbnMuY2hhdFxuICAgIH1cblxuICAgIGNvbnN0IHNob3VsZFNob3dQcm9qZWN0U2VsZWN0b3IgPSBjdXJyZW50T3B0aW9uICE9PSBvcHRpb25zLmNoYXQgJiYgaXNQcm9qZWN0U3BlY2lhbGlzdCAmJiAhcHJvamVjdFxuICAgIGNvbnN0IHNob3VsZFNob3dDbGllbnRTZWxlY3RvciA9IGN1cnJlbnRPcHRpb24gIT09IG9wdGlvbnMuY2hhdCAmJiBpc0NsaWVudFNwZWNpYWxpc3QgJiYgIWNsaWVudFxuXG4gICAgaWYgKHNob3VsZFNob3dQcm9qZWN0U2VsZWN0b3IpIHtcbiAgICAgIHJldHVybiBvcHRpb25zLnByb2plY3RTZWxlY3RvclxuICAgIH1cbiAgICBpZiAoc2hvdWxkU2hvd0NsaWVudFNlbGVjdG9yKSB7XG4gICAgICByZXR1cm4gb3B0aW9ucy5jbGllbnRTZWxlY3RvclxuICAgIH1cbiAgICByZXR1cm4gY3VycmVudE9wdGlvblxuICB9LCBbY3VycmVudE9wdGlvbiwgcHJvamVjdCwgY2xpZW50LCBpc01BSUEsIGFnZW50Py5lbnRpdHksIGFnZW50Py5uYW1lLCBhZ2VudD8udHlwZV0pXG5cbiAgY29uc3QgaXNNYWlha2VyQWdlbnRTZWxlY3RlZCA9IHVzZU1lbW8oKCkgPT4gaXNNYXJrZXRwbGFjZUdsb2JhbENsb25lQWdlbnQoYWdlbnQpLCBbYWdlbnRdKVxuXG4gIGNvbnN0IHNpZGViYXJBZ2VudHNOYXZBY3RpdmUgPSB1c2VNZW1vKCgpOiAnbWFpYWtlcicgfCAnbXlBZ2VudHMnIHwgJ215U2tpbGxzJyB8IG51bGwgPT4ge1xuICAgIGlmIChjb21wdXRlZEN1cnJlbnRPcHRpb24gPT09IG9wdGlvbnMubXlTa2lsbHMpIHJldHVybiAnbXlTa2lsbHMnXG4gICAgaWYgKGNvbXB1dGVkQ3VycmVudE9wdGlvbiA9PT0gb3B0aW9ucy5teUFnZW50cykgcmV0dXJuICdteUFnZW50cydcbiAgICBpZiAoaXNNYWlha2VyQWdlbnRTZWxlY3RlZCkgcmV0dXJuICdtYWlha2VyJ1xuICAgIHJldHVybiBudWxsXG4gIH0sIFtjb21wdXRlZEN1cnJlbnRPcHRpb24sIGlzTWFpYWtlckFnZW50U2VsZWN0ZWRdKVxuXG4gIC8qIFJlYWN0aXZhciBjb24gbGEgZmlsYSDigJxNaXMgYWdlbnRlc+KAnSBlbiBTaWRlYmFyOiBteUFnZW50c0NvdW50IHByb3BcbiAgY29uc3Qgc2lkZWJhck15QWdlbnRzQ291bnQgPSB1c2VNZW1vKCgpID0+IHtcbiAgICByZXR1cm4gYWdlbnRzLmRhdGEuZmlsdGVyKFxuICAgICAgYSA9PiAhKGEudHlwZSA9PT0gJ29yY2hlc3RyYXRvcicgfHwgKGEudHlwZSA9PT0gJ2Nsb25lJyAmJiBhLmVudGl0eSA9PT0gJ2dsb2JhbCcgJiYgLyhtYWlha2VyfG1hcmtldHBsYWNlKS9pLnRlc3QoYS5uYW1lIHx8ICcnKSkpXG4gICAgKVxuICAgICAgLmxlbmd0aFxuICB9LCBbYWdlbnRzLmRhdGFdKVxuICAqL1xuXG4gIGNvbnN0IGFnZW50c0ZldGNoZWRSZWYgPSB1c2VSZWYoZmFsc2UpXG5cbiAgY29uc3Qgc2VsZWN0b3IgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAjJHtJRF9NT0RBTF9DSEFUX0FHRU5UfWApXG5cbiAgLy8gVGFzayBwYW5lbCwgcGxhbm5lciB5IGJhbm5lciBkZSBwcm95ZWN0byBhYnJlbiBlbiBmbG90YW50ZSBwb3IgZGVmYXVsdCAobm8gdGFwYXIgZWwgY29udGV4dG8gZGV0csOhcykuXG4gIC8vIEZ1ZXJhIGRlIGVzb3MgY29udGV4dG9zIHNlIHJlc3BldGEgbGEgcHJlZmVyZW5jaWEgZ3VhcmRhZGEgZW4gbG9jYWxTdG9yYWdlLlxuICBjb25zdCBbbGF5b3V0TW9kZSwgc2V0TGF5b3V0TW9kZV0gPSB1c2VTdGF0ZTxNYWlhQ2hhdE1vZGFsTGF5b3V0TW9kZT4oKCkgPT5cbiAgICByZXNvbHZlSW5pdGlhbE1haWFDaGF0TGF5b3V0TW9kZSh7IHNlY3Rpb24sIGJhbm5lckVudHJ5RmFxIH0pXG4gIClcblxuICBjb25zdCBoYW5kbGVMYXlvdXRNb2RlQ2hhbmdlID0gdXNlQ2FsbGJhY2soKG1vZGU6IE1haWFDaGF0TW9kYWxMYXlvdXRNb2RlKSA9PiB7XG4gICAgc2V0U3RvcmVkTWFpYUNoYXRMYXlvdXRNb2RlKG1vZGUpXG4gICAgc2V0TGF5b3V0TW9kZShtb2RlKVxuICB9LCBbXSlcbiAgY29uc3QgZXhwYW5kZWQgPSBsYXlvdXRNb2RlID09PSAnZnVsbHNjcmVlbidcbiAgY29uc3QgaXNGbG9hdGluZyA9IGxheW91dE1vZGUgPT09ICdmbG9hdGluZydcbiAgY29uc3QgY29udGVudFdyYXBwZXJSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpXG4gIGNvbnN0IFtkcmFnUG9zaXRpb24sIHNldERyYWdQb3NpdGlvbl0gPSB1c2VTdGF0ZTx7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0gfCBudWxsPihcbiAgICAoKSA9PiBzYXZlZFNlc3Npb25Pbk1vdW50UmVmLmN1cnJlbnQ/LmRyYWdQb3NpdGlvbiA/PyBudWxsXG4gIClcbiAgY29uc3QgeyB0aWx0TW90aW9uLCBzdGFydFBvaW50ZXJUcmFja2luZywgc2FtcGxlUG9pbnRlck1vdmUsIGVuZFBvaW50ZXJUcmFja2luZyB9ID1cbiAgICB1c2VGbG9hdGluZ1BhbmVsRHJhZ1RpbHQoaXNGbG9hdGluZylcbiAgY29uc3QgZHJhZ1N0YXRlUmVmID0gdXNlUmVmPHtcbiAgICBwb2ludGVySWQ6IG51bWJlclxuICAgIG9mZnNldFg6IG51bWJlclxuICAgIG9mZnNldFk6IG51bWJlclxuICB9IHwgbnVsbD4obnVsbClcblxuICBjb25zdCBjbGFtcERyYWdQb3NpdGlvbiA9IHVzZUNhbGxiYWNrKCh4OiBudW1iZXIsIHk6IG51bWJlcikgPT4ge1xuICAgIGNvbnN0IGNvbnRlbnRXcmFwcGVyID0gY29udGVudFdyYXBwZXJSZWYuY3VycmVudFxuICAgIGlmICghY29udGVudFdyYXBwZXIpIHtcbiAgICAgIHJldHVybiB7IHgsIHkgfVxuICAgIH1cblxuICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gY29udGVudFdyYXBwZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgICBjb25zdCBvZmZzZXQgPSAxNlxuICAgIGNvbnN0IG1heFggPSBNYXRoLm1heChvZmZzZXQsIHdpbmRvdy5pbm5lcldpZHRoIC0gd2lkdGggLSBvZmZzZXQpXG4gICAgY29uc3QgbWF4WSA9IE1hdGgubWF4KG9mZnNldCwgd2luZG93LmlubmVySGVpZ2h0IC0gaGVpZ2h0IC0gb2Zmc2V0KVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHg6IE1hdGgubWluKE1hdGgubWF4KHgsIG9mZnNldCksIG1heFgpLFxuICAgICAgeTogTWF0aC5taW4oTWF0aC5tYXgoeSwgb2Zmc2V0KSwgbWF4WSksXG4gICAgfVxuICB9LCBbXSlcblxuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChsYXlvdXRNb2RlICE9PSAnZmxvYXRpbmcnKSB7XG4gICAgICBzZXREcmFnUG9zaXRpb24obnVsbClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHNldERyYWdQb3NpdGlvbihwcmV2ID0+IHtcbiAgICAgIGlmIChwcmV2KSB7XG4gICAgICAgIHJldHVybiBjbGFtcERyYWdQb3NpdGlvbihwcmV2LngsIHByZXYueSlcbiAgICAgIH1cbiAgICAgIGNvbnN0IHBhZCA9IDE2XG4gICAgICBjb25zdCB4ID0gd2luZG93LmlubmVyV2lkdGggLSBnZXRNYWlhRmxvYXRpbmdQYW5lbFdpZHRoUHgoKSAtIHBhZFxuICAgICAgcmV0dXJuIGNsYW1wRHJhZ1Bvc2l0aW9uKHgsIHBhZClcbiAgICB9KVxuICB9LCBbbGF5b3V0TW9kZSwgY2xhbXBEcmFnUG9zaXRpb25dKVxuXG4gIGNvbnN0IGhhbmRsZURyYWdFbmQgPSB1c2VDYWxsYmFjayhcbiAgICAoZXZlbnQ6IFJlYWN0UG9pbnRlckV2ZW50PEhUTUxEaXZFbGVtZW50PikgPT4ge1xuICAgICAgZW5kUG9pbnRlclRyYWNraW5nKClcbiAgICAgIGlmIChkcmFnU3RhdGVSZWYuY3VycmVudD8ucG9pbnRlcklkICE9PSBldmVudC5wb2ludGVySWQpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGRyYWdTdGF0ZVJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS51c2VyU2VsZWN0ID0gJydcbiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUuY3Vyc29yID0gJydcblxuICAgICAgaWYgKGxheW91dE1vZGUgPT09ICdmbG9hdGluZycgJiYgY29udGVudFdyYXBwZXJSZWYuY3VycmVudCkge1xuICAgICAgICBjb25zdCByZWN0ID0gY29udGVudFdyYXBwZXJSZWYuY3VycmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICAgICAgICBwYXRjaE1haWFQYW5lbFNlc3Npb24odXNlci5pZCwgeyBkcmFnUG9zaXRpb246IHsgeDogcmVjdC5sZWZ0LCB5OiByZWN0LnRvcCB9IH0pXG4gICAgICB9XG4gICAgfSxcbiAgICBbZW5kUG9pbnRlclRyYWNraW5nLCBsYXlvdXRNb2RlLCB1c2VyLmlkXVxuICApXG5cbiAgY29uc3QgaGFuZGxlRHJhZ01vdmUgPSB1c2VDYWxsYmFjayhcbiAgICAoZXZlbnQ6IFJlYWN0UG9pbnRlckV2ZW50PEhUTUxEaXZFbGVtZW50PikgPT4ge1xuICAgICAgY29uc3QgZHJhZ1N0YXRlID0gZHJhZ1N0YXRlUmVmLmN1cnJlbnRcbiAgICAgIGlmICghZHJhZ1N0YXRlIHx8IGRyYWdTdGF0ZS5wb2ludGVySWQgIT09IGV2ZW50LnBvaW50ZXJJZCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgc2FtcGxlUG9pbnRlck1vdmUoZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSlcblxuICAgICAgY29uc3QgbmV4dFBvc2l0aW9uID0gY2xhbXBEcmFnUG9zaXRpb24oZXZlbnQuY2xpZW50WCAtIGRyYWdTdGF0ZS5vZmZzZXRYLCBldmVudC5jbGllbnRZIC0gZHJhZ1N0YXRlLm9mZnNldFkpXG5cbiAgICAgIHNldERyYWdQb3NpdGlvbihwcmV2ID0+IHtcbiAgICAgICAgaWYgKHByZXYgJiYgcHJldi54ID09PSBuZXh0UG9zaXRpb24ueCAmJiBwcmV2LnkgPT09IG5leHRQb3NpdGlvbi55KSB7XG4gICAgICAgICAgcmV0dXJuIHByZXZcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV4dFBvc2l0aW9uXG4gICAgICB9KVxuICAgIH0sXG4gICAgW2NsYW1wRHJhZ1Bvc2l0aW9uLCBzYW1wbGVQb2ludGVyTW92ZV1cbiAgKVxuXG4gIGNvbnN0IHJlc29sdmVkRHJhZ1Bvc2l0aW9uID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKGxheW91dE1vZGUgIT09ICdmbG9hdGluZycpIHtcbiAgICAgIHJldHVybiBkcmFnUG9zaXRpb25cbiAgICB9XG4gICAgaWYgKGRyYWdQb3NpdGlvbikge1xuICAgICAgcmV0dXJuIGRyYWdQb3NpdGlvblxuICAgIH1cbiAgICBjb25zdCBwYWQgPSAxNlxuICAgIGNvbnN0IHggPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdy5pbm5lcldpZHRoIC0gZ2V0TWFpYUZsb2F0aW5nUGFuZWxXaWR0aFB4KCkgLSBwYWQgOiBwYWRcbiAgICByZXR1cm4gY2xhbXBEcmFnUG9zaXRpb24oeCwgcGFkKVxuICB9LCBbbGF5b3V0TW9kZSwgZHJhZ1Bvc2l0aW9uLCBjbGFtcERyYWdQb3NpdGlvbl0pXG5cbiAgY29uc3QgaGFuZGxlRHJhZ1N0YXJ0ID0gdXNlQ2FsbGJhY2soXG4gICAgKGV2ZW50OiBSZWFjdFBvaW50ZXJFdmVudDxIVE1MRGl2RWxlbWVudD4pID0+IHtcbiAgICAgIGlmICghaXNGbG9hdGluZyB8fCBldmVudC5idXR0b24gIT09IDApIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudFxuICAgICAgaWYgKHRhcmdldC5jbG9zZXN0KCdidXR0b24sIGEsIGlucHV0LCB0ZXh0YXJlYSwgc2VsZWN0LCBbcm9sZT1cImJ1dHRvblwiXSwgW2RhdGEtbm8tZHJhZz1cInRydWVcIl0nKSkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgY29udGVudFdyYXBwZXIgPSBjb250ZW50V3JhcHBlclJlZi5jdXJyZW50XG4gICAgICBpZiAoIWNvbnRlbnRXcmFwcGVyKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCByZWN0ID0gY29udGVudFdyYXBwZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgICAgIGNvbnN0IGluaXRpYWxQb3NpdGlvbiA9IHJlc29sdmVkRHJhZ1Bvc2l0aW9uID8/IGNsYW1wRHJhZ1Bvc2l0aW9uKHJlY3QubGVmdCwgcmVjdC50b3ApXG4gICAgICBjb25zdCBwb2ludGVyT2Zmc2V0WCA9IGV2ZW50LmNsaWVudFggLSBpbml0aWFsUG9zaXRpb24ueFxuICAgICAgY29uc3QgcG9pbnRlck9mZnNldFkgPSBldmVudC5jbGllbnRZIC0gaW5pdGlhbFBvc2l0aW9uLnlcblxuICAgICAgc2V0RHJhZ1Bvc2l0aW9uKGluaXRpYWxQb3NpdGlvbilcbiAgICAgIGRyYWdTdGF0ZVJlZi5jdXJyZW50ID0ge1xuICAgICAgICBwb2ludGVySWQ6IGV2ZW50LnBvaW50ZXJJZCxcbiAgICAgICAgb2Zmc2V0WDogcG9pbnRlck9mZnNldFgsXG4gICAgICAgIG9mZnNldFk6IHBvaW50ZXJPZmZzZXRZLFxuICAgICAgfVxuXG4gICAgICBldmVudC5jdXJyZW50VGFyZ2V0LnNldFBvaW50ZXJDYXB0dXJlKGV2ZW50LnBvaW50ZXJJZClcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcblxuICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS51c2VyU2VsZWN0ID0gJ25vbmUnXG4gICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLmN1cnNvciA9ICdncmFiYmluZydcbiAgICAgIGFtcGxpdHVkRXZlbnQoRVZFTlRTLmFpQ2hhdERyYWdnYWJsZSlcbiAgICAgIHN0YXJ0UG9pbnRlclRyYWNraW5nKGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkpXG4gICAgfSxcbiAgICBbY2xhbXBEcmFnUG9zaXRpb24sIGlzRmxvYXRpbmcsIHJlc29sdmVkRHJhZ1Bvc2l0aW9uLCBzdGFydFBvaW50ZXJUcmFja2luZ11cbiAgKVxuXG4gIGNvbnN0IHN0YXJ0Q2hhdCA9IHVzZUNhbGxiYWNrKFxuICAgIChcbiAgICAgIG1lc3NhZ2U/OiBzdHJpbmcsXG4gICAgICBhdHRhY2htZW50cz86IEF0dGFjaG1lbnRGaWxlW10sXG4gICAgICBmYXFJZD86IHN0cmluZyxcbiAgICAgIGFnZW50U3VnZ2VzdGlvbklkPzogc3RyaW5nLFxuICAgICAgbWVudGlvbnM/OiBDb250ZXh0TWVudGlvbltdLFxuICAgICAgZnVhSWQ/OiBzdHJpbmcsXG4gICAgICBzY0lkPzogc3RyaW5nLFxuICAgICAgY29udGV4dERhdGE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICAgICkgPT4ge1xuICAgICAgaWYgKHNpZGViYXJIYXNFcnJvcikge1xuICAgICAgICBzZXRTaWRlYmFySGFzRXJyb3IoZmFsc2UpXG4gICAgICB9XG4gICAgICBzZXRJbml0aWFsQ2hhdElkKG51bGwpXG4gICAgICBzZXROZXdDaGF0S2V5KHByZXYgPT4gcHJldiArIDEpXG4gICAgICBzZXRVc2VySW5pdGlhbE1lc3NhZ2Uoe1xuICAgICAgICBtZXNzYWdlOiBtZXNzYWdlIHx8ICcnLFxuICAgICAgICBhdHRhY2htZW50czogYXR0YWNobWVudHMgfHwgW10sXG4gICAgICAgIC4uLihmYXFJZCA/IHsgZmFxSWQgfSA6IHt9KSxcbiAgICAgICAgLi4uKGFnZW50U3VnZ2VzdGlvbklkID8geyBhZ2VudFN1Z2dlc3Rpb25JZCB9IDoge30pLFxuICAgICAgICAuLi4obWVudGlvbnMgJiYgbWVudGlvbnMubGVuZ3RoID4gMCA/IHsgbWVudGlvbnMgfSA6IHt9KSxcbiAgICAgICAgLi4uKGZ1YUlkID8geyBmdWFJZCB9IDoge30pLFxuICAgICAgICAuLi4oc2NJZCA/IHsgc2NJZCB9IDoge30pLFxuICAgICAgICAuLi4oY29udGV4dERhdGEgPyB7IGNvbnRleHREYXRhIH0gOiB7fSksXG4gICAgICB9KVxuICAgICAgaGFuZGxlcnMuY2hhdCgpXG4gICAgfSxcbiAgICBbaGFuZGxlcnMsIHNpZGViYXJIYXNFcnJvcl1cbiAgKVxuXG4gIGNvbnN0IGJhbm5lckZhcUF1dG9TZW50UmVmID0gdXNlUmVmKGZhbHNlKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgZW50aXR5UmVhZHkgPSBzZWN0aW9uID09PSAncHJvamVjdCcgPyBCb29sZWFuKHByb2plY3Q/LmlkKSA6IHNlY3Rpb24gPT09ICdjbGllbnQnID8gQm9vbGVhbihjbGllbnQ/LmlkKSA6IHRydWVcblxuICAgIGlmICghYmFubmVyRW50cnlGYXE/LmZhcVRpdGxlPy50cmltKCkgfHwgYmFubmVyRmFxQXV0b1NlbnRSZWYuY3VycmVudCB8fCBsb2FkaW5nIHx8ICFhZ2VudD8uaWQgfHwgIWVudGl0eVJlYWR5KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBiYW5uZXJGYXFBdXRvU2VudFJlZi5jdXJyZW50ID0gdHJ1ZVxuICAgIHN0YXJ0Q2hhdChcbiAgICAgIGJhbm5lckVudHJ5RmFxLmZhcVRpdGxlLFxuICAgICAgW10sXG4gICAgICBiYW5uZXJFbnRyeUZhcS5mYXFJZCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIGJhbm5lckVudHJ5RmFxLmNvbnRleHREYXRhXG4gICAgKVxuICB9LCBbXG4gICAgYmFubmVyRW50cnlGYXE/LmZhcUlkLFxuICAgIGJhbm5lckVudHJ5RmFxPy5mYXFUaXRsZSxcbiAgICBiYW5uZXJFbnRyeUZhcT8uY29udGV4dERhdGEsXG4gICAgbG9hZGluZyxcbiAgICBhZ2VudD8uaWQsXG4gICAgYWdlbnQ/LmVudGl0eSxcbiAgICBwcm9qZWN0Py5pZCxcbiAgICBjbGllbnQ/LmlkLFxuICAgIHNlY3Rpb24sXG4gICAgc3RhcnRDaGF0LFxuICBdKVxuXG4gIGNvbnN0IGdvVG9DaGF0ID0gdXNlQ2FsbGJhY2soXG4gICAgKGNoYXQ6IGFueSkgPT4ge1xuICAgICAgc2V0VXNlckluaXRpYWxNZXNzYWdlKHsgbWVzc2FnZTogJycsIGF0dGFjaG1lbnRzOiBbXSB9KVxuICAgICAgc2V0SW5pdGlhbENoYXRJZChjaGF0LnNlc3Npb25FeHRlcm5hbElkKVxuICAgICAgY29uc3Qgc2VsZWN0ZWRBZ2VudCA9IGFnZW50cy5kYXRhLmZpbmQoYWdlbnRJdGVtID0+IGFnZW50SXRlbS5pZCA9PT0gY2hhdC5hZ2VudElkKVxuICAgICAgaWYgKHNlbGVjdGVkQWdlbnQpIHtcbiAgICAgICAgc2VsZWN0QWdlbnQoc2VsZWN0ZWRBZ2VudClcbiAgICAgIH1cbiAgICAgIC8vIERpc3BhdGNoIGV2ZW50IHRvIGNsZWFyIHRoZSBpbnB1dCB0ZXh0YXJlYVxuICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2NoYXQtc2Vzc2lvbi1jaGFuZ2VkJykpXG4gICAgICBoYW5kbGVycy5jaGF0KClcbiAgICB9LFxuICAgIFtoYW5kbGVycywgYWdlbnRzLCBzZWxlY3RBZ2VudF1cbiAgKVxuXG4gIGdvVG9DaGF0UmVmLmN1cnJlbnQgPSBnb1RvQ2hhdFxuXG4gIGNvbnN0IGhhbmRsZVNpZGViYXJPcGVuQ2hhbmdlID0gdXNlQ2FsbGJhY2soXG4gICAgKG9wZW46IGJvb2xlYW4pID0+IHtcbiAgICAgIHNpZGViYXJPcGVuUmVmLmN1cnJlbnQgPSBvcGVuXG4gICAgICBwYXRjaE1haWFQYW5lbFNlc3Npb24odXNlci5pZCwgeyBzaWRlYmFyT3Blbjogb3BlbiB9KVxuICAgIH0sXG4gICAgW3VzZXIuaWRdXG4gIClcblxuICBjb25zdCBzeW5jUGFuZWxTZXNzaW9uID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmIChpc01pbmltaXplZCkgcmV0dXJuXG5cbiAgICBwYXRjaE1haWFQYW5lbFNlc3Npb24odXNlci5pZCwge1xuICAgICAgaXNFeHBhbmRlZDogdHJ1ZSxcbiAgICAgIGN1cnJlbnRPcHRpb24sXG4gICAgICBhZ2VudHNOYXZBY3RpdmU6IHNpZGViYXJBZ2VudHNOYXZBY3RpdmUsXG4gICAgICBhY3RpdmVDaGF0SWQsXG4gICAgICBhZ2VudElkOiBhZ2VudD8uaWQgPz8gbnVsbCxcbiAgICAgIHNpZGViYXJPcGVuOiBzaWRlYmFyT3BlblJlZi5jdXJyZW50LFxuICAgICAgZHJhZ1Bvc2l0aW9uOiBsYXlvdXRNb2RlID09PSAnZmxvYXRpbmcnID8gZHJhZ1Bvc2l0aW9uIDogbnVsbCxcbiAgICAgIGhvc3RDb250ZXh0OiB7XG4gICAgICAgIHNlY3Rpb24sXG4gICAgICAgIHByb2plY3QsXG4gICAgICAgIGNsaWVudCxcbiAgICAgICAgdGFzayxcbiAgICAgICAgY2hpcHNQcm9qZWN0LFxuICAgICAgfSxcbiAgICB9KVxuICB9LCBbXG4gICAgYWN0aXZlQ2hhdElkLFxuICAgIGFnZW50Py5pZCxcbiAgICBjaGlwc1Byb2plY3QsXG4gICAgY2xpZW50LFxuICAgIGN1cnJlbnRPcHRpb24sXG4gICAgZHJhZ1Bvc2l0aW9uLFxuICAgIGlzTWluaW1pemVkLFxuICAgIGxheW91dE1vZGUsXG4gICAgcHJvamVjdCxcbiAgICBzZWN0aW9uLFxuICAgIHNpZGViYXJBZ2VudHNOYXZBY3RpdmUsXG4gICAgdGFzayxcbiAgICB1c2VyLmlkLFxuICBdKVxuXG4gIC8qKiBMb3MgYWdlbnRlcyBzZSBwaWRlbiByZWNpw6luIGFsIGFicmlyIGVsIHBhbmVsOiBlbiBtb2RvIHBpbGwgbm8gaGFjZSBmYWx0YSBuaW5ndW5hIHJlcXVlc3QuICovXG4gIGNvbnN0IGVuc3VyZUFnZW50c0xvYWRlZCA9IHVzZUNhbGxiYWNrKGFzeW5jICgpID0+IHtcbiAgICBpZiAoYWdlbnRzRmV0Y2hlZFJlZi5jdXJyZW50KSByZXR1cm5cbiAgICBhZ2VudHNGZXRjaGVkUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgYXdhaXQgaGFuZGxlR2V0QWdlbnRzKClcbiAgfSwgW2hhbmRsZUdldEFnZW50c10pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaXNNaW5pbWl6ZWQpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICB9XG5cbiAgICBjb25zdCB0aW1lciA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHN5bmNQYW5lbFNlc3Npb24oKSwgMTUwKVxuICAgIHJldHVybiAoKSA9PiB3aW5kb3cuY2xlYXJUaW1lb3V0KHRpbWVyKVxuICB9LCBbaXNNaW5pbWl6ZWQsIHN5bmNQYW5lbFNlc3Npb25dKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3Qgb25QYWdlSGlkZSA9ICgpID0+IHtcbiAgICAgIGlmICghaXNNaW5pbWl6ZWQpIHtcbiAgICAgICAgc3luY1BhbmVsU2Vzc2lvbigpXG4gICAgICB9XG4gICAgfVxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdwYWdlaGlkZScsIG9uUGFnZUhpZGUpXG4gICAgcmV0dXJuICgpID0+IHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdwYWdlaGlkZScsIG9uUGFnZUhpZGUpXG4gIH0sIFtpc01pbmltaXplZCwgc3luY1BhbmVsU2Vzc2lvbl0pXG5cbiAgY29uc3QgaGFuZGxlUmVzdG9yZUZyb21NaW5pbWl6ZWQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2V0SXNNaW5pbWl6ZWQoZmFsc2UpXG4gICAgc2V0Q2hhdFZpZXdWaXNpYmxlKHRydWUpXG4gICAgYW1wbGl0dWRFdmVudChFVkVOVFMuYWlDaGF0T3BlbiwgeyBvcHRpb246ICdtaW5pbWl6ZScgfSlcblxuICAgIC8vIGdvVG9DaGF0IG5lY2VzaXRhIGxhIGxpc3RhIGRlIGFnZW50ZXMgcGFyYSBzZWxlY2Npb25hciBlbCBkZSBsYSBjb252ZXJzYWNpw7NuLlxuICAgIGVuc3VyZUFnZW50c0xvYWRlZCgpLnRoZW4oKCkgPT4ge1xuICAgICAgLy8gUHJpb3JpZGFkIGFsIHJlYWJyaXI6IHByaW1lciBjaGF0IHNpbiBsZWVyIOKGkiDDumx0aW1hIGNvbnZlcnNhY2nDs24gYWJpZXJ0YSDihpIgSG9tZS5cbiAgICAgIGNvbnN0IHsgY2hhdHMgfSA9IGdldENoYXRzU3RvcmVTdGF0ZSgpXG4gICAgICBjb25zdCBsYXN0QWN0aXZlQ2hhdElkID0gcmVhZExhc3RBY3RpdmVDaGF0SWQodXNlci5pZClcbiAgICAgIGNvbnN0IHRhcmdldCA9XG4gICAgICAgIGNoYXRzLmZpbmQoY2hhdCA9PiBjaGF0LmlzUmVhZCA9PT0gZmFsc2UpID8/XG4gICAgICAgIChsYXN0QWN0aXZlQ2hhdElkID8gY2hhdHMuZmluZChjaGF0ID0+IGNoYXQuc2Vzc2lvbkV4dGVybmFsSWQgPT09IGxhc3RBY3RpdmVDaGF0SWQpIDogdW5kZWZpbmVkKVxuXG4gICAgICBpZiAodGFyZ2V0KSB7XG4gICAgICAgIGdvVG9DaGF0UmVmLmN1cnJlbnQ/Lih0YXJnZXQpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBnb0hvbWVSZWYuY3VycmVudD8uKClcbiAgICAgIH1cblxuICAgICAgZm9jdXNDaGF0SW5wdXQoKVxuICAgIH0pXG4gIH0sIFthbXBsaXR1ZEV2ZW50LCBlbnN1cmVBZ2VudHNMb2FkZWQsIGZvY3VzQ2hhdElucHV0LCBzZXRDaGF0Vmlld1Zpc2libGUsIHVzZXIuaWRdKVxuXG4gIC8qKlxuICAgKiBUb21hIGNvbnRyb2wgZGVzZGUgdW4gaG9zdCAoaGVhZGVyLCBwcm95ZWN0bywgY2xpZW50ZeKApik6IGFicmUgZWwgcGFuZWwsIGRlc2NhcnRhIGxhXG4gICAqIGNvbnZlcnNhY2nDs24gYWJpZXJ0YSB5IGFwbGljYSBlbCBjb250ZXh0byBkZWwgaG9zdC4gTk8gdnVlbHZlIGEgbGEgw7psdGltYSBjb252ZXJzYWNpw7NuXG4gICAqIOKAlCBlc28gc8OzbG8gbG8gaGFjZSBlbCBwaWxsIChgaGFuZGxlUmVzdG9yZUZyb21NaW5pbWl6ZWRgKS5cbiAgICovXG4gIGNvbnN0IGFwcGx5RXhwYW5kZWRIb3N0VGFrZW92ZXIgPSB1c2VDYWxsYmFjayhcbiAgICAoZGV0YWlsOiBNYWlhSG9zdE9wZW5EZXRhaWwpID0+IHtcbiAgICAgIGNsZWFyTWFpYVBhbmVsU2Vzc2lvbih1c2VyLmlkKVxuICAgICAgc2V0SXNNaW5pbWl6ZWQoZmFsc2UpXG4gICAgICBzZXRDaGF0Vmlld1Zpc2libGUodHJ1ZSlcbiAgICAgIHdyaXRlTGFzdEFjdGl2ZUNoYXRJZCh1c2VyLmlkLCBudWxsKVxuICAgICAgZW5zdXJlQWdlbnRzTG9hZGVkKClcblxuICAgICAgc2V0SW5pdGlhbENoYXRJZChudWxsKVxuICAgICAgc2V0TmV3Q2hhdEtleShwcmV2ID0+IHByZXYgKyAxKVxuICAgICAgc2V0VXNlckluaXRpYWxNZXNzYWdlKHsgbWVzc2FnZTogJycsIGF0dGFjaG1lbnRzOiBbXSB9KVxuICAgICAgc2V0Q3VycmVudE9wdGlvbihvcHRpb25zLmhvbWUpXG4gICAgICBzZXREaWRSZXNldENvbnRleHRJblNlY3Rpb24oZmFsc2UpXG4gICAgICBzZXRIYXNFcnJvcihmYWxzZSlcbiAgICAgIHNldElzV3JpdGluZyhmYWxzZSlcbiAgICAgIHVzZUZhcXNTdG9yZS5nZXRTdGF0ZSgpLmNsZWFyRmFxcygpXG4gICAgICBiYW5uZXJGYXFBdXRvU2VudFJlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgIHJlc2V0U2VsZWN0ZWRDaGF0UmVmLmN1cnJlbnQ/LigpXG4gICAgICBnZXRDaGF0c1N0b3JlU3RhdGUoKS5zZXRBY3RpdmVDaGF0SWQobnVsbClcbiAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdjaGF0LXNlc3Npb24tY2hhbmdlZCcpKVxuXG4gICAgICBpZiAoZGV0YWlsLnNlY3Rpb24gPT09ICdwcm9qZWN0JyB8fCBkZXRhaWwuc2VjdGlvbiA9PT0gJ3Rhc2snKSB7XG4gICAgICAgIHNldFByb2plY3Q/LihkZXRhaWwucHJvamVjdCA/PyBudWxsKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2V0UHJvamVjdD8uKG51bGwpXG4gICAgICB9XG5cbiAgICAgIGlmIChkZXRhaWwuc2VjdGlvbiA9PT0gJ2NsaWVudCcpIHtcbiAgICAgICAgc2V0Q2xpZW50Py4oZGV0YWlsLmNsaWVudCA/PyBudWxsKVxuICAgICAgfSBlbHNlIGlmIChkZXRhaWwuc2VjdGlvbiA9PT0gJ2hlYWRlcicgfHwgZGV0YWlsLnNlY3Rpb24gPT09ICdwbGFubmVyJykge1xuICAgICAgICBzZXRDbGllbnQ/LihudWxsKVxuICAgICAgfVxuXG4gICAgICBpZiAoZGV0YWlsLnNlY3Rpb24gPT09ICd0YXNrJykge1xuICAgICAgICBzZXRUYXNrPy4oZGV0YWlsLnRhc2sgPz8gbnVsbClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNldFRhc2s/LihudWxsKVxuICAgICAgfVxuXG4gICAgICBpZiAoZGV0YWlsLnNlY3Rpb24gPT09ICdoZWFkZXInIHx8IGRldGFpbC5zZWN0aW9uID09PSAncGxhbm5lcicpIHtcbiAgICAgICAgc2V0Q2hpcHNQcm9qZWN0KG51bGwpXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5leHRMYXlvdXQgPSByZXNvbHZlSW5pdGlhbE1haWFDaGF0TGF5b3V0TW9kZSh7XG4gICAgICAgIHNlY3Rpb246IGRldGFpbC5zZWN0aW9uIGFzIFNlY3Rpb24sXG4gICAgICAgIGJhbm5lckVudHJ5RmFxOiBkZXRhaWwuZmFxLFxuICAgICAgfSlcbiAgICAgIHNldExheW91dE1vZGUobmV4dExheW91dClcbiAgICAgIHNldERyYWdQb3NpdGlvbihudWxsKVxuXG4gICAgICBmb2N1c0NoYXRJbnB1dCgpXG4gICAgICBwYXRjaE1haWFQYW5lbFNlc3Npb24odXNlci5pZCwge1xuICAgICAgICBpc0V4cGFuZGVkOiB0cnVlLFxuICAgICAgICBjdXJyZW50T3B0aW9uOiBvcHRpb25zLmhvbWUsXG4gICAgICAgIGFnZW50c05hdkFjdGl2ZTogbnVsbCxcbiAgICAgICAgYWN0aXZlQ2hhdElkOiBudWxsLFxuICAgICAgICBhZ2VudElkOiBhZ2VudD8uaWQgPz8gbnVsbCxcbiAgICAgICAgc2lkZWJhck9wZW46IHNpZGViYXJPcGVuUmVmLmN1cnJlbnQsXG4gICAgICAgIGRyYWdQb3NpdGlvbjogbnVsbCxcbiAgICAgICAgaG9zdENvbnRleHQ6IHtcbiAgICAgICAgICBzZWN0aW9uOiBkZXRhaWwuc2VjdGlvbiBhcyBTZWN0aW9uLFxuICAgICAgICAgIHByb2plY3Q6IGRldGFpbC5zZWN0aW9uID09PSAncHJvamVjdCcgfHwgZGV0YWlsLnNlY3Rpb24gPT09ICd0YXNrJyA/IChkZXRhaWwucHJvamVjdCA/PyBudWxsKSA6IG51bGwsXG4gICAgICAgICAgY2xpZW50OiBkZXRhaWwuc2VjdGlvbiA9PT0gJ2NsaWVudCcgPyAoZGV0YWlsLmNsaWVudCA/PyBudWxsKSA6IG51bGwsXG4gICAgICAgICAgdGFzazogZGV0YWlsLnNlY3Rpb24gPT09ICd0YXNrJyA/IChkZXRhaWwudGFzayA/PyBudWxsKSA6IG51bGwsXG4gICAgICAgICAgY2hpcHNQcm9qZWN0OiBudWxsLFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICB9LFxuICAgIFtcbiAgICAgIGFnZW50Py5pZCxcbiAgICAgIGVuc3VyZUFnZW50c0xvYWRlZCxcbiAgICAgIGZvY3VzQ2hhdElucHV0LFxuICAgICAgc2V0Q2hhdFZpZXdWaXNpYmxlLFxuICAgICAgc2V0Q2hpcHNQcm9qZWN0LFxuICAgICAgc2V0Q2xpZW50LFxuICAgICAgc2V0UHJvamVjdCxcbiAgICAgIHNldFRhc2ssXG4gICAgICB1c2VyLmlkLFxuICAgIF1cbiAgKVxuXG4gIGNvbnN0IGhhbmRsZVNlbmRNZXNzYWdlUmVhZHkgPSB1c2VDYWxsYmFjayhcbiAgICAoXG4gICAgICBzZW5kTWVzc2FnZTogKFxuICAgICAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgICAgIGF0dGFjaG1lbnRzPzogQXR0YWNobWVudEZpbGVbXSxcbiAgICAgICAgZmFxSWQ/OiBzdHJpbmcsXG4gICAgICAgIGFnZW50U3VnZ2VzdGlvbklkPzogc3RyaW5nLFxuICAgICAgICBtZW50aW9ucz86IENvbnRleHRNZW50aW9uW10sXG4gICAgICAgIGZ1YUlkPzogc3RyaW5nLFxuICAgICAgICBzY0lkPzogc3RyaW5nXG4gICAgICApID0+IHZvaWQsXG4gICAgICBzdG9wR2VuZXJhdGlvbjogKCkgPT4gdm9pZCxcbiAgICAgIHN0cmVhbWluZzogYm9vbGVhbixcbiAgICAgIHdyaXRpbmc6IGJvb2xlYW5cbiAgICApID0+IHtcbiAgICAgIHNldFNlbmRNZXNzYWdlRnVuY3Rpb24oKCkgPT4gc2VuZE1lc3NhZ2UpXG4gICAgICBzZXRTdG9wR2VuZXJhdGlvbkZ1bmN0aW9uKCgpID0+IHN0b3BHZW5lcmF0aW9uKVxuICAgICAgc2V0SXNTdHJlYW1pbmcoc3RyZWFtaW5nKVxuICAgICAgc2V0SXNXcml0aW5nKHdyaXRpbmcpXG4gICAgfSxcbiAgICBbXVxuICApXG5cbiAgY29uc3QgaGFuZGxlU2VuZE1lc3NhZ2UgPSB1c2VDYWxsYmFjayhcbiAgICAoXG4gICAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgICBhdHRhY2htZW50cz86IEF0dGFjaG1lbnRGaWxlW10sXG4gICAgICBmYXFJZD86IHN0cmluZyxcbiAgICAgIGFnZW50U3VnZ2VzdGlvbklkPzogc3RyaW5nLFxuICAgICAgbWVudGlvbnM/OiBDb250ZXh0TWVudGlvbltdLFxuICAgICAgZnVhSWQ/OiBzdHJpbmcsXG4gICAgICBzY0lkPzogc3RyaW5nXG4gICAgKSA9PiB7XG4gICAgICBpZiAoc2lkZWJhckhhc0Vycm9yKSB7XG4gICAgICAgIHNldFNpZGViYXJIYXNFcnJvcihmYWxzZSlcbiAgICAgIH1cbiAgICAgIGlmIChzZW5kTWVzc2FnZUZ1bmN0aW9uICYmIGNvbXB1dGVkQ3VycmVudE9wdGlvbiA9PT0gb3B0aW9ucy5jaGF0KSB7XG4gICAgICAgIHNlbmRNZXNzYWdlRnVuY3Rpb24obWVzc2FnZSwgYXR0YWNobWVudHMsIGZhcUlkLCBhZ2VudFN1Z2dlc3Rpb25JZCwgbWVudGlvbnMsIGZ1YUlkLCBzY0lkKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RhcnRDaGF0KG1lc3NhZ2UsIGF0dGFjaG1lbnRzLCBmYXFJZCwgYWdlbnRTdWdnZXN0aW9uSWQsIG1lbnRpb25zLCBmdWFJZCwgc2NJZClcbiAgICAgIH1cbiAgICB9LFxuICAgIFtzZW5kTWVzc2FnZUZ1bmN0aW9uLCBzdGFydENoYXQsIGNvbXB1dGVkQ3VycmVudE9wdGlvbiwgc2lkZWJhckhhc0Vycm9yXVxuICApXG5cbiAgY29uc3QgaGFuZGxlR29Ib21lID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIC8vIFNpIGVzdGFtb3MgZW4gdW5hIGNvbnZlcnNhY2nDs24geSB2YW1vcyBhIGhvbWUsIHJlc2V0ZWFyIGluaXRpYWxDaGF0SWQgeSBpbmNyZW1lbnRhciBuZXdDaGF0S2V5XG4gICAgaWYgKGN1cnJlbnRPcHRpb24gPT09IG9wdGlvbnMuY2hhdCkge1xuICAgICAgLy8gTm8gY29ydGFtb3MgbGEgZ2VuZXJhY2nDs246IGxhIHNlc2nDs24gc2lndWUgcmVzcG9uZGllbmRvIGVuIGJhY2tncm91bmQuXG4gICAgICBzZXRJbml0aWFsQ2hhdElkKG51bGwpXG4gICAgICBzZXROZXdDaGF0S2V5KHByZXYgPT4gcHJldiArIDEpXG4gICAgICBzZXRJc1dyaXRpbmcoZmFsc2UpXG4gICAgICAvLyBObyBib3JyYXIgZWwgY2xpZW50ZSBzaSBlcyBhZ2VudGUgZGUgY2xpZW50ZXMgKGlndWFsIHF1ZSBlbCBwcm95ZWN0byBzZSBtYW50aWVuZSlcbiAgICAgIGlmIChhZ2VudD8uZW50aXR5ICE9PSAnY2xpZW50Jykge1xuICAgICAgICBzZXRDbGllbnQ/LihudWxsKVxuICAgICAgfVxuICAgICAgaWYgKHNlY3Rpb24gIT09ICd0YXNrJykge1xuICAgICAgICBzZXRUYXNrPy4obnVsbClcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKFxuICAgICAgKCFhZ2VudCB8fCBhZ2VudD8uaXNfZGVsZXRlZCB8fCBhZ2VudD8uaGFzX25vdF9wZXJtaXNzaW9ucyB8fCBhZ2VudD8uaGFzX25vdF9hY2Nlc3MgfHwgYWdlbnQ/LnByb2plY3RfZGVsZXRlZCkgJiZcbiAgICAgIGFnZW50cy5kYXRhLmxlbmd0aCA+IDBcbiAgICApIHtcbiAgICAgIHNlbGVjdEFnZW50KGFnZW50cy5kYXRhWzBdKVxuICAgIH1cbiAgICAvLyBPcmNoZXN0cmF0b3IgZW4gaG9tZSBnbG9iYWwgKGhlYWRlci9wbGFubmVyKTogYWwgaW5pY2lhciB1biBjaGF0IG51ZXZvIHNlIGRlYmUgdm9sdmVyIGFsIHBhc28gMVxuICAgIC8vIChsaXN0YSBkZSBjb250ZXh0b3MgcmVjaWVudGVzKSwgcG9yIGxvIHF1ZSBoYXkgcXVlIGxpbXBpYXIgdG9kbyBlbCBjb250ZXh0byBwaW5lYWRvLlxuICAgIGlmIChpc0dsb2JhbE1haWFTZWN0aW9uKHNlY3Rpb24pICYmIGFnZW50Py50eXBlID09PSAnb3JjaGVzdHJhdG9yJykge1xuICAgICAgc2V0UHJvamVjdChudWxsKVxuICAgICAgc2V0Q2xpZW50Py4obnVsbClcbiAgICAgIHNldFRhc2s/LihudWxsKVxuICAgIH1cbiAgICBzZXRDdXJyZW50T3B0aW9uKG9wdGlvbnMuaG9tZSlcbiAgICBzZXRDaGlwc1Byb2plY3QobnVsbClcbiAgICBzZXRIYXNFcnJvcihmYWxzZSlcbiAgICBpc1dlYlNlYXJjaEFjdGl2ZSAmJiB0b2dnbGVXZWJTZWFyY2goKVxuICAgIGlmIChyZXNldFNlbGVjdGVkQ2hhdFJlZi5jdXJyZW50KSB7XG4gICAgICByZXNldFNlbGVjdGVkQ2hhdFJlZi5jdXJyZW50KClcbiAgICB9XG4gIH0sIFtcbiAgICBvcHRpb25zLmhvbWUsXG4gICAgb3B0aW9ucy5jaGF0LFxuICAgIGN1cnJlbnRPcHRpb24sXG4gICAgaXNXZWJTZWFyY2hBY3RpdmUsXG4gICAgdG9nZ2xlV2ViU2VhcmNoLFxuICAgIGFnZW50LFxuICAgIGFnZW50cyxcbiAgICBzZWxlY3RBZ2VudCxcbiAgICBzZXRQcm9qZWN0LFxuICAgIHNldENsaWVudCxcbiAgICBzZXRUYXNrLFxuICAgIHN0b3BHZW5lcmF0aW9uRnVuY3Rpb24sXG4gICAgc2VjdGlvbixcbiAgXSlcblxuICBnb0hvbWVSZWYuY3VycmVudCA9IGhhbmRsZUdvSG9tZVxuXG4gIGNvbnN0IGhhbmRsZVN0YXJ0TmV3Q2hhdCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjb25zdCBmcm9tTXlBZ2VudHMgPSBjb21wdXRlZEN1cnJlbnRPcHRpb24gPT09IG9wdGlvbnMubXlBZ2VudHNcbiAgICBjb25zdCBmcm9tTWFpYWtlckhvbWUgPSBjb21wdXRlZEN1cnJlbnRPcHRpb24gPT09IG9wdGlvbnMuaG9tZSAmJiBpc01haWFrZXJBZ2VudFNlbGVjdGVkXG5cbiAgICBpZiAoZnJvbU15QWdlbnRzIHx8IGZyb21NYWlha2VySG9tZSkge1xuICAgICAgY29uc3QgZmlyc3RBZ2VudCA9IGFnZW50cy5kYXRhWzBdXG4gICAgICBpZiAoZmlyc3RBZ2VudCkge1xuICAgICAgICBzZXRQcm9qZWN0KG51bGwpXG4gICAgICAgIHNldENsaWVudD8uKG51bGwpXG4gICAgICAgIHNldFRhc2s/LihudWxsKVxuICAgICAgICBzZWxlY3RBZ2VudChmaXJzdEFnZW50KVxuICAgICAgfVxuICAgICAgc2V0SW5pdGlhbENoYXRJZChudWxsKVxuICAgICAgc2V0TmV3Q2hhdEtleShwcmV2ID0+IHByZXYgKyAxKVxuICAgICAgc2V0Q3VycmVudE9wdGlvbihvcHRpb25zLmhvbWUpXG4gICAgICBzZXRDaGlwc1Byb2plY3QobnVsbClcbiAgICAgIHNldEhhc0Vycm9yKGZhbHNlKVxuICAgICAgaWYgKGlzV2ViU2VhcmNoQWN0aXZlKSB0b2dnbGVXZWJTZWFyY2goKVxuICAgICAgcmVzZXRTZWxlY3RlZENoYXRSZWYuY3VycmVudD8uKClcbiAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdjaGF0LXNlc3Npb24tY2hhbmdlZCcpKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaGFuZGxlR29Ib21lKClcbiAgfSwgW1xuICAgIGFnZW50cy5kYXRhLFxuICAgIGNvbXB1dGVkQ3VycmVudE9wdGlvbixcbiAgICBoYW5kbGVHb0hvbWUsXG4gICAgaXNNYWlha2VyQWdlbnRTZWxlY3RlZCxcbiAgICBpc1dlYlNlYXJjaEFjdGl2ZSxcbiAgICBzZWxlY3RBZ2VudCxcbiAgICBzZXRDbGllbnQsXG4gICAgc2V0UHJvamVjdCxcbiAgICBzZXRUYXNrLFxuICAgIHRvZ2dsZVdlYlNlYXJjaCxcbiAgXSlcblxuICBjb25zdCBoYW5kbGVSZXNldENoYXQgPSB1c2VDYWxsYmFjayhhc3luYyAoKSA9PiB7XG4gICAgc2V0VXNlckluaXRpYWxNZXNzYWdlKHsgbWVzc2FnZTogJycsIGF0dGFjaG1lbnRzOiBbXSB9KVxuICAgIHNldEluaXRpYWxDaGF0SWQobnVsbClcbiAgICAvLyBEaXNwYXRjaCBldmVudCB0byBjbGVhciB0aGUgaW5wdXQgdGV4dGFyZWFcbiAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnY2hhdC1zZXNzaW9uLWNoYW5nZWQnKSlcbiAgICBoYW5kbGVHb0hvbWUoKVxuICB9LCBbaGFuZGxlR29Ib21lXSlcblxuICAvLyBCb3TDs24gXCJ2b2x2ZXJcIiBkZWwgaGVhZGVyIChzb2xvIG9yY2hlc3RyYXRvcik6XG4gIC8vIC0gRGVzZGUgZWwgY2hhdCAoaGVhZGVyIG8gcHJvamVjdC9jbGllbnQvdGFzayk6IGluaWNpYSB1bmEgY29udmVyc2FjacOzbiBudWV2YSBjb25zZXJ2YW5kbyBlbFxuICAvLyAgIGNvbnRleHRvIHBpbmVhZG8geSB2dWVsdmUgYWwgaG9tZSAocGFzbyAyIGNvbiBGQVFzL0ZVQXMpLlxuICAvLyAtIEVuIGVsIGhvbWUgcGFzbyAyIChGQVFzL0ZVQXMgY29uIGNvbnRleHRvKTogbGltcGlhIGVsIGNvbnRleHRvIHBpbmVhZG8geSB2dWVsdmUgYWwgcGFzbyAxXG4gIC8vICAgKHNlbGVjdG9yIGRlIGNvbnRleHRvcyByZWNpZW50ZXMpLiBFbiBoZWFkZXIgc2llbXByZTsgZW4gcHJvamVjdC9jbGllbnQvdGFzayBzb2xvIHNpIGVsXG4gIC8vICAgdXN1YXJpbyByZWluaWNpw7MgZWwgY29udGV4dG8gKGRpZFJlc2V0Q29udGV4dEluU2VjdGlvbikuXG4gIGNvbnN0IGhhbmRsZUJhY2sgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY29uc3QgdG8gPSByZXNvbHZlQWlDaGF0QmFja0Rlc3RpbmF0aW9uKHNlY3Rpb24sIGFnZW50Py50eXBlLCBjb21wdXRlZEN1cnJlbnRPcHRpb24sIG9wdGlvbnMuaG9tZSlcbiAgICBhbXBsaXR1ZEV2ZW50KEVWRU5UUy5haUNoYXRCYWNrLCB7IHRvIH0pXG5cbiAgICAvLyBEZXNkZSBlbCBjaGF0IOKGkiBudWV2YSBjb252ZXJzYWNpw7NuIFNJTiBib3JyYXIgZWwgY29udGV4dG8gcGluZWFkbywgdm9sdmllbmRvIGFsIGhvbWUuXG4gICAgaWYgKGNvbXB1dGVkQ3VycmVudE9wdGlvbiA9PT0gb3B0aW9ucy5jaGF0KSB7XG4gICAgICAvLyBObyBjb3J0YW1vcyBsYSBnZW5lcmFjacOzbjogbGEgc2VzacOzbiBzaWd1ZSByZXNwb25kaWVuZG8gZW4gYmFja2dyb3VuZC5cbiAgICAgIHNldElzV3JpdGluZyhmYWxzZSlcbiAgICAgIHNldFVzZXJJbml0aWFsTWVzc2FnZSh7IG1lc3NhZ2U6ICcnLCBhdHRhY2htZW50czogW10gfSlcbiAgICAgIHNldEluaXRpYWxDaGF0SWQobnVsbClcbiAgICAgIHNldE5ld0NoYXRLZXkocHJldiA9PiBwcmV2ICsgMSlcbiAgICAgIHNldEhhc0Vycm9yKGZhbHNlKVxuICAgICAgaXNXZWJTZWFyY2hBY3RpdmUgJiYgdG9nZ2xlV2ViU2VhcmNoKClcbiAgICAgIGlmIChyZXNldFNlbGVjdGVkQ2hhdFJlZi5jdXJyZW50KSB7XG4gICAgICAgIHJlc2V0U2VsZWN0ZWRDaGF0UmVmLmN1cnJlbnQoKVxuICAgICAgfVxuICAgICAgc2V0Q3VycmVudE9wdGlvbihvcHRpb25zLmhvbWUpXG4gICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnY2hhdC1zZXNzaW9uLWNoYW5nZWQnKSlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIEhvbWUgcGFzbyAyIChjb250ZXh0byBwaW5lYWRvKSDihpIgbGltcGlhciBlbCBjb250ZXh0byB5IHZvbHZlciBhbCBwYXNvIDEgKGNvbnRleHRvcyByZWNpZW50ZXMpLlxuICAgIGlmIChjb21wdXRlZEN1cnJlbnRPcHRpb24gPT09IG9wdGlvbnMuaG9tZSAmJiAoaXNHbG9iYWxNYWlhU2VjdGlvbihzZWN0aW9uKSB8fCBkaWRSZXNldENvbnRleHRJblNlY3Rpb24pKSB7XG4gICAgICBzZXRQcm9qZWN0KG51bGwpXG4gICAgICBzZXRDbGllbnQ/LihudWxsKVxuICAgICAgc2V0VGFzaz8uKG51bGwpXG4gICAgICBzZXRDaGlwc1Byb2plY3QobnVsbClcbiAgICB9XG4gIH0sIFtcbiAgICBjb21wdXRlZEN1cnJlbnRPcHRpb24sXG4gICAgc2VjdGlvbixcbiAgICBhZ2VudD8udHlwZSxcbiAgICBhbXBsaXR1ZEV2ZW50LFxuICAgIG9wdGlvbnMuaG9tZSxcbiAgICBzdG9wR2VuZXJhdGlvbkZ1bmN0aW9uLFxuICAgIGlzV2ViU2VhcmNoQWN0aXZlLFxuICAgIHRvZ2dsZVdlYlNlYXJjaCxcbiAgICBkaWRSZXNldENvbnRleHRJblNlY3Rpb24sXG4gICAgc2V0UHJvamVjdCxcbiAgICBzZXRDbGllbnQsXG4gICAgc2V0VGFzayxcbiAgICBzZXRDaGlwc1Byb2plY3QsXG4gIF0pXG5cbiAgLy8gRGV0ZWN0YSBlbCByZWluaWNpbyBkZSBjb250ZXh0byBlbiBwcm9qZWN0L2NsaWVudC90YXNrOiBjb250ZXh0byBwaW5lYWRvIOKGkiB2YWPDrW8gY29uIGVsXG4gIC8vIG9yY2hlc3RyYXRvciAocC4gZWouIGFsIHJlc2VsZWNjaW9uYXIgTUFJQSBlbiBlbCBsaXN0YWRvKS4gU29sbyBsYSB0cmFuc2ljacOzbiBjdWVudGEsIGFzw60gdW5hXG4gIC8vIGFwZXJ0dXJhIGZyZXNjYSAoY29udGV4dG8gcGluZWFkbyBkZXNkZSBsYSBzZWNjacOzbikgbm8gbG8gYWN0aXZhLlxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IHBpbm5lZCA9ICEhKHRhc2s/LmlkIHx8IGNoaXBzUHJvamVjdD8ucHJvamVjdElkIHx8IGNsaWVudD8uaWQgfHwgcHJvamVjdD8uaWQpXG4gICAgY29uc3Qgd2FzUGlubmVkID0gcHJldkhhc1Bpbm5lZENvbnRleHRSZWYuY3VycmVudFxuICAgIHByZXZIYXNQaW5uZWRDb250ZXh0UmVmLmN1cnJlbnQgPSBwaW5uZWRcbiAgICBpZiAoIWlzR2xvYmFsTWFpYVNlY3Rpb24oc2VjdGlvbikgJiYgYWdlbnQ/LnR5cGUgPT09ICdvcmNoZXN0cmF0b3InICYmIHdhc1Bpbm5lZCAmJiAhcGlubmVkKSB7XG4gICAgICBzZXREaWRSZXNldENvbnRleHRJblNlY3Rpb24odHJ1ZSlcbiAgICB9XG4gIH0sIFt0YXNrPy5pZCwgY2hpcHNQcm9qZWN0Py5wcm9qZWN0SWQsIGNsaWVudD8uaWQsIHByb2plY3Q/LmlkLCBzZWN0aW9uLCBhZ2VudD8udHlwZV0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBvbk1lcmdlQ3JlYXRlZEFnZW50ID0gKGV2dDogRXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IHsgYWdlbnQ6IG5leHRBZ2VudCB9ID0gKGV2dCBhcyBDdXN0b21FdmVudDx7IGFnZW50OiBBZ2VudCB9PikuZGV0YWlsIHx8IHt9XG4gICAgICBpZiAobmV4dEFnZW50Py5pZCkge1xuICAgICAgICBhZGRBZ2VudChuZXh0QWdlbnQsIHsgbmF2aWdhdGVIb21lOiBmYWxzZSB9KVxuICAgICAgfVxuICAgIH1cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtYWlhLW1lcmdlLWNyZWF0ZWQtYWdlbnQtaW50by1saXN0Jywgb25NZXJnZUNyZWF0ZWRBZ2VudClcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbWFpYS1tZXJnZS1jcmVhdGVkLWFnZW50LWludG8tbGlzdCcsIG9uTWVyZ2VDcmVhdGVkQWdlbnQpXG4gICAgfVxuICB9LCBbYWRkQWdlbnRdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3Qgb25TeW5jRWRpdGVkQWdlbnQgPSAoZXZ0OiBFdmVudCkgPT4ge1xuICAgICAgY29uc3QgeyBhZ2VudDogbmV4dEFnZW50IH0gPSAoZXZ0IGFzIEN1c3RvbUV2ZW50PHsgYWdlbnQ6IEFnZW50IH0+KS5kZXRhaWwgfHwge31cbiAgICAgIGlmICghbmV4dEFnZW50Py5pZCkgcmV0dXJuXG4gICAgICB1cGRhdGVBZ2VudChuZXh0QWdlbnQpXG4gICAgICBpZiAoYWdlbnQ/LmlkID09PSBuZXh0QWdlbnQuaWQpIHtcbiAgICAgICAgc2VsZWN0QWdlbnQobmV4dEFnZW50KVxuICAgICAgfVxuICAgIH1cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtYWlhLXN5bmMtZWRpdGVkLWFnZW50LWZyb20tY2hhdCcsIG9uU3luY0VkaXRlZEFnZW50KVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtYWlhLXN5bmMtZWRpdGVkLWFnZW50LWZyb20tY2hhdCcsIG9uU3luY0VkaXRlZEFnZW50KVxuICAgIH1cbiAgfSwgW3VwZGF0ZUFnZW50LCBzZWxlY3RBZ2VudCwgYWdlbnQ/LmlkXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IG9wZW5DaGF0VmlldyA9ICgpID0+IHtcbiAgICAgIHNldEhhc0Vycm9yKGZhbHNlKVxuICAgICAgc2V0SW5pdGlhbENoYXRJZChudWxsKVxuICAgICAgc2V0TmV3Q2hhdEtleShwcmV2ID0+IHByZXYgKyAxKVxuICAgICAgc2V0VXNlckluaXRpYWxNZXNzYWdlKHsgbWVzc2FnZTogJycsIGF0dGFjaG1lbnRzOiBbXSB9KVxuICAgICAgc2V0Q3VycmVudE9wdGlvbihvcHRpb25zLmNoYXQpXG4gICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnY2hhdC1zZXNzaW9uLWNoYW5nZWQnKSlcbiAgICB9XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbWFpYS1vcGVuLWNoYXQtdmlldycsIG9wZW5DaGF0VmlldylcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbWFpYS1vcGVuLWNoYXQtdmlldycsIG9wZW5DaGF0VmlldylcbiAgICB9XG4gIH0sIFtdKVxuXG4gIC8qKlxuICAgKiBFbCDDrWNvbm8gZGUgTUFJQSBkZWwgaGVhZGVyIGxsZXZhIHNpZW1wcmUgYWwgSG9tZS4gU2kgTUFJQSB5YSBlc3TDoSBtb250YWRhIHBlcm9cbiAgICogbWluaW1pemFkYSwgZWwgaG9zdCBubyBwdWVkZSByZXNvbHZlcmxvIGNhbWJpYW5kbyBgaXNPcGVuYCAoeWEgZXN0w6EgZW4gdHJ1ZSksXG4gICAqIGFzw60gcXVlIGF2aXNhIHBvciBldmVudG8geSBhY8OhIHJlc3RhdXJhbW9zIHkgdmFtb3MgYWwgSG9tZS5cbiAgICovXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3Qgb3BlbkhvbWUgPSAoKSA9PiB7XG4gICAgICBhcHBseUV4cGFuZGVkSG9zdFRha2VvdmVyKHtcbiAgICAgICAgc2VjdGlvbjogJ2hlYWRlcicsXG4gICAgICAgIGVudGl0eTogeyBwcm9qZWN0SWQ6IG51bGwsIGNsaWVudElkOiBudWxsIH0sXG4gICAgICB9KVxuICAgIH1cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtYWlhLW9wZW4taG9tZScsIG9wZW5Ib21lKVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtYWlhLW9wZW4taG9tZScsIG9wZW5Ib21lKVxuICAgIH1cbiAgfSwgW2FwcGx5RXhwYW5kZWRIb3N0VGFrZW92ZXJdKVxuXG4gIC8qKlxuICAgKiBPdHJvIGhvc3QgKHByb3llY3RvLCBjbGllbnRlLCBiYW5uZXIsIGhlYWRlcuKApikgcGlkZSBhYnJpciBNQUlBIG1pZW50cmFzIHlhIGhheSB1bmFcbiAgICogaW5zdGFuY2lhIG1vbnRhZGEuIEV4cGFuZGUgc2kgZXN0YWJhIG1pbmltaXphZG8sIGFwbGljYSBlbCBjb250ZXh0byBkZWwgaG9zdCBudWV2b1xuICAgKiB5IHZhIGFsIGhvbWUg4oCUIHNpbiByZXN0YXVyYXIgbGEgY29udmVyc2FjacOzbiBwcmV2aWEgKGVzbyBsbyBoYWNlIGVsIHBpbGwpLlxuICAgKi9cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBvcGVuRnJvbUhvc3QgPSAoZXZlbnQ6IEV2ZW50KSA9PiB7XG4gICAgICBjb25zdCB7IGRldGFpbCB9ID0gZXZlbnQgYXMgQ3VzdG9tRXZlbnQ8TWFpYUhvc3RPcGVuRGV0YWlsPlxuICAgICAgaWYgKCFkZXRhaWwpIHJldHVyblxuICAgICAgYXBwbHlFeHBhbmRlZEhvc3RUYWtlb3ZlcihkZXRhaWwpXG4gICAgfVxuXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihNQUlBX09QRU5fRlJPTV9IT1NUX0VWRU5ULCBvcGVuRnJvbUhvc3QpXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoTUFJQV9PUEVOX0ZST01fSE9TVF9FVkVOVCwgb3BlbkZyb21Ib3N0KVxuICAgIH1cbiAgfSwgW2FwcGx5RXhwYW5kZWRIb3N0VGFrZW92ZXJdKVxuXG4gIC8qKiBNaXNtbyBmbHVqbyBxdWUgQ2hhdEFJTXlBZ2VudHMuaGFuZGxlVXNlQWdlbnQgKyBvbkJhY2sgKGhhbmRsZXJzLmhvbWUpLlxuICAgKiAgRWwgZGV0YWlsIHB1ZWRlIHRyYWVyIG9wY2lvbmFsbWVudGUgYHByb2plY3RgLCBgY2xpZW50YCwgYHRhc2tgIHBhcmEgZmxvd3MgcXVlXG4gICAqICBuZWNlc2l0YW4gcHJlc2VydmFyIGNvbnRleHRvIChlai4gc2VsZWN0b3IgZGUgYWdlbnRlcyBkZXNkZSB1bmEgdGFyZWEpLiBTaSBubyB2aWVuZW4sXG4gICAqICBzZSBtYW50aWVuZSBlbCBjb21wb3J0YW1pZW50byBvcmlnaW5hbCBkZSBsaW1waWFyIHByb2plY3QvY2xpZW50LiAqL1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IG9wZW5OZXdDaGF0V2l0aEFnZW50ID0gKGV2ZW50OiBFdmVudCkgPT4ge1xuICAgICAgY29uc3QgeyBkZXRhaWwgfSA9IGV2ZW50IGFzIEN1c3RvbUV2ZW50PHtcbiAgICAgICAgYWdlbnQ6IEFnZW50XG4gICAgICAgIHByb2plY3Q/OiBQcm9qZWN0IHwgbnVsbFxuICAgICAgICBjbGllbnQ/OiBDbGllbnQgfCBudWxsXG4gICAgICAgIHRhc2s/OiBUYXNrIHwgbnVsbFxuICAgICAgfT5cbiAgICAgIGNvbnN0IG5leHRBZ2VudCA9IGRldGFpbD8uYWdlbnRcbiAgICAgIGlmICghbmV4dEFnZW50KSByZXR1cm5cblxuICAgICAgc2V0UHJvamVjdChkZXRhaWw/LnByb2plY3QgPz8gbnVsbClcbiAgICAgIHNldENsaWVudD8uKGRldGFpbD8uY2xpZW50ID8/IG51bGwpXG4gICAgICBpZiAoZGV0YWlsPy50YXNrICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgc2V0VGFzaz8uKGRldGFpbC50YXNrKVxuICAgICAgfVxuICAgICAgc2VsZWN0QWdlbnQobmV4dEFnZW50KVxuICAgICAgc2V0SGFzRXJyb3IoZmFsc2UpXG4gICAgICBzZXRDdXJyZW50T3B0aW9uKG9wdGlvbnMuaG9tZSlcbiAgICB9XG5cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtYWlhLW9wZW4tbmV3LWNoYXQtd2l0aC1hZ2VudCcsIG9wZW5OZXdDaGF0V2l0aEFnZW50KVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtYWlhLW9wZW4tbmV3LWNoYXQtd2l0aC1hZ2VudCcsIG9wZW5OZXdDaGF0V2l0aEFnZW50KVxuICAgIH1cbiAgfSwgW3NlbGVjdEFnZW50LCBzZXRDbGllbnQsIHNldFByb2plY3QsIHNldFRhc2tdKVxuXG4gIC8vIE1ldGFkYXRhIGRlIGxhIHNlc3Npb24gYWJpZXJ0YSAoYWdlbnRfdHlwZS9hZ2VudF9lbnRpdHkgKyBjb250ZXh0byksIGVtaXRpZGEgcG9yIHVzZUNoYXRNZXNzYWdlcy5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBvblNlc3Npb25NZXRhID0gKGV2dDogRXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IHsgZGV0YWlsIH0gPSBldnQgYXMgQ3VzdG9tRXZlbnQ8U2Vzc2lvbk1ldGE+XG4gICAgICBpZiAoZGV0YWlsKSBzZXRTZXNzaW9uTWV0YShkZXRhaWwpXG4gICAgfVxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21haWEtY2hhdC1zZXNzaW9uLW1ldGEnLCBvblNlc3Npb25NZXRhKVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtYWlhLWNoYXQtc2Vzc2lvbi1tZXRhJywgb25TZXNzaW9uTWV0YSlcbiAgICB9XG4gIH0sIFtdKVxuXG4gIC8vIEFsIGNhbWJpYXIgZGUgY29udmVyc2FjacOzbiBsaW1waWFtb3MgbGEgbWV0YWRhdGE7IGVsIGxvYWQgZGUgbGEgbnVldmEgc2Vzc2lvbiBsYSB2dWVsdmUgYSBlbWl0aXIuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgc2V0U2Vzc2lvbk1ldGEobnVsbClcbiAgfSwgW2luaXRpYWxDaGF0SWRdKVxuXG4gIC8vIENhcnRlbCBcImNvbnRpbnVhciBlbiB1biBjaGF0IG51ZXZvXCI6IHNlIG11ZXN0cmEgYWwgYWJyaXIgdW5hIGNvbnZlcnNhY2nDs24gZGUgdW4gY2xvbmUgbGVnYWN5XG4gIC8vIChhZ2VudF90eXBlID09PSAnY2xvbmUnIGNvbiBlbnRpdHkgcHJvamVjdC90YXNrL2NsaWVudCkuIEVsIGlucHV0IHNlIHJlZW1wbGF6YSBwb3IgZWwgY2FydGVsLlxuICBjb25zdCBsZWdhY3lDb250ZXh0U2Vzc2lvbiA9IHVzZU1lbW88eyBlbnRpdHlUeXBlOiBMZWdhY3lDb250ZXh0RW50aXR5OyBjb250ZXh0TmFtZTogc3RyaW5nIH0gfCBudWxsPigoKSA9PiB7XG4gICAgaWYgKGNvbXB1dGVkQ3VycmVudE9wdGlvbiAhPT0gb3B0aW9ucy5jaGF0KSByZXR1cm4gbnVsbFxuICAgIGlmICghc2Vzc2lvbk1ldGEgfHwgc2Vzc2lvbk1ldGEuYWdlbnRUeXBlICE9PSAnY2xvbmUnKSByZXR1cm4gbnVsbFxuICAgIGNvbnN0IGVudGl0eSA9IHNlc3Npb25NZXRhLmFnZW50RW50aXR5XG4gICAgaWYgKCFlbnRpdHkgfHwgIUxFR0FDWV9DT05URVhUX0VOVElUSUVTLmluY2x1ZGVzKGVudGl0eSBhcyBMZWdhY3lDb250ZXh0RW50aXR5KSkgcmV0dXJuIG51bGxcbiAgICBjb25zdCBjb250ZXh0TmFtZSA9XG4gICAgICBlbnRpdHkgPT09ICd0YXNrJyA/IHNlc3Npb25NZXRhLnRhc2tOYW1lIDogZW50aXR5ID09PSAncHJvamVjdCcgPyBzZXNzaW9uTWV0YS5wcm9qZWN0TmFtZSA6IHNlc3Npb25NZXRhLmNsaWVudE5hbWVcbiAgICByZXR1cm4geyBlbnRpdHlUeXBlOiBlbnRpdHkgYXMgTGVnYWN5Q29udGV4dEVudGl0eSwgY29udGV4dE5hbWU6IGNvbnRleHROYW1lIHx8ICcnIH1cbiAgfSwgW2NvbXB1dGVkQ3VycmVudE9wdGlvbiwgc2Vzc2lvbk1ldGFdKVxuXG4gIC8vIE1hcmNhIGVsIGFnZW50ZSBkZSBsYSBjb252ZXJzYWNpw7NuIGxlZ2FjeSBwYXJhIHF1ZSBoZWFkZXIsIHNlbGVjdG9yIHkgYXZhdGFyIG11ZXN0cmVuIGVsIGxvZ29cbiAgLy8gTUFJQSB5IGVsIG5vbWJyZSB0YWNoYWRvIChhZ2VudGUgb2Jzb2xldG8pLCBzaW4gZGVwZW5kZXIgZGVsIGB0eXBlYCByZXN1ZWx0byBkZSBsYSBzZXNpw7NuIHZpZWphLlxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChsZWdhY3lDb250ZXh0U2Vzc2lvbiAmJiBhZ2VudCAmJiAhYWdlbnQuaXNfbGVnYWN5X2NvbnRleHQpIHtcbiAgICAgIHNlbGVjdEFnZW50KHsgLi4uYWdlbnQsIGlzX2xlZ2FjeV9jb250ZXh0OiB0cnVlIH0pXG4gICAgfVxuICB9LCBbbGVnYWN5Q29udGV4dFNlc3Npb24sIGFnZW50LCBzZWxlY3RBZ2VudF0pXG5cbiAgLy8gQWJyZSB1biBjaGF0IG51ZXZvIGNvbiBlbCBvcmNoZXN0cmF0b3Igc2V0ZWFuZG8gZWwgY29udGV4dG8gZGVsIGNsb25lIGxlZ2FjeSAobWlzbW8gY3JpdGVyaW9cbiAgLy8gcXVlIGNsaWNrZWFyIHVuIGNvbnRleHRvIHJlY2llbnRlIGVuIGVsIGhvbWUg4oaSIHBhc28gMiBjb24gRkFRcy9hY2Npb25lcyBkZSBlc2UgY29udGV4dG8pLlxuICBjb25zdCBoYW5kbGVDb250aW51ZUxlZ2FjeUNvbnRleHRJbk5ld0NoYXQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKCFzZXNzaW9uTWV0YSkgcmV0dXJuXG4gICAgY29uc3Qge1xuICAgICAgYWdlbnRFbnRpdHksXG4gICAgICBwcm9qZWN0SWQ6IHBJZCxcbiAgICAgIHByb2plY3ROYW1lOiBwTmFtZSxcbiAgICAgIGNsaWVudElkOiBjSWQsXG4gICAgICBjbGllbnROYW1lOiBjTmFtZSxcbiAgICAgIHRhc2tJZDogdElkLFxuICAgICAgdGFza05hbWU6IHROYW1lLFxuICAgIH0gPSBzZXNzaW9uTWV0YVxuXG4gICAgY29uc3Qgb3JjaGVzdHJhdG9yID0gYWdlbnRzLmRhdGEuZmluZCgoYTogQWdlbnQpID0+IGEudHlwZSA9PT0gJ29yY2hlc3RyYXRvcicpXG4gICAgaWYgKCFvcmNoZXN0cmF0b3IpIHJldHVyblxuXG4gICAgLy8gUmVzZXQgZGVsIGNoYXQg4oaSIGNvbnZlcnNhY2nDs24gbnVldmEgKGxhIGFudGVyaW9yIHNpZ3VlIGVuIGJhY2tncm91bmQpXG4gICAgc2V0SXNXcml0aW5nKGZhbHNlKVxuICAgIHNldFVzZXJJbml0aWFsTWVzc2FnZSh7IG1lc3NhZ2U6ICcnLCBhdHRhY2htZW50czogW10gfSlcbiAgICBzZXRJbml0aWFsQ2hhdElkKG51bGwpXG4gICAgc2V0TmV3Q2hhdEtleShwcmV2ID0+IHByZXYgKyAxKVxuICAgIHNldEhhc0Vycm9yKGZhbHNlKVxuXG4gICAgLy8gU2V0ZWFyIGNvbnRleHRvIChtaXNtbyBjcml0ZXJpbyBxdWUgaGFuZGxlU2VsZWN0UmVjZW50Q29udGV4dCBkZWwgaG9tZSlcbiAgICBzZXRUYXNrPy4obnVsbClcbiAgICBzZXRQcm9qZWN0KG51bGwpXG4gICAgc2V0Q2xpZW50Py4obnVsbClcbiAgICBzZXRDaGlwc1Byb2plY3QobnVsbClcblxuICAgIGlmIChhZ2VudEVudGl0eSA9PT0gJ2NsaWVudCcgJiYgY0lkICE9IG51bGwpIHtcbiAgICAgIHNldENsaWVudD8uKHsgaWQ6IGNJZCwgbmFtZTogY05hbWUgfHwgJycgfSlcbiAgICB9IGVsc2UgaWYgKGFnZW50RW50aXR5ID09PSAncHJvamVjdCcgJiYgcElkICE9IG51bGwpIHtcbiAgICAgIHNldFByb2plY3Qoe1xuICAgICAgICBpZDogcElkLFxuICAgICAgICBuYW1lOiBwTmFtZSB8fCAnJyxcbiAgICAgICAgLi4uKGNJZCAhPSBudWxsID8geyBjbGllbnRJZDogY0lkLCBjbGllbnQ6IHsgaWQ6IGNJZCwgbmFtZTogY05hbWUgfHwgJycgfSB9IDoge30pLFxuICAgICAgfSlcbiAgICAgIHNldENoaXBzUHJvamVjdCh7IHByb2plY3RJZDogU3RyaW5nKHBJZCksIHByb2plY3ROYW1lOiBwTmFtZSB8fCAnJywgY2xpZW50TmFtZTogY05hbWUgfHwgJycgfSlcbiAgICB9IGVsc2UgaWYgKGFnZW50RW50aXR5ID09PSAndGFzaycgJiYgdElkICE9IG51bGwpIHtcbiAgICAgIHNldFRhc2s/Lih7XG4gICAgICAgIGlkOiB0SWQsXG4gICAgICAgIG5hbWU6IHROYW1lIHx8ICcnLFxuICAgICAgICAuLi4ocElkICE9IG51bGwgPyB7IHByb2plY3RJZDogcElkIH0gOiB7fSksXG4gICAgICAgIC4uLihjSWQgIT0gbnVsbCA/IHsgY2xpZW50SWQ6IGNJZCB9IDoge30pLFxuICAgICAgfSlcbiAgICAgIGlmIChjSWQgIT0gbnVsbCkgc2V0Q2xpZW50Py4oeyBpZDogY0lkLCBuYW1lOiBjTmFtZSB8fCAnJyB9KVxuICAgICAgaWYgKHBJZCAhPSBudWxsKSB7XG4gICAgICAgIHNldFByb2plY3Qoe1xuICAgICAgICAgIGlkOiBwSWQsXG4gICAgICAgICAgbmFtZTogcE5hbWUgfHwgJycsXG4gICAgICAgICAgLi4uKGNJZCAhPSBudWxsID8geyBjbGllbnRJZDogY0lkLCBjbGllbnQ6IHsgaWQ6IGNJZCwgbmFtZTogY05hbWUgfHwgJycgfSB9IDoge30pLFxuICAgICAgICB9KVxuICAgICAgICBzZXRDaGlwc1Byb2plY3QoeyBwcm9qZWN0SWQ6IFN0cmluZyhwSWQpLCBwcm9qZWN0TmFtZTogcE5hbWUgfHwgJycsIGNsaWVudE5hbWU6IGNOYW1lIHx8ICcnIH0pXG4gICAgICB9XG4gICAgfVxuXG4gICAgc2VsZWN0QWdlbnQob3JjaGVzdHJhdG9yKVxuICAgIHNldFNlc3Npb25NZXRhKG51bGwpXG4gICAgc2V0Q3VycmVudE9wdGlvbihvcHRpb25zLmhvbWUpXG4gICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2NoYXQtc2Vzc2lvbi1jaGFuZ2VkJykpXG4gIH0sIFtzZXNzaW9uTWV0YSwgYWdlbnRzLmRhdGEsIHNlbGVjdEFnZW50LCBzZXRDbGllbnQsIHNldFByb2plY3QsIHNldFRhc2ssIHNldENoaXBzUHJvamVjdCwgc3RvcEdlbmVyYXRpb25GdW5jdGlvbl0pXG5cbiAgY29uc3Qgc2hvd05ld0NoYXQgPSBjb21wdXRlZEN1cnJlbnRPcHRpb24gIT09IG9wdGlvbnMuY2hhdFxuICBjb25zdCBoaWRlSGVhZGVyQWdlbnRTZWxlY3RvciA9IGNvbXB1dGVkQ3VycmVudE9wdGlvbiA9PT0gb3B0aW9ucy5teVNraWxsc1xuICBjb25zdCBpc015QWdlbnRzU2VjdGlvbiA9IGNvbXB1dGVkQ3VycmVudE9wdGlvbiA9PT0gb3B0aW9ucy5teUFnZW50c1xuXG4gIC8vIEJvdMOzbiBcInZvbHZlclwiOiBzb2xvIHBhcmEgZWwgb3JjaGVzdHJhdG9yLlxuICAvLyAtIEVuIGVsIGNoYXQ6IGRpc3BvbmlibGUgZW4gdG9kYXMgbGFzIHNlY2Npb25lcyAoaGVhZGVyIHkgcHJvamVjdC9jbGllbnQvdGFzaykuXG4gIC8vIC0gRW4gZWwgaG9tZSBwYXNvIDIgKEZBUXMvRlVBcyBjb24gY29udGV4dG8gcGluZWFkbyk6IGVuIGVsIGhlYWRlciBzaWVtcHJlOyBlblxuICAvLyAgIHByb2plY3QvY2xpZW50L3Rhc2sgc29sbyBzaSBlbCB1c3VhcmlvIHJlaW5pY2nDsyBlbCBjb250ZXh0byAocGFzw7MgcG9yIGVsIHNlbGVjdG9yIGRlXG4gIC8vICAgY29udGV4dG9zIHJlY2llbnRlcykuIEVuIGVsIHBhc28gMSAoc2luIGNvbnRleHRvKSBOTyBzZSBtdWVzdHJhLlxuICBjb25zdCBoYXNQaW5uZWRDb250ZXh0ID0gISEodGFzaz8uaWQgfHwgY2hpcHNQcm9qZWN0Py5wcm9qZWN0SWQgfHwgY2xpZW50Py5pZCB8fCBwcm9qZWN0Py5pZClcbiAgY29uc3QgaXNDaGF0VmlldyA9IGNvbXB1dGVkQ3VycmVudE9wdGlvbiA9PT0gb3B0aW9ucy5jaGF0XG4gIGNvbnN0IGlzSG9tZVN0ZXAyID0gY29tcHV0ZWRDdXJyZW50T3B0aW9uID09PSBvcHRpb25zLmhvbWUgJiYgaGFzUGlubmVkQ29udGV4dFxuICBjb25zdCBpc0hlYWRlckhvbWVTdGVwMiA9IGlzR2xvYmFsTWFpYVNlY3Rpb24oc2VjdGlvbikgJiYgaXNIb21lU3RlcDJcbiAgY29uc3QgaXNTZWN0aW9uUmVzZXRIb21lU3RlcDIgPSAhaXNHbG9iYWxNYWlhU2VjdGlvbihzZWN0aW9uKSAmJiBpc0hvbWVTdGVwMiAmJiBkaWRSZXNldENvbnRleHRJblNlY3Rpb25cbiAgY29uc3Qgc2hvd0JhY2tCdXR0b24gPVxuICAgIGFnZW50Py50eXBlID09PSAnb3JjaGVzdHJhdG9yJyAmJlxuICAgICFoYXNFcnJvciAmJlxuICAgICFsb2FkaW5nICYmXG4gICAgKGlzQ2hhdFZpZXcgfHwgaXNIZWFkZXJIb21lU3RlcDIgfHwgaXNTZWN0aW9uUmVzZXRIb21lU3RlcDIpXG4gIGNvbnN0IGhhbmRsZU9wZW5NYXJrZXRwbGFjZSA9IHVzZUNhbGxiYWNrKGFzeW5jICgpID0+IHtcbiAgICBpZiAoIXdpbmRvdy5NQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1NfTVVMVElfQUdFTlRTKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgYXdhaXQgZW5zdXJlQWdlbnRzTG9hZGVkKClcbiAgICBjbGVhckFnZW50KClcbiAgICBzZXRDdXJyZW50T3B0aW9uKG9wdGlvbnMubXlBZ2VudHMpXG4gICAgcGF0Y2hNYWlhUGFuZWxTZXNzaW9uKHVzZXIuaWQsIHtcbiAgICAgIGFnZW50c05hdkFjdGl2ZTogJ215QWdlbnRzJyxcbiAgICAgIGN1cnJlbnRPcHRpb246IG9wdGlvbnMubXlBZ2VudHMsXG4gICAgICBhY3RpdmVDaGF0SWQ6IG51bGwsXG4gICAgICBhZ2VudElkOiBudWxsLFxuICAgIH0pXG4gIH0sIFtjbGVhckFnZW50LCBlbnN1cmVBZ2VudHNMb2FkZWQsIHVzZXIuaWRdKVxuXG4gIGNvbnN0IGhhbmRsZU9wZW5Ta2lsbHMgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKCF3aW5kb3cuTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UUykge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHNldEhhc0Vycm9yKGZhbHNlKVxuICAgIHNldEN1cnJlbnRPcHRpb24ob3B0aW9ucy5teVNraWxscylcbiAgICBoYW5kbGVHZXRTa2lsbHMoKVxuICAgIHBhdGNoTWFpYVBhbmVsU2Vzc2lvbih1c2VyLmlkLCB7XG4gICAgICBhZ2VudHNOYXZBY3RpdmU6ICdteVNraWxscycsXG4gICAgICBjdXJyZW50T3B0aW9uOiBvcHRpb25zLm15U2tpbGxzLFxuICAgIH0pXG4gIH0sIFtoYW5kbGVHZXRTa2lsbHMsIHVzZXIuaWRdKVxuXG4gIGNvbnN0IGhhbmRsZUdvVG9NYWlha2VyID0gdXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuICAgIHNldEhhc0Vycm9yKGZhbHNlKVxuICAgIGxldCBtYWlha2VyQWdlbnQgPSBhZ2VudHMuZGF0YS5maW5kKChhOiBBZ2VudCkgPT4gaXNNYXJrZXRwbGFjZUdsb2JhbENsb25lQWdlbnQoYSkpXG4gICAgaWYgKCFtYWlha2VyQWdlbnQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2hNYWlhKHtcbiAgICAgICAgICBwYXRoOiBgYWdlbnRzP2FnZW50X3R5cGU9Y2xvbmUmZW50aXR5PWdsb2JhbCZsYW5nPSR7bWFwQ09STGFuZyhpMThuLmxhbmd1YWdlKX1gLFxuICAgICAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKClcbiAgICAgICAgbWFpYWtlckFnZW50ID0gKGRhdGEuZGF0YSB8fCBbXSkuZmluZCgoYTogQWdlbnQpID0+IGlzTWFya2V0cGxhY2VHbG9iYWxDbG9uZUFnZW50KGEpKVxuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIW1haWFrZXJBZ2VudCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHNldFByb2plY3QobnVsbClcbiAgICBzZXRDbGllbnQ/LihudWxsKVxuICAgIHNldFRhc2s/LihudWxsKVxuICAgIHNlbGVjdEFnZW50KG1haWFrZXJBZ2VudClcbiAgICBzZXRDdXJyZW50T3B0aW9uKG9wdGlvbnMuaG9tZSlcbiAgICBpZiAocmVzZXRTZWxlY3RlZENoYXRSZWYuY3VycmVudCkge1xuICAgICAgcmVzZXRTZWxlY3RlZENoYXRSZWYuY3VycmVudCgpXG4gICAgfVxuICAgIHBhdGNoTWFpYVBhbmVsU2Vzc2lvbih1c2VyLmlkLCB7XG4gICAgICBhZ2VudHNOYXZBY3RpdmU6ICdtYWlha2VyJyxcbiAgICAgIGN1cnJlbnRPcHRpb246IG9wdGlvbnMuaG9tZSxcbiAgICAgIGFnZW50SWQ6IG1haWFrZXJBZ2VudC5pZCxcbiAgICAgIGFjdGl2ZUNoYXRJZDogbnVsbCxcbiAgICB9KVxuICB9LCBbYWdlbnRzLmRhdGEsIGkxOG4ubGFuZ3VhZ2UsIHNlbGVjdEFnZW50LCBzZXRDbGllbnQsIHNldFByb2plY3QsIHNldFRhc2ssIHVzZXIuaWRdKVxuXG4gIGNvbnN0IGxvYWRBZ2VudHNGb3JTZXNzaW9uUmVzdG9yZSA9IHVzZUNhbGxiYWNrKFxuICAgIGFzeW5jIChzbmFwc2hvdDogTWFpYVBhbmVsU2Vzc2lvblNuYXBzaG90KTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICBpZiAoc25hcHNob3QuYWdlbnRzTmF2QWN0aXZlID09PSAnbXlTa2lsbHMnKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBsZXQgYWdlbnRUb1NlbGVjdDogQWdlbnQgfCB1bmRlZmluZWRcbiAgICAgIGlmIChzbmFwc2hvdC5hZ2VudElkICYmIHNuYXBzaG90LmFnZW50c05hdkFjdGl2ZSAhPT0gJ215QWdlbnRzJykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGFnZW50VG9TZWxlY3QgPSBhd2FpdCBmZXRjaEFnZW50RGV0YWlsKHNuYXBzaG90LmFnZW50SWQpXG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIGFnZW50VG9TZWxlY3QgPSB1bmRlZmluZWRcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoIWFnZW50c0ZldGNoZWRSZWYuY3VycmVudCkge1xuICAgICAgICBhZ2VudHNGZXRjaGVkUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgICAgIGF3YWl0IGhhbmRsZUdldEFnZW50cyhzbmFwc2hvdC5hZ2VudHNOYXZBY3RpdmUgPT09ICdteUFnZW50cycgPyB1bmRlZmluZWQgOiBhZ2VudFRvU2VsZWN0KVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgaWYgKGFnZW50VG9TZWxlY3QgJiYgc25hcHNob3QuYWdlbnRzTmF2QWN0aXZlICE9PSAnbXlBZ2VudHMnKSB7XG4gICAgICAgIHNlbGVjdEFnZW50KGFnZW50VG9TZWxlY3QpXG4gICAgICB9XG4gICAgfSxcbiAgICBbaGFuZGxlR2V0QWdlbnRzLCBzZWxlY3RBZ2VudF1cbiAgKVxuXG4gIGNvbnN0IGFwcGx5U2Vzc2lvblJlc3RvcmUgPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAoc25hcHNob3Q6IE1haWFQYW5lbFNlc3Npb25TbmFwc2hvdCkgPT4ge1xuICAgICAgc2V0SXNNaW5pbWl6ZWQoZmFsc2UpXG4gICAgICBzZXRDaGF0Vmlld1Zpc2libGUodHJ1ZSlcblxuICAgICAgaWYgKHNuYXBzaG90Lmhvc3RDb250ZXh0Py5jaGlwc1Byb2plY3QpIHtcbiAgICAgICAgc2V0Q2hpcHNQcm9qZWN0KHNuYXBzaG90Lmhvc3RDb250ZXh0LmNoaXBzUHJvamVjdClcbiAgICAgIH1cblxuICAgICAgaWYgKHNuYXBzaG90LmFnZW50c05hdkFjdGl2ZSA9PT0gJ215QWdlbnRzJykge1xuICAgICAgICBhd2FpdCBoYW5kbGVPcGVuTWFya2V0cGxhY2UoKVxuICAgICAgICBmb2N1c0NoYXRJbnB1dCgpXG4gICAgICAgIHN5bmNQYW5lbFNlc3Npb24oKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgaWYgKHNuYXBzaG90LmFnZW50c05hdkFjdGl2ZSA9PT0gJ215U2tpbGxzJykge1xuICAgICAgICBoYW5kbGVPcGVuU2tpbGxzKClcbiAgICAgICAgZm9jdXNDaGF0SW5wdXQoKVxuICAgICAgICBzeW5jUGFuZWxTZXNzaW9uKClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmIChzbmFwc2hvdC5hZ2VudHNOYXZBY3RpdmUgPT09ICdtYWlha2VyJykge1xuICAgICAgICBhd2FpdCBoYW5kbGVHb1RvTWFpYWtlcigpXG4gICAgICAgIGZvY3VzQ2hhdElucHV0KClcbiAgICAgICAgc3luY1BhbmVsU2Vzc2lvbigpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBpZiAoc25hcHNob3QuY3VycmVudE9wdGlvbiA9PT0gb3B0aW9ucy5jaGF0ICYmIHNuYXBzaG90LmFjdGl2ZUNoYXRJZCkge1xuICAgICAgICBzZXRVc2VySW5pdGlhbE1lc3NhZ2UoeyBtZXNzYWdlOiAnJywgYXR0YWNobWVudHM6IFtdIH0pXG4gICAgICAgIHNldEluaXRpYWxDaGF0SWQoc25hcHNob3QuYWN0aXZlQ2hhdElkKVxuICAgICAgICBnZXRDaGF0c1N0b3JlU3RhdGUoKS5zZXRBY3RpdmVDaGF0SWQoc25hcHNob3QuYWN0aXZlQ2hhdElkKVxuICAgICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnY2hhdC1zZXNzaW9uLWNoYW5nZWQnKSlcbiAgICAgICAgaGFuZGxlcnMuY2hhdCgpXG4gICAgICB9IGVsc2UgaWYgKHNuYXBzaG90LmN1cnJlbnRPcHRpb24gJiYgaXNWYWxpZE1haWFQYW5lbE9wdGlvbihzbmFwc2hvdC5jdXJyZW50T3B0aW9uKSkge1xuICAgICAgICBzZXRDdXJyZW50T3B0aW9uKHNuYXBzaG90LmN1cnJlbnRPcHRpb24gYXMgb3B0aW9ucylcbiAgICAgIH1cblxuICAgICAgZm9jdXNDaGF0SW5wdXQoKVxuICAgICAgc3luY1BhbmVsU2Vzc2lvbigpXG4gICAgfSxcbiAgICBbXG4gICAgICBmb2N1c0NoYXRJbnB1dCxcbiAgICAgIGhhbmRsZUdvVG9NYWlha2VyLFxuICAgICAgaGFuZGxlT3Blbk1hcmtldHBsYWNlLFxuICAgICAgaGFuZGxlT3BlblNraWxscyxcbiAgICAgIGhhbmRsZXJzLFxuICAgICAgc2V0Q2hhdFZpZXdWaXNpYmxlLFxuICAgICAgc2V0Q2hpcHNQcm9qZWN0LFxuICAgICAgc3luY1BhbmVsU2Vzc2lvbixcbiAgICBdXG4gIClcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IHNuYXBzaG90ID0gcGVuZGluZ1Nlc3Npb25SZXN0b3JlUmVmLmN1cnJlbnRcbiAgICBpZiAoIXNuYXBzaG90IHx8IHNlc3Npb25SZXN0b3JlU3RhcnRlZFJlZi5jdXJyZW50KSByZXR1cm5cbiAgICBzZXNzaW9uUmVzdG9yZVN0YXJ0ZWRSZWYuY3VycmVudCA9IHRydWVcblxuICAgIHNldENoYXRWaWV3VmlzaWJsZSh0cnVlKVxuXG4gICAgY29uc3QgcnVuUmVzdG9yZSA9IGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGxvYWRBZ2VudHNGb3JTZXNzaW9uUmVzdG9yZShzbmFwc2hvdClcbiAgICAgICAgcGVuZGluZ1Nlc3Npb25SZXN0b3JlUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICAgIGF3YWl0IGFwcGx5U2Vzc2lvblJlc3RvcmUoc25hcHNob3QpXG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBzZXRJc1Jlc3RvcmluZ1Nlc3Npb24oZmFsc2UpXG4gICAgICB9XG4gICAgfVxuXG4gICAgcnVuUmVzdG9yZSgpLmNhdGNoKCgpID0+IHVuZGVmaW5lZClcbiAgfSwgW2FwcGx5U2Vzc2lvblJlc3RvcmUsIGxvYWRBZ2VudHNGb3JTZXNzaW9uUmVzdG9yZSwgc2V0Q2hhdFZpZXdWaXNpYmxlXSlcblxuICBjb25zdCBoYW5kbGVEZWxldGVBZ2VudEZyb21NeUFnZW50cyA9IHVzZUNhbGxiYWNrKFxuICAgIChhZ2VudElkOiBzdHJpbmcpID0+IHtcbiAgICAgIHJlbW92ZUFnZW50KGFnZW50SWQpXG4gICAgICBpZiAoYWdlbnQ/LmlkID09PSBhZ2VudElkKSB7XG4gICAgICAgIHNlbGVjdEZpcnN0QWdlbnQoYWdlbnRJZClcbiAgICAgIH1cbiAgICB9LFxuICAgIFthZ2VudD8uaWQsIHJlbW92ZUFnZW50LCBzZWxlY3RGaXJzdEFnZW50XVxuICApXG5cbiAgLy8gRWwgZm9vdGVyIChpbnB1dCkgc2Ugb2N1bHRhIHNvbG8gZW4gZWwgaG9tZSBtYXJrZXRwbGFjZSBkZSBNYWlha2VyIChicm93c2UgZGUgYWdlbnRlcykuXG4gIC8vIEVsIGhvbWUgZGVsIG9yY2hlc3RyYXRvciBzw60gcGVybWl0ZSBlc2NyaWJpciwgYXPDrSBxdWUgbWFudGllbmUgZWwgZm9vdGVyLlxuICBjb25zdCBpc01haWFrZXJDcmVhdG9ySG9tZSA9IGNvbXB1dGVkQ3VycmVudE9wdGlvbiA9PT0gb3B0aW9ucy5ob21lICYmIGlzTWFpYWtlckFnZW50U2VsZWN0ZWRcblxuICBjb25zdCBtb2RhbFBhbmVsID0gKFxuICAgIDw+XG4gICAgICB7dmFsaWRhdGVBY2Nlc3NCeUZlYXR1cmUoc2VjdGlvbiwgdXNlcikgJiYgIWlzRmxvYXRpbmcgPyAoXG4gICAgICAgIDxTaWRlYmFyXG4gICAgICAgICAgb25Hb1RvQ2hhdD17Z29Ub0NoYXR9XG4gICAgICAgICAgb25FcnJvcj17KCkgPT4gc2V0U2lkZWJhckhhc0Vycm9yKHRydWUpfVxuICAgICAgICAgIGhhbmRsZUdvVG9Ib21lPXtoYW5kbGVHb0hvbWV9XG4gICAgICAgICAgaGFuZGxlU3RhcnROZXdDaGF0PXtoYW5kbGVTdGFydE5ld0NoYXR9XG4gICAgICAgICAgaGFuZGxlT3Blbk1hcmtldHBsYWNlPXtoYW5kbGVPcGVuTWFya2V0cGxhY2V9XG4gICAgICAgICAgc2hvd05ld0NoYXQ9e3Nob3dOZXdDaGF0fVxuICAgICAgICAgIHJlZmV0Y2hDaGF0cz17cmVmZXRjaENoYXRzfVxuICAgICAgICAgIGhhbmRsZVNldFJlZmV0Y2hDaGF0cz17c2V0UmVmZXRjaENoYXRzfVxuICAgICAgICAgIGhhc0Vycm9yPXtzaWRlYmFySGFzRXJyb3J9XG4gICAgICAgICAgcmVzZXRTZWxlY3RlZENoYXRSZWY9e3Jlc2V0U2VsZWN0ZWRDaGF0UmVmfVxuICAgICAgICAgIGFnZW50c05hdkFjdGl2ZT17c2lkZWJhckFnZW50c05hdkFjdGl2ZX1cbiAgICAgICAgICBoYW5kbGVPcGVuU2tpbGxzPXtoYW5kbGVPcGVuU2tpbGxzfVxuICAgICAgICAgIG9uT3Blbk1haWFrZXJDcmVhdG9yPXtoYW5kbGVHb1RvTWFpYWtlcn1cbiAgICAgICAgICBpc0xlZ2FjeUNvbnRleHRTZXNzaW9uPXshIWxlZ2FjeUNvbnRleHRTZXNzaW9ufVxuICAgICAgICAgIGluaXRpYWxPcGVuPXtzYXZlZFNlc3Npb25Pbk1vdW50UmVmLmN1cnJlbnQ/LnNpZGViYXJPcGVuID8/IGZhbHNlfVxuICAgICAgICAgIG9uT3BlbkNoYW5nZT17aGFuZGxlU2lkZWJhck9wZW5DaGFuZ2V9XG4gICAgICAgIC8+XG4gICAgICApIDogbnVsbH1cbiAgICAgIDxTQ0NBSU1Db250ZW50IGV4cGFuZGVkPXtleHBhbmRlZH0gZmxvYXRpbmc9e2lzRmxvYXRpbmd9PlxuICAgICAgICA8Q2hhdEFJTW9kYWxIZWFkZXJcbiAgICAgICAgICBsYXlvdXRNb2RlPXtsYXlvdXRNb2RlfVxuICAgICAgICAgIG9uTGF5b3V0TW9kZUNoYW5nZT17aGFuZGxlTGF5b3V0TW9kZUNoYW5nZX1cbiAgICAgICAgICBleHBhbmRlZD17ZXhwYW5kZWR9XG4gICAgICAgICAgZHJhZ2dhYmxlPXtpc0Zsb2F0aW5nfVxuICAgICAgICAgIG9uRHJhZ1N0YXJ0PXtoYW5kbGVEcmFnU3RhcnR9XG4gICAgICAgICAgb25EcmFnTW92ZT17aGFuZGxlRHJhZ01vdmV9XG4gICAgICAgICAgb25EcmFnRW5kPXtoYW5kbGVEcmFnRW5kfVxuICAgICAgICAgIGhhbmRsZU1pbmltaXplPXtoYW5kbGVNaW5pbWl6ZX1cbiAgICAgICAgICBhZ2VudHM9e2FnZW50cy5kYXRhfVxuICAgICAgICAgIGhhc0Vycm9yPXshIWFnZW50RXJyb3J9XG4gICAgICAgICAgbG9hZGluZz17bG9hZGluZ31cbiAgICAgICAgICBsb2FkaW5nTW9yZT17bG9hZGluZ01vcmV9XG4gICAgICAgICAgaGFzTW9yZT17YWdlbnRzLmhhc19tb3JlfVxuICAgICAgICAgIGhhbmRsZVJlc2V0Q2hhdD17aGFuZGxlUmVzZXRDaGF0fVxuICAgICAgICAgIG9uQWdlbnRVcGRhdGU9e3VwZGF0ZUFnZW50RmF2b3JpdGV9XG4gICAgICAgICAgbG9hZE1vcmVBZ2VudHM9e2xvYWRNb3JlQWdlbnRzfVxuICAgICAgICAgIHNvcnRBZ2VudHNMaXN0PXtzb3J0QWdlbnRzTGlzdH1cbiAgICAgICAgICBpc015QWdlbnRzU2VjdGlvbj17aXNNeUFnZW50c1NlY3Rpb259XG4gICAgICAgICAgaXNNYWlha2VyU2VjdGlvbj17aXNNYWlha2VyQ3JlYXRvckhvbWV9XG4gICAgICAgICAgaGlkZUFnZW50U2VsZWN0b3I9e2hpZGVIZWFkZXJBZ2VudFNlbGVjdG9yfVxuICAgICAgICAgIHNob3dCYWNrQnV0dG9uPXtzaG93QmFja0J1dHRvbn1cbiAgICAgICAgICBvbkJhY2s9e2hhbmRsZUJhY2t9XG4gICAgICAgIC8+XG4gICAgICAgIHtoYXNFcnJvciA/IChcbiAgICAgICAgICA8TUFJQUVycm9yIC8+XG4gICAgICAgICkgOiB2YWxpZGF0ZUFjY2Vzc0J5RmVhdHVyZShzZWN0aW9uLCB1c2VyKSA/IChcbiAgICAgICAgICA8Q2hhdEFJQ29udGVudFxuICAgICAgICAgICAgY3VycmVudE9wdGlvbj17Y29tcHV0ZWRDdXJyZW50T3B0aW9ufVxuICAgICAgICAgICAgaGFuZGxlcnM9e3sgLi4uaGFuZGxlcnMsIGNoYXQ6IHN0YXJ0Q2hhdCwgaG9tZTogaGFuZGxlcnMuaG9tZSwgaGFuZGxlR29Ib21lIH19XG4gICAgICAgICAgICBvbkVycm9yPXsoKSA9PiBzZXRIYXNFcnJvcih0cnVlKX1cbiAgICAgICAgICAgIHJlZnM9e3sgdXNlckluaXRpYWxNZXNzYWdlLCBpbml0aWFsQ2hhdElkIH19XG4gICAgICAgICAgICBvblNlbmRNZXNzYWdlUmVhZHk9e2hhbmRsZVNlbmRNZXNzYWdlUmVhZHl9XG4gICAgICAgICAgICBleHBhbmRlZD17ZXhwYW5kZWR9XG4gICAgICAgICAgICBmbG9hdGluZz17aXNGbG9hdGluZ31cbiAgICAgICAgICAgIGFnZW50cz17YWdlbnRzLmRhdGF9XG4gICAgICAgICAgICBsb2FkaW5nQWdlbnRzPXtsb2FkaW5nfVxuICAgICAgICAgICAgb25EZWxldGVBZ2VudD17aGFuZGxlRGVsZXRlQWdlbnRGcm9tTXlBZ2VudHN9XG4gICAgICAgICAgICBvbkZhdm9yaXRlQWdlbnRVcGRhdGU9e3VwZGF0ZUFnZW50RmF2b3JpdGV9XG4gICAgICAgICAgICBoYXNNb3JlQWdlbnRzPXshIWFnZW50cy5oYXNfbW9yZX1cbiAgICAgICAgICAgIGxvYWRpbmdNb3JlQWdlbnRzPXtsb2FkaW5nTW9yZX1cbiAgICAgICAgICAgIG9uTG9hZE1vcmVBZ2VudHM9e2xvYWRNb3JlQWdlbnRzfVxuICAgICAgICAgICAgb25Hb1RvTWFpYWtlcj17aGFuZGxlR29Ub01haWFrZXJ9XG4gICAgICAgICAgICBza2lsbHM9e3NraWxsc31cbiAgICAgICAgICAgIGxvYWRpbmdTa2lsbHM9e2xvYWRpbmdTa2lsbHN9XG4gICAgICAgICAgICBvbkRlbGV0ZVNraWxsPXtyZW1vdmVTa2lsbH1cbiAgICAgICAgICAgIG9uU2VhcmNoQWdlbnRzPXtzZWFyY2hDdXN0b21BZ2VudHN9XG4gICAgICAgICAgICBzZWFyY2hMb2FkaW5nQWdlbnRzPXtzZWFyY2hMb2FkaW5nfVxuICAgICAgICAgICAgYWdlbnRFcnJvcj17YWdlbnRFcnJvcn1cbiAgICAgICAgICAgIGlzUmVzdG9yaW5nU2Vzc2lvbj17aXNSZXN0b3JpbmdTZXNzaW9ufVxuICAgICAgICAgIC8+XG4gICAgICAgICkgOiAoXG4gICAgICAgICAgPFByb2plY3RTdW1tYXJ5Q29udGVudCBvblJlc3RhcnRTdW1tYXJ5PXtoYW5kbGVycy5ob21lfSAvPlxuICAgICAgICApfVxuICAgICAgICB7KChjb21wdXRlZEN1cnJlbnRPcHRpb24gPT09IG9wdGlvbnMuaG9tZSAmJiAhIWFnZW50cz8uZGF0YT8ubGVuZ3RoKSB8fFxuICAgICAgICAgIGNvbXB1dGVkQ3VycmVudE9wdGlvbiA9PT0gb3B0aW9ucy5jaGF0KSAmJlxuICAgICAgICAgICFpc01haWFrZXJDcmVhdG9ySG9tZSAmJlxuICAgICAgICAgICFoYXNFcnJvciAmJlxuICAgICAgICAgICFsb2FkaW5nICYmXG4gICAgICAgICAgdmFsaWRhdGVBY2Nlc3NCeUZlYXR1cmUoc2VjdGlvbiwgdXNlcikgJiYgKFxuICAgICAgICAgICAgPENoYXRBaU1vZGFsRm9vdGVyXG4gICAgICAgICAgICAgIGFnZW50PXthZ2VudH1cbiAgICAgICAgICAgICAgaGFuZGxlU2VuZE1lc3NhZ2U9e2hhbmRsZVNlbmRNZXNzYWdlfVxuICAgICAgICAgICAgICBoYW5kbGVTdG9wR2VuZXJhdGlvbj17c3RvcEdlbmVyYXRpb25GdW5jdGlvbn1cbiAgICAgICAgICAgICAgaXNTdHJlYW1pbmc9e2lzU3RyZWFtaW5nfVxuICAgICAgICAgICAgICBpc1dyaXRpbmc9e2lzV3JpdGluZ31cbiAgICAgICAgICAgICAgY2hhdElkPXtpbml0aWFsQ2hhdElkfVxuICAgICAgICAgICAgICBuZXdDaGF0S2V5PXtuZXdDaGF0S2V5fVxuICAgICAgICAgICAgICB0b29sdGlwWkluZGV4PXt0b29sdGlwWkluZGV4fVxuICAgICAgICAgICAgICBsZWdhY3lDb250ZXh0U2Vzc2lvbj17bGVnYWN5Q29udGV4dFNlc3Npb259XG4gICAgICAgICAgICAgIG9uQ29udGludWVJbk5ld0NoYXQ9e2hhbmRsZUNvbnRpbnVlTGVnYWN5Q29udGV4dEluTmV3Q2hhdH1cbiAgICAgICAgICAgICAgbGF5b3V0TW9kZT17bGF5b3V0TW9kZX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cbiAgICAgIDwvU0NDQUlNQ29udGVudD5cbiAgICA8Lz5cbiAgKVxuXG4gIGNvbnN0IGNvbnRlbnRXcmFwcGVyID0gKFxuICAgIDxTQ0NBSU1Db250ZW50V3JhcHBlciBleHBhbmRlZD17ZXhwYW5kZWR9IGZsb2F0aW5nPXtpc0Zsb2F0aW5nfSByZWY9e2NvbnRlbnRXcmFwcGVyUmVmfT5cbiAgICAgIHttb2RhbFBhbmVsfVxuICAgIDwvU0NDQUlNQ29udGVudFdyYXBwZXI+XG4gIClcblxuICByZXR1cm4gKFxuICAgIHNlbGVjdG9yICYmXG4gICAgUmVhY3RET00uY3JlYXRlUG9ydGFsKFxuICAgICAgPFNDQ0FJTVdyYXBwZXJcbiAgICAgICAgZXhwYW5kZWQ9e2V4cGFuZGVkfVxuICAgICAgICBsYXlvdXRNb2RlPXtsYXlvdXRNb2RlfVxuICAgICAgICBkcmFnUG9zaXRpb249e3Jlc29sdmVkRHJhZ1Bvc2l0aW9ufVxuICAgICAgICBlbGV2YXRlZD17c2VjdGlvbiA9PT0gJ3Rhc2snfVxuICAgICAgICAkbWluaW1pemVkPXtpc01pbmltaXplZH1cbiAgICAgID5cbiAgICAgICAgPFNDQ0FJTU1pbmltaXplZEhpZGUgJGhpZGRlbj17aXNNaW5pbWl6ZWR9PlxuICAgICAgICAgIDxGbG9hdGluZ1BhbmVsTW90aW9uIHRpbHQ9e3RpbHRNb3Rpb259IGV4cGFuZGVkPXtleHBhbmRlZH0+XG4gICAgICAgICAgICB7Y29udGVudFdyYXBwZXJ9XG4gICAgICAgICAgPC9GbG9hdGluZ1BhbmVsTW90aW9uPlxuICAgICAgICA8L1NDQ0FJTU1pbmltaXplZEhpZGU+XG4gICAgICAgIHtpc01pbmltaXplZCAmJiAoXG4gICAgICAgICAgPE1haWFNaW5pbWl6ZWRQaWxsXG4gICAgICAgICAgICB1bnJlYWRDb3VudD17dW5yZWFkQ291bnR9XG4gICAgICAgICAgICBpc1N0cmVhbWluZz17aGFzQWN0aXZlU3RyZWFtfVxuICAgICAgICAgICAgb25SZXN0b3JlPXtoYW5kbGVSZXN0b3JlRnJvbU1pbmltaXplZH1cbiAgICAgICAgICAvPlxuICAgICAgICApfVxuICAgICAgICB7dXNlckhhc1Blcm1pc3Npb25zICYmIChcbiAgICAgICAgICA8QWJtQWdlbnRNb2RhbFxuICAgICAgICAgICAgYWRkQWdlbnQ9e2FkZEFnZW50fVxuICAgICAgICAgICAgdXBkYXRlQWdlbnQ9e3VwZGF0ZUFnZW50fVxuICAgICAgICAgICAgcmVtb3ZlQWdlbnQ9e3JlbW92ZUFnZW50fVxuICAgICAgICAgICAgdXBkYXRlQWdlbnRGYXZvcml0ZT17dXBkYXRlQWdlbnRGYXZvcml0ZX1cbiAgICAgICAgICAgIHNlbGVjdEZpcnN0QWdlbnQ9e3NlbGVjdEZpcnN0QWdlbnR9XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgICAge3VzZXJIYXNQZXJtaXNzaW9ucyAmJiAoXG4gICAgICAgICAgPEFibVNraWxsTW9kYWwgYWRkU2tpbGw9e2FkZFNraWxsfSB1cGRhdGVTa2lsbEluTGlzdD17dXBkYXRlU2tpbGxJbkxpc3R9IHJlbW92ZVNraWxsPXtyZW1vdmVTa2lsbH0gLz5cbiAgICAgICAgKX1cbiAgICAgICAge3VzZXJIYXNQZXJtaXNzaW9ucyAmJiA8QWJtU2tpbGxHZW5lcmF0ZU1vZGFsIC8+fVxuICAgICAgICA8U25hY2tiYXIgLz5cbiAgICAgIDwvU0NDQUlNV3JhcHBlcj4sXG4gICAgICBzZWxlY3RvclxuICAgIClcbiAgKVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQ0VBLFdBQVcsRUFDWEMsT0FBTyxFQUNQQyxRQUFRLEVBQ1JDLE1BQU0sRUFDTkMsU0FBUyxFQUNUQyxlQUFlLFFBRVYsT0FBTztBQUNkLE9BQU9DLFFBQVEsTUFBTSxXQUFXO0FBQ2hDLE9BQU9DLE1BQU0sTUFBTSxRQUFRO0FBQzNCLFNBQVNDLGNBQWMsUUFBUSxlQUFlO0FBQzlDLFNBQVNDLE9BQU8sUUFBUSwyQkFBMkI7QUFDbkQsU0FBU0MsaUJBQWlCLFFBQVEsZ0NBQWdDO0FBQ2xFLFNBQVNDLFNBQVMsUUFBUSx1QkFBdUI7QUFDakQsU0FBU0Msc0JBQXNCLFFBQVEsdUNBQXVDO0FBRTlFLFNBQVNDLGFBQWEsUUFBUSxrQkFBa0I7QUFDaEQsU0FBU0MsYUFBYSxFQUFFQyxPQUFPLFFBQVEsYUFBYTtBQUNwRCxTQUFTQyxPQUFPLFFBQVEs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