@agilemotion/oui-react-js 2.0.20 → 2.0.22

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.
@@ -10,7 +10,7 @@ var _Utils = _interopRequireDefault(require("../../Utils"));
10
10
  var _VCEventType = require("./VCEventType");
11
11
  var _VCEventManager = _interopRequireDefault(require("./VCEventManager"));
12
12
  var _VCRoomRecorder = _interopRequireDefault(require("./VCRoomRecorder"));
13
- var _MediaSoupHelper = _interopRequireDefault(require("./MediaSoupHelper"));
13
+ var _MediaSoupHelper = _interopRequireWildcard(require("./MediaSoupHelper"));
14
14
  var _Tracks = _interopRequireDefault(require("./Tracks"));
15
15
  var _IconButton = _interopRequireDefault(require("@mui/material/IconButton"));
16
16
  var _Icon = _interopRequireDefault(require("../Icon"));
@@ -176,24 +176,26 @@ const VCRoomParticipant = props => {
176
176
  const onAVSettingsChange = payload => {
177
177
  if (props.data.userId === payload.userId) {
178
178
  if (props.isCurrentUser) {
179
+ // The icon must reflect the ACTUAL producer, not the requested state:
180
+ // - mute: flip the icon only once stopProducing confirms the producer is
181
+ // closed and the track stopped (its success callback) — so we never show
182
+ // "muted" while audio is still going out.
183
+ // - unmute: produce() flips the icon off only after the producer is created.
179
184
  if (payload.audioMuted) {
180
- stopProducing('audio');
181
- } else {
182
- if (device) {
183
- produce('audio');
184
- }
185
+ stopProducing('audio', () => setAudioMuted(true));
186
+ } else if (device) {
187
+ produce('audio');
185
188
  }
186
189
  if (payload.videoMuted) {
187
- stopProducing('video');
188
- } else {
189
- if (device) {
190
- produce('video');
191
- }
190
+ stopProducing('video', () => setVideoMuted(true));
191
+ } else if (device) {
192
+ produce('video');
192
193
  }
194
+ } else {
195
+ setAudioMuted(payload.audioMuted);
196
+ setVideoMuted(payload.videoMuted);
193
197
  }
194
- setAudioMuted(payload.audioMuted);
195
- setVideoMuted(payload.videoMuted);
196
- } else if (props.isCurrentUser) {}
198
+ }
197
199
  };
198
200
  (0, _react.useEffect)(() => {
199
201
  if (props.data && !_Utils.default.isNull(props.data.avatarId) && props.data.avatarId !== 'undefined' && props.data.avatarId !== 'null') {
@@ -201,10 +203,18 @@ const VCRoomParticipant = props => {
201
203
  }
202
204
  }, [props.data]);
203
205
  (0, _react.useEffect)(() => {
204
- setAudioMuted(props.audioMuted);
206
+ // Remote tiles reflect the peer's reported state. The CURRENT user's icon is NOT
207
+ // synced from props — it is driven only by the actual producer (mute shows once the
208
+ // producer is confirmed stopped; unmute once produce() succeeds), so the icon can
209
+ // never claim "muted" while audio is still being produced.
210
+ if (!props.isCurrentUser) {
211
+ setAudioMuted(props.audioMuted);
212
+ }
205
213
  }, [props.audioMuted]);
206
214
  (0, _react.useEffect)(() => {
207
- setVideoMuted(props.videoMuted);
215
+ if (!props.isCurrentUser) {
216
+ setVideoMuted(props.videoMuted);
217
+ }
208
218
  }, [props.videoMuted]);
209
219
  (0, _react.useEffect)(() => {
210
220
  if (producerTransport) {
@@ -387,8 +397,28 @@ const VCRoomParticipant = props => {
387
397
  producer = await producerTransport.produce(params);
388
398
  } catch (e) {
389
399
  console.log(e);
400
+ // Stop the just-captured track so the mic/cam isn't left live after a failed produce.
401
+ track.stop();
402
+ // A fatal RTP-extension collision on createOffer can't be recovered in-place;
403
+ // ask the user to rejoin. The icon is NOT flipped to unmuted (produce failed).
404
+ if ((0, _MediaSoupHelper.isRtpCollisionError)(e)) {
405
+ _VCEventManager.default.fireEvent(_VCEventType.VCEventType.SYSTEM_ALERT, {
406
+ payload: {
407
+ message: _MediaSoupHelper.REJOIN_ALERT_MESSAGE
408
+ }
409
+ });
410
+ }
411
+ return;
390
412
  }
391
413
  if (producer) {
414
+ // Producing is confirmed — now (and only now) clear the muted icon for this kind.
415
+ if (props.isCurrentUser) {
416
+ if (type === 'audio') {
417
+ setAudioMuted(false);
418
+ } else if (type === 'video') {
419
+ setVideoMuted(false);
420
+ }
421
+ }
392
422
  producerTransport.getStats().then(data => console.log(data));
393
423
  producers.set(type, producer);
394
424
  if (type === 'video') {
@@ -424,6 +454,11 @@ const VCRoomParticipant = props => {
424
454
  const stopProducing = (type, callback) => {
425
455
  if (!producers.has(type)) {
426
456
  console.log('There is no producer for this type ' + type);
457
+ // Nothing is being produced, so the stop is trivially satisfied — let the
458
+ // caller (e.g. the mute toggle) treat this as a confirmed "stopped".
459
+ if (callback) {
460
+ callback();
461
+ }
427
462
  return;
428
463
  }
429
464
  let producerId = producers.get(type).id;
@@ -820,4 +855,4 @@ const VCRoomParticipant = props => {
820
855
  })));
821
856
  };
822
857
  var _default = exports.default = VCRoomParticipant;
823
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfVXRpbHMiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX1ZDRXZlbnRUeXBlIiwiX1ZDRXZlbnRNYW5hZ2VyIiwiX1ZDUm9vbVJlY29yZGVyIiwiX01lZGlhU291cEhlbHBlciIsIl9UcmFja3MiLCJfSWNvbkJ1dHRvbiIsIl9JY29uIiwiX2ljb25zTWF0ZXJpYWwiLCJfVG9vbHRpcCIsIl9tYXRlcmlhbCIsIl9Tb2NrZXRNYW5hZ2VyIiwiX0J1dHRvbiIsIl9BcHBsaWNhdGlvbk1hbmFnZXIiLCJfYXVkaW9MZXZlbE1ldGVyIiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwidCIsIldlYWtNYXAiLCJyIiwibiIsIm8iLCJpIiwiZiIsIl9fcHJvdG9fXyIsImhhcyIsImdldCIsInNldCIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiU1BFQUtJTkdfTEVWRUwiLCJWSURFT19DT0RFQ19PUFRJT05TIiwiZXhwb3J0cyIsInZpZGVvR29vZ2xlU3RhcnRCaXRyYXRlIiwiVklERU9fQ09OU1RSQUlOVFMiLCJhdWRpbyIsInZpZGVvIiwid2lkdGgiLCJtaW4iLCJpZGVhbCIsImhlaWdodCIsIlZJREVPX0VOQ09ESU5HUyIsInJpZCIsIm1heEJpdHJhdGUiLCJzY2FsYWJpbGl0eU1vZGUiLCJsb2NhdGlvbiIsIndpbmRvdyIsInByb3RvY29sIiwiaG9zdG5hbWUiLCJWQ1Jvb21QYXJ0aWNpcGFudCIsInByb3BzIiwiaGFuZFJhaXNlZCIsInNldEhhbmRSYWlzZWQiLCJSZWFjdCIsInVzZVN0YXRlIiwidmlkZW9NdXRlZCIsInNldFZpZGVvTXV0ZWQiLCJhdWRpb011dGVkIiwic2V0QXVkaW9NdXRlZCIsInByb2R1Y2VyVHJhbnNwb3J0Iiwic2V0UHJvZHVjZXJUcmFuc3BvcnQiLCJ2aWRlb1JlZnJlc2hlciIsInNldFZpZGVvUmVmcmVzaGVyIiwicHJvZHVjZXJzIiwiTWFwIiwiZmFpbGVkUHJvZHVjZXJzRHVlVG9OdWxsVHJhbnNwb3J0IiwiYXVkaW9EZXZpY2VzIiwic2V0QXVkaW9EZXZpY2VzIiwic2VsZWN0ZWRBdWRpb0RldmljZSIsInNldFNlbGVjdGVkQXVkaW9EZXZpY2UiLCJjb25zdW1lcnMiLCJzb3VuZExldmVsIiwic2V0U291bmRMZXZlbCIsImV2ZW50SGFuZGxlciIsInZpZGVvUmVmIiwidXNlUmVmIiwidmlkZW9TdHJlYW0iLCJhdWRpb1JlZiIsInRyYWNrcyIsIlRyYWNrcyIsInNvdW5kTGV2ZWxDb3VudGVyIiwibWV0ZXJzIiwidW5tb3VudGVkUmVmIiwic2hvd1ZpZGVvIiwiZGV2aWNlIiwicGFydGljaXBhbnRzIiwibnVtYmVyT2ZJblZpZXdQYXJ0aWNpcGFudHMiLCJhbmNob3JFbCIsInNldEFuY2hvckVsIiwib3Blbk1vcmVBY3Rpb25zIiwiQm9vbGVhbiIsImRvd25sb2FkVXJsIiwic2V0RG93bmxvYWRVcmwiLCJoYW5kbGVyIiwiaWQiLCJkYXRhIiwidXNlcklkIiwib24iLCJldmVudFR5cGUiLCJiZSIsIlZDRXZlbnRUeXBlIiwiQVVESU9fVklTVUFMX1NFVFRJTkdTX0NIQU5HRUQiLCJvbkFWU2V0dGluZ3NDaGFuZ2UiLCJwYXlsb2FkIiwiUkFJU0VfSEFORCIsIm9uUmFpc2VIYW5kIiwiTE9XRVJfSEFORCIsIm9uTG93ZXJIYW5kIiwiTkVXX1BST0RVQ0VSUyIsIm9uTmV3UHJvZHVjZXJzIiwiQ09OU1VNRVJfQ0xPU0VEIiwiY29uc3VtZXJJZCIsInJlbW92ZUNvbnN1bWVyIiwia2luZCIsIkFVRElPX0xFVkVMIiwibGV2ZWwiLCJoYW5kbGVDbGlja0RldmljZXNJY29uIiwiZXZlbnQiLCJjdXJyZW50VGFyZ2V0IiwiY2hhbmdlQXVkaW9EZXZpY2UiLCJ1c2VFZmZlY3QiLCJhcGkiLCJjdXJyZW50Iiwic3JjT2JqZWN0Iiwic291bmRNb25pdG9yIiwiaW5WaWV3IiwiaGFuZGxlQ2xvc2VEZXZpY2VNZW51IiwiaXNDdXJyZW50VXNlciIsInN0b3BQcm9kdWNpbmciLCJwcm9kdWNlIiwiVXRpbHMiLCJpc051bGwiLCJhdmF0YXJJZCIsImFwcGxpY2F0aW9uTWFuYWdlciIsImdldENvbnRleHRSb290Iiwic2Vzc2lvblN0b3JhZ2UiLCJnZXRJdGVtIiwib25BdWRpb0RldmljZUNoYW5nZSIsImNyZWF0ZVByb2R1Y2VyVHJhbnNwb3J0IiwiY29uc29sZSIsImxvZyIsInNwbGljZSIsImxlbmd0aCIsIm1lZGlhU291cEhlbHBlciIsImluaXRQcm9kdWNlclRyYW5zcG9ydCIsIm1lZXRpbmdJZCIsImdldFVzZXJEZXRhaWxzIiwidXNlcm5hbWUiLCJoYW5kbGVEZXZpY2VzQ2hhbmdlZCIsImRldmljZXMiLCJhdWRpb0RldmljZUxpc3QiLCJmb3JFYWNoIiwicHVzaCIsImRldmljZUlkIiwibGFiZWwiLCJ2Y0V2ZW50TWFuYWdlciIsInJlbW92ZVN1YnNjcmlwdGlvbnMiLCJhZGRTdWJzY3JpcHRpb25zIiwibmF2aWdhdG9yIiwibWVkaWFEZXZpY2VzIiwib25kZXZpY2VjaGFuZ2UiLCJlbnVtZXJhdGVEZXZpY2VzIiwidGhlbiIsImNvbnN1bWVGYWlsZWRQcm9kdWNlcnMiLCJrZXkiLCJ2YWx1ZSIsInN0b3AiLCJjbGVhciIsInN0YXJ0TWV0ZXIiLCJzdHJlYW0iLCJzdG9wTWV0ZXIiLCJzdGFydEF1ZGlvTGV2ZWxNZXRlciIsImZpcmVFdmVudCIsImRlbGV0ZSIsInR5cGUiLCJlcnJvciIsImNhblByb2R1Y2UiLCJtZWRpYUNvbnN0cmFpbnRzIiwiZ2V0VXNlck1lZGlhIiwidHJhY2siLCJnZXRBdWRpb1RyYWNrcyIsImdldFZpZGVvVHJhY2tzIiwicGFyYW1zIiwiaXNIb3N0IiwibWVkaWFSZWNvcmRlciIsImFkZFRyYWNrIiwic2V0QXVkaW9UcmFjayIsImVuY29kaW5ncyIsImNvZGVjT3B0aW9ucyIsInNldFZpZGVvVHJhY2siLCJwcm9kdWNlciIsImdldFN0YXRzIiwiZ2V0VHJhY2tzIiwic2V0VGltZW91dCIsImNhbGxiYWNrIiwicHJvZHVjZXJJZCIsImNsb3NlIiwic3RvcFZpZGVvVHJhY2siLCJzdG9wQXVkaW9UcmFjayIsInNvY2tldE1hbmFnZXIiLCJlbWl0RXZlbnQiLCJQUk9EVUNFUl9DTE9TRUQiLCJyb29tSWQiLCJjYXRjaCIsImxvYWRpbmciLCJhcmd1bWVudHMiLCJ1bmRlZmluZWQiLCJKU09OIiwic3RyaW5naWZ5Iiwic2NyZWVuU2hhcmluZyIsImNvbnN1bWUiLCJhdWRpb0VsZW1lbnQiLCJkb2N1bWVudCIsImdldEVsZW1lbnRCeUlkIiwicmVtb3ZlVHJhY2siLCJlbGVtZW50QnlJZCIsInJlbW92ZUNoaWxkIiwicmV0cnlDb25zdW1lIiwicmV0cmllcyIsInRyYW5zcG9ydCIsImdldFJlY3ZUcmFuc3BvcnQiLCJFcnJvciIsImdldENvbnN1bWVTdHJlYW0iLCJydHBDYXBhYmlsaXRpZXMiLCJfcmVmIiwiY29uc3VtZXIiLCJjcmVhdGVFbGVtZW50IiwicGxheXNpbmxpbmUiLCJhdXRvcGxheSIsImFwcGVuZENoaWxkIiwidHJhY2tFbmRlZFBhcnRpY2lwYW50IiwiZmluZCIsInAiLCJnZXRQYXJ0aWNpcGFudE5hbWUiLCJuYW1lIiwiY29uY2F0IiwiRnJhZ21lbnQiLCJjbGFzc05hbWUiLCJzdHlsZSIsInBhZGRpbmciLCJwb3NpdGlvbiIsImJvcmRlclJhZGl1cyIsIm92ZXJmbG93IiwiYm94U2l6aW5nIiwiYmFja2dyb3VuZENvbG9yIiwiYm9yZGVyIiwiZ2V0QXBwbGljYXRpb25QcmltYXJ5Q29sb3IiLCJib3hTaGFkb3ciLCJ0cmFuc2l0aW9uIiwibWFyZ2luQm90dG9tIiwic2l6aW5nIiwiY29sb3IiLCJmb250U2l6ZSIsImJhY2tncm91bmRSZXBlYXQiLCJiYWNrZ3JvdW5kU2l6ZSIsImJhY2tncm91bmRQb3NpdGlvbiIsImJhY2tncm91bmRJbWFnZSIsImdldEluaXRpYWxzIiwiYXV0b1BsYXkiLCJyZWYiLCJtdXRlZCIsIm9iamVjdEZpdCIsInRyYW5zZm9ybSIsInpJbmRleCIsImRpc3BsYXkiLCJsZWZ0IiwiYm90dG9tIiwiYWxpZ25JdGVtcyIsImdhcCIsIm1heFdpZHRoIiwiZm9udFdlaWdodCIsImxpbmVIZWlnaHQiLCJ3aGl0ZVNwYWNlIiwidGV4dE92ZXJmbG93IiwibWFyZ2luTGVmdCIsIm1hcmdpblJpZ2h0IiwianVzdGlmeUNvbnRlbnQiLCJvbkNsaWNrIiwib25Ib3N0QXVkaW9NdXRlIiwib25Ib3N0VmlkZW9NdXRlIiwidGl0bGUiLCJQYW5Ub29sIiwiTWVudSIsIm9wZW4iLCJvbkNsb3NlIiwiUGFwZXJQcm9wcyIsImVsZXZhdGlvbiIsInN4IiwiZmlsdGVyIiwibXQiLCJtbCIsIm1yIiwiY29udGVudCIsInRvcCIsInJpZ2h0IiwiYmdjb2xvciIsInRyYW5zZm9ybU9yaWdpbiIsImhvcml6b250YWwiLCJ2ZXJ0aWNhbCIsImFuY2hvck9yaWdpbiIsIm1hcCIsImluZGV4IiwiTWVudUl0ZW0iLCJfZGVmYXVsdCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9tZWRpYS9WQ1Jvb21QYXJ0aWNpcGFudC5qc3giXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzICovXG5pbXBvcnQgUmVhY3QsIHt1c2VFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGV9IGZyb20gJ3JlYWN0JztcbmltcG9ydCAnLi9WQ1Jvb21QYXJ0aWNpcGFudC5jc3MnO1xuaW1wb3J0IFV0aWxzIGZyb20gJy4uLy4uL1V0aWxzJztcbmltcG9ydCB7VkNFdmVudFR5cGV9IGZyb20gJy4vVkNFdmVudFR5cGUnO1xuaW1wb3J0IHZjRXZlbnRNYW5hZ2VyIGZyb20gJy4vVkNFdmVudE1hbmFnZXInO1xuaW1wb3J0IG1lZGlhUmVjb3JkZXIgZnJvbSAnLi9WQ1Jvb21SZWNvcmRlcic7XG5pbXBvcnQgbWVkaWFTb3VwSGVscGVyIGZyb20gJy4vTWVkaWFTb3VwSGVscGVyJztcbmltcG9ydCBUcmFja3MgZnJvbSAnLi9UcmFja3MnO1xuaW1wb3J0IEljb25CdXR0b24gZnJvbSAnQG11aS9tYXRlcmlhbC9JY29uQnV0dG9uJztcbmltcG9ydCBJY29uIGZyb20gJy4uL0ljb24nO1xuaW1wb3J0IHtQYW5Ub29sfSBmcm9tICdAbXVpL2ljb25zLW1hdGVyaWFsJztcbmltcG9ydCBUb29sdGlwIGZyb20gJ0BtdWkvbWF0ZXJpYWwvVG9vbHRpcCc7XG5pbXBvcnQge01lbnUsIE1lbnVJdGVtfSBmcm9tICdAbXVpL21hdGVyaWFsJztcbmltcG9ydCBzb2NrZXRNYW5hZ2VyIGZyb20gJy4uL1NvY2tldE1hbmFnZXInO1xuaW1wb3J0IEJ1dHRvbiBmcm9tICdAbXVpL21hdGVyaWFsL0J1dHRvbic7XG5pbXBvcnQgYXBwbGljYXRpb25NYW5hZ2VyIGZyb20gJy4uLy4uL0FwcGxpY2F0aW9uTWFuYWdlcic7XG5pbXBvcnQge3N0YXJ0QXVkaW9MZXZlbE1ldGVyfSBmcm9tICcuL2F1ZGlvTGV2ZWxNZXRlcic7XG5cbmNvbnN0IFNQRUFLSU5HX0xFVkVMID0gNjtcblxuZXhwb3J0IGNvbnN0IFZJREVPX0NPREVDX09QVElPTlMgPSB7XG4gICAgdmlkZW9Hb29nbGVTdGFydEJpdHJhdGU6IDEwMDBcbn07XG5cbmV4cG9ydCBjb25zdCBWSURFT19DT05TVFJBSU5UUyA9IHtcbiAgICBhdWRpbzogZmFsc2UsXG4gICAgdmlkZW86IHtcbiAgICAgICAgd2lkdGg6IHtcbiAgICAgICAgICAgIG1pbjogNjQwLFxuICAgICAgICAgICAgaWRlYWw6IDE5MjBcbiAgICAgICAgfSxcbiAgICAgICAgaGVpZ2h0OiB7XG4gICAgICAgICAgICBtaW46IDQwMCxcbiAgICAgICAgICAgIGlkZWFsOiAxMDgwXG4gICAgICAgIH1cbiAgICB9XG59O1xuXG5leHBvcnQgY29uc3QgVklERU9fRU5DT0RJTkdTID0gW1xuICAgIHtcbiAgICAgICAgcmlkOiAncjAnLFxuICAgICAgICBtYXhCaXRyYXRlOiAyMDAwMCxcbiAgICAgICAgLy9zY2FsZVJlc29sdXRpb25Eb3duQnk6IDEwLjAsXG4gICAgICAgIHNjYWxhYmlsaXR5TW9kZTogJ1MxVDMnXG4gICAgfSxcbiAgICB7XG4gICAgICAgIHJpZDogJ3IxJyxcbiAgICAgICAgbWF4Qml0cmF0ZTogMTUwMDAwLFxuICAgICAgICBzY2FsYWJpbGl0eU1vZGU6ICdTMVQzJ1xuICAgIH0sXG4gICAge1xuICAgICAgICByaWQ6ICdyMicsXG4gICAgICAgIG1heEJpdHJhdGU6IDQ1MDAwMCxcbiAgICAgICAgc2NhbGFiaWxpdHlNb2RlOiAnUzFUMydcbiAgICB9XG5dO1xuXG5jb25zdCBsb2NhdGlvbiA9IHdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCArICcvLycgKyB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWU7XG5jb25zdCBWQ1Jvb21QYXJ0aWNpcGFudCA9IChwcm9wcykgPT4ge1xuICAgIGNvbnN0IFtoYW5kUmFpc2VkLCBzZXRIYW5kUmFpc2VkXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgICBjb25zdCBbdmlkZW9NdXRlZCwgc2V0VmlkZW9NdXRlZF0gPSBSZWFjdC51c2VTdGF0ZShwcm9wcy52aWRlb011dGVkKTtcbiAgICBjb25zdCBbYXVkaW9NdXRlZCwgc2V0QXVkaW9NdXRlZF0gPSBSZWFjdC51c2VTdGF0ZShwcm9wcy5hdWRpb011dGVkKTtcbiAgICBjb25zdCBbcHJvZHVjZXJUcmFuc3BvcnQsIHNldFByb2R1Y2VyVHJhbnNwb3J0XSA9IFJlYWN0LnVzZVN0YXRlKHByb3BzLnByb2R1Y2VyVHJhbnNwb3J0KTtcbiAgICBjb25zdCBbdmlkZW9SZWZyZXNoZXIsIHNldFZpZGVvUmVmcmVzaGVyXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgICBjb25zdCBbcHJvZHVjZXJzXSA9IFJlYWN0LnVzZVN0YXRlKG5ldyBNYXAoKSk7XG4gICAgY29uc3QgW2ZhaWxlZFByb2R1Y2Vyc0R1ZVRvTnVsbFRyYW5zcG9ydF0gPSBSZWFjdC51c2VTdGF0ZShbXSk7XG4gICAgY29uc3QgW2F1ZGlvRGV2aWNlcywgc2V0QXVkaW9EZXZpY2VzXSA9IFJlYWN0LnVzZVN0YXRlKFtdKTtcbiAgICBjb25zdCBbc2VsZWN0ZWRBdWRpb0RldmljZSwgc2V0U2VsZWN0ZWRBdWRpb0RldmljZV0gPSBSZWFjdC51c2VTdGF0ZShudWxsKTtcbiAgICBjb25zdCBbY29uc3VtZXJzXSA9IFJlYWN0LnVzZVN0YXRlKG5ldyBNYXAoKSk7XG4gICAgY29uc3QgW3NvdW5kTGV2ZWwsIHNldFNvdW5kTGV2ZWxdID0gUmVhY3QudXNlU3RhdGUoMCk7XG4gICAgY29uc3QgW2V2ZW50SGFuZGxlcl0gPSB1c2VTdGF0ZSh7fSk7XG4gICAgY29uc3QgdmlkZW9SZWYgPSB1c2VSZWYoKTtcbiAgICBjb25zdCB2aWRlb1N0cmVhbSA9IHVzZVJlZigpO1xuICAgIGNvbnN0IGF1ZGlvUmVmID0gdXNlUmVmKCk7XG4gICAgY29uc3QgdHJhY2tzID0gdXNlUmVmKG5ldyBUcmFja3MoKSk7XG4gICAgY29uc3Qgc291bmRMZXZlbENvdW50ZXIgPSB1c2VSZWYoMCk7XG4gICAgLy8gQWN0aXZlLXNwZWFrZXIgbWV0ZXJzOiB0aGlzIChzZWxmKSB0aWxlIGlzIHRoZSBhdWRpbyBodWIg4oCUIGl0IGNvbnN1bWVzXG4gICAgLy8gZXZlcnkgcGFydGljaXBhbnQncyBhdWRpbyArIHByb2R1Y2VzIHRoZSBsb2NhbCBtaWMg4oCUIHNvIGl0IHJ1bnMgdGhlIGxldmVsXG4gICAgLy8gbWV0ZXJzIGFuZCBicm9hZGNhc3RzIHt1c2VySWQsIGxldmVsfSBmb3IgZWFjaCB0aWxlIHRvIGhpZ2hsaWdodCBpdHNlbGYuXG4gICAgY29uc3QgbWV0ZXJzID0gdXNlUmVmKG5ldyBNYXAoKSk7XG4gICAgLy8gU2V0IG9uIHVubW91bnQgc28gdGhlIHJlY3Vyc2l2ZSBjb25zdW1lL3JldHJ5IHNldFRpbWVvdXQgbG9vcHMgc3RvcFxuICAgIC8vIHJlLXNjaGVkdWxpbmcgKG90aGVyd2lzZSB0aGV5IHBvbGwvcmV0cnkgZm9yZXZlciBhZnRlciB0aGUgdGlsZSBpcyBnb25lKS5cbiAgICBjb25zdCB1bm1vdW50ZWRSZWYgPSB1c2VSZWYoZmFsc2UpO1xuICAgIGNvbnN0IHNob3dWaWRlbyA9IHRydWU7XG4gICAgY29uc3Qge1xuICAgICAgICBkZXZpY2UsXG4gICAgICAgIHBhcnRpY2lwYW50c1xuICAgIH0gPSBwcm9wcztcbiAgICBjb25zdCB7bnVtYmVyT2ZJblZpZXdQYXJ0aWNpcGFudHN9ID0gcHJvcHM7XG4gICAgY29uc3QgW2FuY2hvckVsLCBzZXRBbmNob3JFbF0gPSB1c2VTdGF0ZShudWxsKTtcbiAgICBjb25zdCBvcGVuTW9yZUFjdGlvbnMgPSBCb29sZWFuKGFuY2hvckVsKTtcblxuICAgIGNvbnN0IFtkb3dubG9hZFVybCwgc2V0RG93bmxvYWRVcmxdID0gdXNlU3RhdGUobnVsbCk7XG5cbiAgICBjb25zdCBoYW5kbGVyID0gKCkgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZ2V0IGlkKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnbWVldGluZy1wYXJ0aWNpcGFudC0nICsgcHJvcHMuZGF0YS51c2VySWQ7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb246IChldmVudFR5cGUsIGJlKSA9PiB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChldmVudFR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBWQ0V2ZW50VHlwZS5BVURJT19WSVNVQUxfU0VUVElOR1NfQ0hBTkdFRDpcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQVZTZXR0aW5nc0NoYW5nZShiZS5wYXlsb2FkID8gYmUucGF5bG9hZCA6IGJlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFZDRXZlbnRUeXBlLlJBSVNFX0hBTkQ6XG4gICAgICAgICAgICAgICAgICAgICAgICBvblJhaXNlSGFuZChiZS5wYXlsb2FkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFZDRXZlbnRUeXBlLkxPV0VSX0hBTkQ6XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkxvd2VySGFuZChiZS5wYXlsb2FkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFZDRXZlbnRUeXBlLk5FV19QUk9EVUNFUlM6XG4gICAgICAgICAgICAgICAgICAgICAgICBvbk5ld1Byb2R1Y2VycyhiZS5wYXlsb2FkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFZDRXZlbnRUeXBlLkNPTlNVTUVSX0NMT1NFRDpcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25zdW1lcnMuaGFzKGJlLnBheWxvYWQuY29uc3VtZXJJZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVDb25zdW1lcihiZS5wYXlsb2FkLmNvbnN1bWVySWQsIGJlLnBheWxvYWQua2luZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBWQ0V2ZW50VHlwZS5BVURJT19MRVZFTDpcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiZS5wYXlsb2FkICYmIGJlLnBheWxvYWQudXNlcklkID09PSBwcm9wcy5kYXRhLnVzZXJJZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFNvdW5kTGV2ZWwoYmUucGF5bG9hZC5sZXZlbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IGhhbmRsZUNsaWNrRGV2aWNlc0ljb24gPSAoZXZlbnQpID0+IHtcbiAgICAgICAgc2V0QW5jaG9yRWwoZXZlbnQuY3VycmVudFRhcmdldCk7XG4gICAgfTtcblxuICAgIGNvbnN0IGNoYW5nZUF1ZGlvRGV2aWNlID0gKGRldmljZSkgPT4ge1xuICAgICAgICBzZXRTZWxlY3RlZEF1ZGlvRGV2aWNlKGRldmljZSk7XG4gICAgfTtcblxuICAgIGNvbnN0IG9uUmFpc2VIYW5kID0gKHBheWxvYWQpID0+IHtcbiAgICAgICAgaWYgKHBheWxvYWQgJiYgcGF5bG9hZC51c2VySWQgPT09IHByb3BzLmRhdGEudXNlcklkKSB7XG4gICAgICAgICAgICBzZXRIYW5kUmFpc2VkKHRydWUpO1xuICAgICAgICAgICAgcHJvcHMuZGF0YS5oYW5kUmFpc2VkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBvbkxvd2VySGFuZCA9IChwYXlsb2FkKSA9PiB7XG4gICAgICAgIGlmIChwYXlsb2FkICYmIHBheWxvYWQudXNlcklkID09PSBwcm9wcy5kYXRhLnVzZXJJZCkge1xuICAgICAgICAgICAgc2V0SGFuZFJhaXNlZChmYWxzZSk7XG4gICAgICAgICAgICBwcm9wcy5kYXRhLmhhbmRSYWlzZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBldmVudEhhbmRsZXIuYXBpID0gaGFuZGxlcigpO1xuICAgIH0pO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKHZpZGVvUmVmLmN1cnJlbnQgJiYgdmlkZW9TdHJlYW0uY3VycmVudCkge1xuICAgICAgICAgICAgdmlkZW9SZWYuY3VycmVudC5zcmNPYmplY3QgPSB2aWRlb1N0cmVhbS5jdXJyZW50O1xuICAgICAgICB9XG4gICAgfSwgW3ZpZGVvUmVmLmN1cnJlbnRdKTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmIChwcm9wcy5zb3VuZE1vbml0b3IgJiYgIXByb3BzLmluVmlldykge1xuICAgICAgICAgICAgaWYgKHNvdW5kTGV2ZWwgPiAzKSB7XG4gICAgICAgICAgICAgICAgc291bmRMZXZlbENvdW50ZXIuY3VycmVudCA9IDEwO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChzb3VuZExldmVsQ291bnRlci5jdXJyZW50ID4gMCkge1xuICAgICAgICAgICAgICAgIHNvdW5kTGV2ZWxDb3VudGVyLmN1cnJlbnQtLTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcHJvcHMuc291bmRNb25pdG9yKHByb3BzLmRhdGEudXNlcklkLCBzb3VuZExldmVsQ291bnRlci5jdXJyZW50ID09PSAwIHx8IGF1ZGlvTXV0ZWQpO1xuICAgICAgICB9XG4gICAgfSwgW3NvdW5kTGV2ZWxdKTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmIChhdWRpb011dGVkKSB7XG4gICAgICAgICAgICBzZXRTb3VuZExldmVsKDApO1xuICAgICAgICAgICAgaWYgKHByb3BzLnNvdW5kTW9uaXRvciAmJiAhcHJvcHMuaW5WaWV3KSB7XG4gICAgICAgICAgICAgICAgcHJvcHMuc291bmRNb25pdG9yKHByb3BzLmRhdGEudXNlcklkLCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sIFthdWRpb011dGVkXSk7XG5cbiAgICBjb25zdCBoYW5kbGVDbG9zZURldmljZU1lbnUgPSAoKSA9PiB7XG4gICAgICAgIHNldEFuY2hvckVsKG51bGwpO1xuICAgIH07XG5cbiAgICBjb25zdCBvbkFWU2V0dGluZ3NDaGFuZ2UgPSAocGF5bG9hZCkgPT4ge1xuICAgICAgICBpZiAocHJvcHMuZGF0YS51c2VySWQgPT09IHBheWxvYWQudXNlcklkKSB7XG4gICAgICAgICAgICBpZiAocHJvcHMuaXNDdXJyZW50VXNlcikge1xuICAgICAgICAgICAgICAgIGlmIChwYXlsb2FkLmF1ZGlvTXV0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RvcFByb2R1Y2luZygnYXVkaW8nKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZGV2aWNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9kdWNlKCdhdWRpbycpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHBheWxvYWQudmlkZW9NdXRlZCkge1xuICAgICAgICAgICAgICAgICAgICBzdG9wUHJvZHVjaW5nKCd2aWRlbycpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkZXZpY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y2UoJ3ZpZGVvJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHNldEF1ZGlvTXV0ZWQocGF5bG9hZC5hdWRpb011dGVkKTtcbiAgICAgICAgICAgIHNldFZpZGVvTXV0ZWQocGF5bG9hZC52aWRlb011dGVkKTtcblxuICAgICAgICB9IGVsc2UgaWYgKHByb3BzLmlzQ3VycmVudFVzZXIpIHtcblxuICAgICAgICB9XG4gICAgfTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmIChwcm9wcy5kYXRhICYmICFVdGlscy5pc051bGwocHJvcHMuZGF0YS5hdmF0YXJJZClcbiAgICAgICAgICAgICYmIHByb3BzLmRhdGEuYXZhdGFySWQgIT09ICd1bmRlZmluZWQnICYmIHByb3BzLmRhdGEuYXZhdGFySWQgIT09ICdudWxsJykge1xuICAgICAgICAgICAgc2V0RG93bmxvYWRVcmwobG9jYXRpb24gKyBhcHBsaWNhdGlvbk1hbmFnZXIuZ2V0Q29udGV4dFJvb3QoKSArICcvZG9jcy9hcGkvdjEvbWFuYWdlci9kb3dubG9hZC8nICsgcHJvcHMuZGF0YS5hdmF0YXJJZCArXG4gICAgICAgICAgICAgICAgJz9hY2Nlc3NfdG9rZW49JyArIHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ2FjY2Vzc1Rva2VuJykgKyAnJmlkVG9rZW49JyArIHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ2lkVG9rZW4nKSk7XG4gICAgICAgIH1cbiAgICB9LCBbcHJvcHMuZGF0YV0pO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgc2V0QXVkaW9NdXRlZChwcm9wcy5hdWRpb011dGVkKTtcbiAgICB9LCBbcHJvcHMuYXVkaW9NdXRlZF0pO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgc2V0VmlkZW9NdXRlZChwcm9wcy52aWRlb011dGVkKTtcbiAgICB9LCBbcHJvcHMudmlkZW9NdXRlZF0pO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKHByb2R1Y2VyVHJhbnNwb3J0KSB7XG4gICAgICAgICAgICAvLyBBIChyZSlhc3NpZ25lZCB0cmFuc3BvcnQgbWVhbnMgZXhpc3RpbmcgcHJvZHVjZXJzIGxpdmVkIG9uIHRoZSBvbGRcbiAgICAgICAgICAgIC8vIChub3ctY2xvc2VkKSB0cmFuc3BvcnQuIFRlYXIgdGhlbSBkb3duIHByb3Blcmx5IOKAlCBjbG9zZSArIHN0b3AgdGhlXG4gICAgICAgICAgICAvLyBsb2NhbCB0cmFja3MgKyBub3RpZnkgdGhlIHNlcnZlciDigJQgc28gcHJvZHVjZSgpIHJlY3JlYXRlcyB0aGVtIG9uIHRoZVxuICAgICAgICAgICAgLy8gbmV3IHRyYW5zcG9ydCBpbnN0ZWFkIG9mIGVhcmx5LXJldHVybmluZy4gTm8tb3Agb24gZmlyc3QgbW91bnQuXG4gICAgICAgICAgICBzdG9wUHJvZHVjaW5nKCd2aWRlbycpO1xuICAgICAgICAgICAgc3RvcFByb2R1Y2luZygnYXVkaW8nKTtcblxuICAgICAgICAgICAgaWYgKCFwcm9wcy52aWRlb011dGVkKSB7XG4gICAgICAgICAgICAgICAgcHJvZHVjZSgndmlkZW8nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghcHJvcHMuYXVkaW9NdXRlZCkge1xuICAgICAgICAgICAgICAgIHByb2R1Y2UoJ2F1ZGlvJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LCBbcHJvZHVjZXJUcmFuc3BvcnRdKTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIHNldFByb2R1Y2VyVHJhbnNwb3J0KHByb3BzLnByb2R1Y2VyVHJhbnNwb3J0KTtcbiAgICB9LCBbcHJvcHMucHJvZHVjZXJUcmFuc3BvcnRdKTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmIChwcm9wcy5pc0N1cnJlbnRVc2VyKSB7XG4gICAgICAgICAgICBwcm9wcy5vbkF1ZGlvRGV2aWNlQ2hhbmdlKHNlbGVjdGVkQXVkaW9EZXZpY2UpO1xuICAgICAgICAgICAgc3RvcFByb2R1Y2luZygnYXVkaW8nLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHNlbGVjdGVkQXVkaW9EZXZpY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFwcm9kdWNlclRyYW5zcG9ydCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlUHJvZHVjZXJUcmFuc3BvcnQoKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghYXVkaW9NdXRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvZHVjZSgnYXVkaW8nKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSwgW3NlbGVjdGVkQXVkaW9EZXZpY2VdKTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIC8vIE9uY2UgdGhlIERldmljZSBpcyByZWFkeSwgY29uc3VtZSB0aGUgcHJvZHVjZXJzIHdlIGFscmVhZHkga25vdyBhYm91dFxuICAgICAgICAvLyBhbmQgcmVwbGF5IGFueSB0aGF0IGFycml2ZWQgYmVmb3JlIHdlIHdlcmUgcmVhZHkuIFJlY3YgdHJhbnNwb3J0c1xuICAgICAgICAvLyB0aGVtc2VsdmVzIGFyZSBjcmVhdGVkIGp1c3QtaW4tdGltZSBpbnNpZGUgY29uc3VtZSgpIChwZXIga2luZCksIHNvIHRoZVxuICAgICAgICAvLyB0cmlnZ2VyIGhlcmUgaXMgdGhlIERldmljZSwgbm90IGEgdHJhbnNwb3J0LlxuICAgICAgICBpZiAoZGV2aWNlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnREVWSUNFIFJFQURZIFdJVEggUFJPRFVDRVJTIDogJywgcHJvcHMuZGF0YS5wcm9kdWNlcnMpO1xuICAgICAgICAgICAgaWYgKHByb3BzLmRhdGEucHJvZHVjZXJzKSB7XG4gICAgICAgICAgICAgICAgb25OZXdQcm9kdWNlcnMocHJvcHMuZGF0YS5wcm9kdWNlcnMsIHRydWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBvbk5ld1Byb2R1Y2VycyhmYWlsZWRQcm9kdWNlcnNEdWVUb051bGxUcmFuc3BvcnQsIHRydWUpO1xuICAgICAgICAgICAgZmFpbGVkUHJvZHVjZXJzRHVlVG9OdWxsVHJhbnNwb3J0LnNwbGljZSgwLCBmYWlsZWRQcm9kdWNlcnNEdWVUb051bGxUcmFuc3BvcnQubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgIH0sIFtkZXZpY2VdKTtcblxuICAgIGNvbnN0IGNyZWF0ZVByb2R1Y2VyVHJhbnNwb3J0ID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICBzZXRQcm9kdWNlclRyYW5zcG9ydChhd2FpdCBtZWRpYVNvdXBIZWxwZXIuaW5pdFByb2R1Y2VyVHJhbnNwb3J0KHByb3BzLmRldmljZSwgcHJvcHMubWVldGluZ0lkLFxuICAgICAgICAgICAgYXBwbGljYXRpb25NYW5hZ2VyLmdldFVzZXJEZXRhaWxzKCkudXNlcm5hbWUpKTtcbiAgICB9O1xuXG4gICAgY29uc3QgaGFuZGxlRGV2aWNlc0NoYW5nZWQgPSAoZGV2aWNlcykgPT4ge1xuICAgICAgICBsZXQgYXVkaW9EZXZpY2VMaXN0ID0gW107XG4gICAgICAgIGRldmljZXMuZm9yRWFjaCgoZGV2aWNlKSA9PiB7XG4gICAgICAgICAgICBpZiAoJ2F1ZGlvaW5wdXQnID09PSBkZXZpY2Uua2luZCkge1xuICAgICAgICAgICAgICAgIGF1ZGlvRGV2aWNlTGlzdC5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgaWQ6IGRldmljZS5kZXZpY2VJZCxcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGRldmljZS5sYWJlbFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBzZXRBdWRpb0RldmljZXMoYXVkaW9EZXZpY2VMaXN0KTtcblxuICAgICAgICBpZiAoYXVkaW9EZXZpY2VMaXN0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHNldFNlbGVjdGVkQXVkaW9EZXZpY2UoYXVkaW9EZXZpY2VMaXN0WzBdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNldFNlbGVjdGVkQXVkaW9EZXZpY2UobnVsbCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgdmNFdmVudE1hbmFnZXIucmVtb3ZlU3Vic2NyaXB0aW9ucyhldmVudEhhbmRsZXIpO1xuICAgICAgICB2Y0V2ZW50TWFuYWdlci5hZGRTdWJzY3JpcHRpb25zKGV2ZW50SGFuZGxlciwgVkNFdmVudFR5cGUuQVVESU9fVklTVUFMX1NFVFRJTkdTX0NIQU5HRUQsXG4gICAgICAgICAgICBWQ0V2ZW50VHlwZS5SQUlTRV9IQU5ELCBWQ0V2ZW50VHlwZS5MT1dFUl9IQU5ELCBWQ0V2ZW50VHlwZS5ORVdfUFJPRFVDRVJTLCBWQ0V2ZW50VHlwZS5DT05TVU1FUl9DTE9TRUQsXG4gICAgICAgICAgICBWQ0V2ZW50VHlwZS5BVURJT19MRVZFTCk7XG5cbiAgICAgICAgaWYgKHByb3BzLmlzQ3VycmVudFVzZXIpIHtcbiAgICAgICAgICAgIG5hdmlnYXRvci5tZWRpYURldmljZXMub25kZXZpY2VjaGFuZ2UgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgbmF2aWdhdG9yLm1lZGlhRGV2aWNlcy5lbnVtZXJhdGVEZXZpY2VzKClcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4oKGRldmljZXMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVEZXZpY2VzQ2hhbmdlZChkZXZpY2VzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIG5hdmlnYXRvci5tZWRpYURldmljZXMuZW51bWVyYXRlRGV2aWNlcygpXG4gICAgICAgICAgICAgICAgLnRoZW4oKGRldmljZXMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZURldmljZXNDaGFuZ2VkKGRldmljZXMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcm9wcy5pc0N1cnJlbnRVc2VyKSB7XG4gICAgICAgICAgICBjb25zdW1lRmFpbGVkUHJvZHVjZXJzKCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJz09PT09PT09PT09PT09PT09PT09PT1ERVNUUk9ZSU5HIFBBUlRJQ0lQQU5UPT09PT09PT09PT09PT09PT09PT09PT09PSA6ICcgKyBwcm9wcy5kYXRhLnVzZXJJZCk7XG4gICAgICAgICAgICB1bm1vdW50ZWRSZWYuY3VycmVudCA9IHRydWU7XG5cbiAgICAgICAgICAgIGlmIChwcm9wcy5pc0N1cnJlbnRVc2VyKSB7XG4gICAgICAgICAgICAgICAgLy8gUmVsZWFzZSB0aGUgZ2xvYmFsIGRldmljZWNoYW5nZSBoYW5kbGVyIHRoaXMgY29tcG9uZW50IGluc3RhbGxlZCDigJRcbiAgICAgICAgICAgICAgICAvLyBvdGhlcndpc2UgaXQgc3Vydml2ZXMgdW5tb3VudCBhbmQgZmlyZXMgaW50byBzdGFsZSBjb21wb25lbnQgc3RhdGUuXG4gICAgICAgICAgICAgICAgbmF2aWdhdG9yLm1lZGlhRGV2aWNlcy5vbmRldmljZWNoYW5nZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgc3RvcFByb2R1Y2luZygnYXVkaW8nKTtcbiAgICAgICAgICAgICAgICBzdG9wUHJvZHVjaW5nKCd2aWRlbycpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGxldCBba2V5LCB2YWx1ZV0gb2YgY29uc3VtZXJzKSB7XG4gICAgICAgICAgICAgICAgcmVtb3ZlQ29uc3VtZXIoa2V5LCAndmlkZW8nKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gU3RvcCBldmVyeSBhdWRpby1sZXZlbCBtZXRlciAoc2VsZiBtaWMgKyBhbGwgY29uc3VtZWQgc3RyZWFtcykuXG4gICAgICAgICAgICBtZXRlcnMuY3VycmVudC5mb3JFYWNoKChzdG9wKSA9PiBzdG9wKCkpO1xuICAgICAgICAgICAgbWV0ZXJzLmN1cnJlbnQuY2xlYXIoKTtcblxuICAgICAgICAgICAgdmNFdmVudE1hbmFnZXIucmVtb3ZlU3Vic2NyaXB0aW9ucyhldmVudEhhbmRsZXIpO1xuICAgICAgICB9O1xuICAgIH0sIFtdKTtcblxuICAgIC8vIE1ldGVyIGEgc3RyZWFtIGFuZCBicm9hZGNhc3QgaXRzIGxldmVsIHVuZGVyIGB1c2VySWRgLiBLZXllZCBzbyB3ZSBjYW5cbiAgICAvLyBzdG9wL3JlcGxhY2UgaXQgd2hlbiB0aGUgY29uc3VtZXIgY2xvc2VzIG9yIHRoZSBwcm9kdWNlciByZXN0YXJ0cy5cbiAgICBjb25zdCBzdGFydE1ldGVyID0gKGtleSwgc3RyZWFtLCB1c2VySWQpID0+IHtcbiAgICAgICAgc3RvcE1ldGVyKGtleSk7XG4gICAgICAgIGNvbnN0IHN0b3AgPSBzdGFydEF1ZGlvTGV2ZWxNZXRlcihzdHJlYW0sIChsZXZlbCkgPT4ge1xuICAgICAgICAgICAgdmNFdmVudE1hbmFnZXIuZmlyZUV2ZW50KFZDRXZlbnRUeXBlLkFVRElPX0xFVkVMLCB7cGF5bG9hZDoge3VzZXJJZCwgbGV2ZWx9fSk7XG4gICAgICAgIH0pO1xuICAgICAgICBtZXRlcnMuY3VycmVudC5zZXQoa2V5LCBzdG9wKTtcbiAgICB9O1xuXG4gICAgY29uc3Qgc3RvcE1ldGVyID0gKGtleSkgPT4ge1xuICAgICAgICBjb25zdCBzdG9wID0gbWV0ZXJzLmN1cnJlbnQuZ2V0KGtleSk7XG4gICAgICAgIGlmIChzdG9wKSB7XG4gICAgICAgICAgICBzdG9wKCk7XG4gICAgICAgICAgICBtZXRlcnMuY3VycmVudC5kZWxldGUoa2V5KTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBwcm9kdWNlID0gYXN5bmMgKHR5cGUpID0+IHtcbiAgICAgICAgaWYgKCFkZXZpY2UpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ05vIGF2YWlsYWJsZSBkZXZpY2UnKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghZGV2aWNlLmNhblByb2R1Y2UoJ3ZpZGVvJykgJiYgdHlwZSA9PT0gJ3ZpZGVvJykge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignQ2Fubm90IHByb2R1Y2UgdmlkZW8nKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghc2VsZWN0ZWRBdWRpb0RldmljZSAmJiB0eXBlID09PSAnYXVkaW8nKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdObyBhdWRpbyBkZXZpY2Ugc2VsZWN0ZWQnKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcm9kdWNlcnMuaGFzKHR5cGUpKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnUHJvZHVjZXIgYWxyZWFkeSBleGlzdHMgZm9yIHRoaXMgdHlwZSAnICsgdHlwZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbWVkaWFDb25zdHJhaW50cztcbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICBjYXNlICdhdWRpbyc6XG4gICAgICAgICAgICAgICAgbWVkaWFDb25zdHJhaW50cyA9IHtcbiAgICAgICAgICAgICAgICAgICAgZGV2aWNlSWQ6IHNlbGVjdGVkQXVkaW9EZXZpY2UuaWQsXG4gICAgICAgICAgICAgICAgICAgIGF1ZGlvOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICB2aWRlbzogZmFsc2VcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICd2aWRlbyc6XG4gICAgICAgICAgICAgICAgbWVkaWFDb25zdHJhaW50cyA9IFZJREVPX0NPTlNUUkFJTlRTO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgc3RyZWFtID0gYXdhaXQgbmF2aWdhdG9yLm1lZGlhRGV2aWNlcy5nZXRVc2VyTWVkaWEobWVkaWFDb25zdHJhaW50cyk7XG4gICAgICAgIGNvbnN0IHRyYWNrID0gdHlwZSA9PT0gJ2F1ZGlvJyA/IHN0cmVhbS5nZXRBdWRpb1RyYWNrcygpWzBdIDogc3RyZWFtLmdldFZpZGVvVHJhY2tzKClbMF07XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgICAgICAgIHRyYWNrXG4gICAgICAgIH07XG5cbiAgICAgICAgYXVkaW9SZWYuY3VycmVudCA9IHN0cmVhbTtcbiAgICAgICAgaWYgKHR5cGUgPT09ICdhdWRpbycpIHtcbiAgICAgICAgICAgIC8vIE1ldGVyIHRoZSBsb2NhbCBtaWMgc28gdGhlIHNlbGYgdGlsZSBoaWdobGlnaHRzIHdoZW4geW91IHNwZWFrLlxuICAgICAgICAgICAgc3RhcnRNZXRlcignc2VsZi1hdWRpbycsIHN0cmVhbSwgcHJvcHMuZGF0YS51c2VySWQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcm9wcy5pc0hvc3QgJiYgdHlwZSA9PT0gJ2F1ZGlvJykge1xuICAgICAgICAgICAgbWVkaWFSZWNvcmRlci5hZGRUcmFjayhwcm9wcy5kYXRhLnVzZXJJZCwgdHJhY2spO1xuICAgICAgICAgICAgdHJhY2tzLmN1cnJlbnQuc2V0QXVkaW9UcmFjayh0cmFjayk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZSA9PT0gJ3ZpZGVvJykge1xuICAgICAgICAgICAgcGFyYW1zLmVuY29kaW5ncyA9IFZJREVPX0VOQ09ESU5HUztcbiAgICAgICAgICAgIHBhcmFtcy5jb2RlY09wdGlvbnMgPSBWSURFT19DT0RFQ19PUFRJT05TO1xuICAgICAgICAgICAgdHJhY2tzLmN1cnJlbnQuc2V0VmlkZW9UcmFjayh0cmFjayk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcHJvZHVjZXI7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBwcm9kdWNlciA9IGF3YWl0IHByb2R1Y2VyVHJhbnNwb3J0LnByb2R1Y2UocGFyYW1zKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJvZHVjZXIpIHtcbiAgICAgICAgICAgIHByb2R1Y2VyVHJhbnNwb3J0LmdldFN0YXRzKClcbiAgICAgICAgICAgICAgICAudGhlbigoZGF0YSkgPT4gY29uc29sZS5sb2coZGF0YSkpO1xuICAgICAgICAgICAgcHJvZHVjZXJzLnNldCh0eXBlLCBwcm9kdWNlcik7XG5cbiAgICAgICAgICAgIGlmICh0eXBlID09PSAndmlkZW8nKSB7XG4gICAgICAgICAgICAgICAgdmlkZW9SZWYuY3VycmVudC5zcmNPYmplY3QgPSBzdHJlYW07XG4gICAgICAgICAgICAgICAgdmlkZW9TdHJlYW0uY3VycmVudCA9IHN0cmVhbTtcbiAgICAgICAgICAgICAgICBzZXRWaWRlb1JlZnJlc2hlcighdmlkZW9SZWZyZXNoZXIpO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHN0cmVhbSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHByb2R1Y2VyLm9uKCd0cmFuc3BvcnRjbG9zZScsICgpID0+IHtcbiAgICAgICAgICAgICAgICBzdHJlYW0uc3JjT2JqZWN0LmdldFRyYWNrcygpXG4gICAgICAgICAgICAgICAgICAgIC5mb3JFYWNoKGZ1bmN0aW9uICh0cmFjaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2suc3RvcCgpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIHByb2R1Y2Vycy5kZWxldGUodHlwZSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcHJvZHVjZXIub24oJ2Nsb3NlJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHN0cmVhbS5zcmNPYmplY3QuZ2V0VHJhY2tzKClcbiAgICAgICAgICAgICAgICAgICAgLmZvckVhY2goZnVuY3Rpb24gKHRyYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cmFjay5zdG9wKCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgcHJvZHVjZXJzLmRlbGV0ZSh0eXBlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IGNvbnN1bWVGYWlsZWRQcm9kdWNlcnMgPSAoKSA9PiB7XG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKHVubW91bnRlZFJlZi5jdXJyZW50KSByZXR1cm47XG4gICAgICAgICAgICBpZiAoZGV2aWNlKSB7XG4gICAgICAgICAgICAgICAgb25OZXdQcm9kdWNlcnMoZmFpbGVkUHJvZHVjZXJzRHVlVG9OdWxsVHJhbnNwb3J0LCB0cnVlKTtcbiAgICAgICAgICAgICAgICBmYWlsZWRQcm9kdWNlcnNEdWVUb051bGxUcmFuc3BvcnQuc3BsaWNlKDAsIGZhaWxlZFByb2R1Y2Vyc0R1ZVRvTnVsbFRyYW5zcG9ydC5sZW5ndGgpO1xuICAgICAgICAgICAgICAgIGNvbnN1bWVGYWlsZWRQcm9kdWNlcnMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgNTAwMCk7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RvcFByb2R1Y2luZyA9ICh0eXBlLCBjYWxsYmFjaykgPT4ge1xuICAgICAgICBpZiAoIXByb2R1Y2Vycy5oYXModHlwZSkpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdUaGVyZSBpcyBubyBwcm9kdWNlciBmb3IgdGhpcyB0eXBlICcgKyB0eXBlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBwcm9kdWNlcklkID0gcHJvZHVjZXJzLmdldCh0eXBlKS5pZDtcbiAgICAgICAgY29uc29sZS5sb2coJ0Nsb3NlIHByb2R1Y2VyJywgcHJvZHVjZXJJZCk7XG5cbiAgICAgICAgcHJvZHVjZXJzLmdldCh0eXBlKVxuICAgICAgICAgICAgLmNsb3NlKCk7XG4gICAgICAgIHByb2R1Y2Vycy5kZWxldGUodHlwZSk7XG4gICAgICAgIGlmICh0eXBlID09PSAndmlkZW8nKSB7XG4gICAgICAgICAgICB0cmFja3MuY3VycmVudC5zdG9wVmlkZW9UcmFjaygpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGUgPT09ICdhdWRpbycpIHtcbiAgICAgICAgICAgIHRyYWNrcy5jdXJyZW50LnN0b3BBdWRpb1RyYWNrKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zb2xlLmxvZygnQ0xPU0lORyBQUk9EVUNFUiBPRiBJRCA6ICcgKyBwcm9kdWNlcklkKTtcbiAgICAgICAgc29ja2V0TWFuYWdlci5lbWl0RXZlbnQoVkNFdmVudFR5cGUuUFJPRFVDRVJfQ0xPU0VELCB7XG4gICAgICAgICAgICB1c2VySWQ6IHByb3BzLmRhdGEudXNlcklkLFxuICAgICAgICAgICAgcHJvZHVjZXJJZCxcbiAgICAgICAgICAgIHJvb21JZDogcHJvcHMubWVldGluZ0lkXG4gICAgICAgIH0pXG4gICAgICAgICAgICAudGhlbigoZGF0YSkgPT4ge1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5jYXRjaCgoZSkgPT4gY29uc29sZS5sb2coJ1BST0RVQ0VSX0NMT1NFRCBFUlJPUiA6ICcsIGUpKTtcbiAgICB9O1xuXG4gICAgY29uc3Qgb25OZXdQcm9kdWNlcnMgPSAocHJvZHVjZXJzLCBsb2FkaW5nID0gZmFsc2UpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coXCI9PT09PT0gUFJPRFVDRVJTIFJFQ0VJVkVEIDogWyBcIiArIEpTT04uc3RyaW5naWZ5KHByb2R1Y2VycykgKyBcIiBdID09PT09PT1cIik7XG4gICAgICAgIGZvciAoY29uc3QgcHJvZHVjZXIgb2YgcHJvZHVjZXJzKSB7XG4gICAgICAgICAgICBpZiAoZGV2aWNlKSB7XG4gICAgICAgICAgICAgICAgaWYgKHByb2R1Y2VyLnVzZXJJZCA9PT0gcHJvcHMuZGF0YS51c2VySWQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByb2R1Y2VyLmtpbmQgPT09ICd2aWRlbycgJiYgIXByb2R1Y2VyLnNjcmVlblNoYXJpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdDQUxMSU5HIENPTlNVTUUgRlJPTSBPTiBORVcgUFJPRFVDRVJTIEZPUiA6ICcgKyBwcm9wcy5kYXRhLnVzZXJJZCArICcgLSAnICsgcHJvZHVjZXIucHJvZHVjZXJJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdW1lKHByb2R1Y2VyLnByb2R1Y2VySWQsIHByb2R1Y2VyLmtpbmQsIGxvYWRpbmcsIHByb2R1Y2VyLnVzZXJJZCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAocHJvcHMuaXNDdXJyZW50VXNlciB8fCBsb2FkaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFRoZSBzbWFsbCBwYXJ0aWNpcGFudCBib3ggYXQgdGhlIGJvdHRvbSBiZWxvbmdpbmcgdG8gdGhlIGN1cnJlbnQgdXNlciBtdXN0IGNvbnN1bWUgYWxsIGF1ZGlvXG4gICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYmVjYXVzZSB3ZSBkbyBub3Qgd2FudCB0byBkaXN0dXJiIHRoZSBhdWRpbyBkdWUgdG8gYW55IHJlbmRlcmluZyBzdWNoIGFzIEJyaW5nIHRvIHZpZXdcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByb2R1Y2VyLmtpbmQgPT09ICdhdWRpbycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN1bWUocHJvZHVjZXIucHJvZHVjZXJJZCwgcHJvZHVjZXIua2luZCwgbG9hZGluZywgcHJvZHVjZXIudXNlcklkKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZmFpbGVkUHJvZHVjZXJzRHVlVG9OdWxsVHJhbnNwb3J0LnB1c2gocHJvZHVjZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnNvbGUubG9nKFwiPT09PT09IFBST0RVQ0VSUyBUSEFUIENPVUxEIE5PVCBCRSBDT05TVU1FUyA6IFsgXCIgKyBKU09OLnN0cmluZ2lmeShmYWlsZWRQcm9kdWNlcnNEdWVUb051bGxUcmFuc3BvcnQpICsgXCIgXSA9PT09PT09XCIpO1xuICAgIH07XG5cbiAgICBjb25zdCByZW1vdmVDb25zdW1lciA9IChjb25zdW1lcklkLCBraW5kLCB1c2VySWQpID0+IHtcbiAgICAgICAgLy8gU3RvcCBhbnkgYWN0aXZlLXNwZWFrZXIgbWV0ZXIgYXR0YWNoZWQgdG8gdGhpcyBjb25zdW1lcidzIHN0cmVhbS5cbiAgICAgICAgc3RvcE1ldGVyKGNvbnN1bWVySWQpO1xuICAgICAgICBpZiAoa2luZCA9PT0gJ3ZpZGVvJykge1xuICAgICAgICAgICAgaWYgKHZpZGVvU3RyZWFtLmN1cnJlbnQpIHtcbiAgICAgICAgICAgICAgICBpZiAodmlkZW9TdHJlYW0uY3VycmVudCkge1xuICAgICAgICAgICAgICAgICAgICB2aWRlb1N0cmVhbS5jdXJyZW50LmdldFRyYWNrcygpXG4gICAgICAgICAgICAgICAgICAgICAgICAuZm9yRWFjaChmdW5jdGlvbiAodHJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFjay5zdG9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoa2luZCA9PT0gJ2F1ZGlvJykge1xuICAgICAgICAgICAgbGV0IGF1ZGlvRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGNvbnN1bWVySWQpO1xuICAgICAgICAgICAgaWYgKGF1ZGlvRWxlbWVudCAmJiBhdWRpb0VsZW1lbnQuc3JjT2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgYXVkaW9FbGVtZW50LnNyY09iamVjdC5nZXRUcmFja3MoKVxuICAgICAgICAgICAgICAgICAgICAuZm9yRWFjaChmdW5jdGlvbiAodHJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNrLnN0b3AoKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBpZiAodXNlcklkICYmIG1lZGlhUmVjb3JkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgbWVkaWFSZWNvcmRlci5yZW1vdmVUcmFjayh1c2VySWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsZXQgZWxlbWVudEJ5SWQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChwcm9wcy5kYXRhLnVzZXJJZCArICctYXVkaW8tZWwtY29udGFpbmVyJyk7XG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnRCeUlkKSB7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRCeUlkLnJlbW92ZUNoaWxkKGF1ZGlvRWxlbWVudCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3VtZXJzLmRlbGV0ZShjb25zdW1lcklkKTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gcmV0cnlDb25zdW1lKGtpbmQsIHVzZXJJZCwgZSwgcmV0cmllcywgcHJvZHVjZXJJZCwgbG9hZGluZykge1xuICAgICAgICBjb25zb2xlLmxvZygnRkFJTEVEIFRPIENPTlNVTUUgJyArIGtpbmQgKyAnIEZST00gJyArIHVzZXJJZCk7XG4gICAgICAgIGNvbnNvbGUubG9nKGUpO1xuXG4gICAgICAgIGlmIChyZXRyaWVzIDwgMTApIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdSRS1UUllJTkcgWycgKyByZXRyaWVzICsgJ10nKTtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmICh1bm1vdW50ZWRSZWYuY3VycmVudCkgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGNvbnN1bWUocHJvZHVjZXJJZCwga2luZCwgbG9hZGluZywgdXNlcklkLCByZXRyaWVzKTtcbiAgICAgICAgICAgIH0sIDUwMDApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ0NPTVBMRVRFTFkgRkFJTEVEIFRPIENPTlNVTUUgJyArIGtpbmQgKyAnIEZST00gJyArIHVzZXJJZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBjb25zdW1lID0gYXN5bmMgKHByb2R1Y2VySWQsIGtpbmQsIGxvYWRpbmcsIHVzZXJJZCwgcmV0cmllcyA9IDApID0+IHtcbiAgICAgICAgLy8gR2V0IChhbmQgbGF6aWx5IGNyZWF0ZSkgdGhlIHJlY3YgdHJhbnNwb3J0IGZvciB0aGlzIGtpbmQuIGF1ZGlvIGFuZFxuICAgICAgICAvLyB2aWRlbyByaWRlIHNlcGFyYXRlIHRyYW5zcG9ydHMsIHNvIGEgY2xvc2VkIGNvbnN1bWVyJ3MgbS1zZWN0aW9uIGlzXG4gICAgICAgIC8vIG5ldmVyIHJlY3ljbGVkIGFjcm9zcyBraW5kcyDigJQgd2hpY2ggaXMgd2hhdCB0cmlnZ2VyZWQgdGhlIFJUUFxuICAgICAgICAvLyBleHRlbnNpb24taWQgY29sbGlzaW9uLlxuICAgICAgICBjb25zdCB0cmFuc3BvcnQgPSBhd2FpdCBwcm9wcy5nZXRSZWN2VHJhbnNwb3J0KGtpbmQpO1xuICAgICAgICBpZiAoIXRyYW5zcG9ydCkge1xuICAgICAgICAgICAgcmV0cnlDb25zdW1lKGtpbmQsIHVzZXJJZCwgbmV3IEVycm9yKCdyZWN2IHRyYW5zcG9ydCB1bmF2YWlsYWJsZSBmb3IgJyArIGtpbmQpLCByZXRyaWVzLCBwcm9kdWNlcklkLCBsb2FkaW5nKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBtZWRpYVNvdXBIZWxwZXIuZ2V0Q29uc3VtZVN0cmVhbShwcm9kdWNlcklkLCBkZXZpY2UucnRwQ2FwYWJpbGl0aWVzLCB0cmFuc3BvcnQsIHByb3BzLm1lZXRpbmdJZCxcbiAgICAgICAgICAgIGFwcGxpY2F0aW9uTWFuYWdlci5nZXRVc2VyRGV0YWlscygpLnVzZXJuYW1lLCBraW5kKVxuICAgICAgICAgICAgLnRoZW4oXG4gICAgICAgICAgICAgICAgKHtcbiAgICAgICAgICAgICAgICAgICAgIGNvbnN1bWVyLFxuICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLFxuICAgICAgICAgICAgICAgICAgICAga2luZFxuICAgICAgICAgICAgICAgICB9KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb25zdW1lcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3VtZXJzLnNldChjb25zdW1lci5pZCwgY29uc3VtZXIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PUNPTlNVTUU9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IDogJyArIGtpbmQgKyAnIEZPUiA6ICcgKyB1c2VySWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGtpbmQgPT09ICd2aWRlbycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmlkZW9SZWYuY3VycmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWRlb1JlZi5jdXJyZW50LnNyY09iamVjdCA9IHN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWRlb1N0cmVhbS5jdXJyZW50ID0gc3RyZWFtO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VmlkZW9NdXRlZChmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VmlkZW9SZWZyZXNoZXIoIXZpZGVvUmVmcmVzaGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFja3MuY3VycmVudC5zZXRWaWRlb1RyYWNrKHN0cmVhbS5nZXRWaWRlb1RyYWNrcygpWzBdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BzLmlzQ3VycmVudFVzZXIgfHwgbG9hZGluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgYXVkaW9FbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYXVkaW8nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9FbGVtZW50LnNyY09iamVjdCA9IHN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9FbGVtZW50LmlkID0gY29uc3VtZXIuaWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvRWxlbWVudC5wbGF5c2lubGluZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb0VsZW1lbnQuYXV0b3BsYXkgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWVldGluZy1hdWRpby1lbC1jb250YWluZXInKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmFwcGVuZENoaWxkKGF1ZGlvRWxlbWVudCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWV0ZXIgdGhpcyBwYXJ0aWNpcGFudCdzIGF1ZGlvIGZvciBhY3RpdmUtc3BlYWtlciBoaWdobGlnaHQuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0TWV0ZXIoY29uc3VtZXIuaWQsIHN0cmVhbSwgdXNlcklkKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcHMuaXNIb3N0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZWRpYVJlY29yZGVyLmFkZFRyYWNrKHVzZXJJZCwgc3RyZWFtLmdldEF1ZGlvVHJhY2tzKClbMF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdW1lci5vbihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAndHJhY2tlbmRlZCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhraW5kICsgXCIgQ09OU1VNRVIgVFJBQ0sgRU5ERUQgRk9SIFwiICsgdXNlcklkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlQ29uc3VtZXIoY29uc3VtZXIuaWQsIGtpbmQsIHVzZXJJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEd1YXJkOiB0aGUgcGFydGljaXBhbnQgbWF5IGhhdmUgbGVmdCwgc28gZmluZCgpIGNhbiBiZSB1bmRlZmluZWQg4oCUXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlYWRpbmcgLnZpZGVvTXV0ZWQvLmF1ZGlvTXV0ZWQgb24gaXQgdGhyZXcuIE5vIHBhcnRpY2lwYW50IOKGkiBubyByZXRyeS5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdHJhY2tFbmRlZFBhcnRpY2lwYW50ID0gcGFydGljaXBhbnRzLmZpbmQoKHApID0+IHAudXNlcklkID09PSB1c2VySWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHJhY2tFbmRlZFBhcnRpY2lwYW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoKGtpbmQgPT09ICd2aWRlbycgJiYgIXRyYWNrRW5kZWRQYXJ0aWNpcGFudC52aWRlb011dGVkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChraW5kID09PSAnYXVkaW8nICYmICF0cmFja0VuZGVkUGFydGljaXBhbnQuYXVkaW9NdXRlZCkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRyeUNvbnN1bWUoa2luZCwgdXNlcklkLCBuZXcgRXJyb3IoJ3RyYWNrZW5kZWQgd2hpbGUgJyArIGtpbmQgKyAnIGlzIE5PVCBtdXRlZCcpLCByZXRyaWVzLCBwcm9kdWNlcklkLCBsb2FkaW5nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN1bWVyLm9uKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0cmFuc3BvcnRjbG9zZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhraW5kICsgXCIgQ09OU1VNRVIgQ0xPU0VEIEZPUiBcIiArIHVzZXJJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUNvbnN1bWVyKGNvbnN1bWVyLmlkLCBraW5kLCB1c2VySWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICByZXRyeUNvbnN1bWUoa2luZCwgdXNlcklkLCBlLCByZXRyaWVzLCBwcm9kdWNlcklkLCBsb2FkaW5nKTtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGdldFBhcnRpY2lwYW50TmFtZSA9ICgpID0+IHtcbiAgICAgICAgbGV0IG5hbWUgPSBwcm9wcy5kYXRhLm5hbWU7XG5cbiAgICAgICAgaWYgKFV0aWxzLmlzTnVsbChwcm9wcy5kYXRhLnVzZXJJZCkpIHtcbiAgICAgICAgICAgIG5hbWUgPSBgJHtuYW1lfSAoR3Vlc3QpYDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuYW1lO1xuICAgIH07XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8PlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgJHsnY29sLSotKiAnICsgKHByb3BzLmlzQ3VycmVudFVzZXIgPyAnbWVldGluZy1wYXJ0aWNpcGFudC1jb250YWluZXItY3VycmVudC11c2VyJyA6ICdtZWV0aW5nLXBhcnRpY2lwYW50LWNvbnRhaW5lcicpfWB9XG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiBwcm9wcy5wYWRkaW5nID8gcHJvcHMucGFkZGluZyA6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IHByb3BzLmhlaWdodCA/IHByb3BzLmhlaWdodCA6ICcxMDAlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogJzEycHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICAgICAgICAgICAgICAgICAgICAgICAgYm94U2l6aW5nOiAnYm9yZGVyLWJveCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IHByb3BzLmlzQ3VycmVudFVzZXIgPyAnIzFmMjkzNycgOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiBwcm9wcy5pc0N1cnJlbnRVc2VyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnMnB4IHNvbGlkICcgKyAoYXBwbGljYXRpb25NYW5hZ2VyLmdldEFwcGxpY2F0aW9uUHJpbWFyeUNvbG9yKCkgfHwgJyMxYTNjNWUnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJzFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMDYpJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFjdGl2ZS1zcGVha2VyIGhpZ2hsaWdodDogYW4gaW5zZXQgcmluZyAodGhlIHRpbGUgY2xpcHNcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG92ZXJmbG93LCBzbyBhbiBvdXRzZXQgc2hhZG93IHdvdWxkIGJlIGN1dCBvZmYpLlxuICAgICAgICAgICAgICAgICAgICAgICAgYm94U2hhZG93OiAoIWF1ZGlvTXV0ZWQgJiYgc291bmRMZXZlbCA+IFNQRUFLSU5HX0xFVkVMKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ2luc2V0IDAgMCAwIDNweCAnICsgKGFwcGxpY2F0aW9uTWFuYWdlci5nZXRBcHBsaWNhdGlvblByaW1hcnlDb2xvcigpIHx8ICcjMjJjNTVlJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICdub25lJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb246ICdib3gtc2hhZG93IDEyMG1zIGVhc2Utb3V0J1xuICAgICAgICAgICAgICAgICAgICB9fT5cbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2aWRlb011dGVkIHx8ICF2aWRlb1JlZi5jdXJyZW50IHx8ICF2aWRlb1JlZi5jdXJyZW50LnNyY09iamVjdCkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9eydjZW50ZXJlZC1mbGV4LWJveCd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAnMTAwJScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbkJvdHRvbTogcHJvcHMuc2l6aW5nID09PSAnc20nID8gJzhweCcgOiAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3Byb3BzLnNpemluZyA9PT0gJ3NtJyA/ICdhdmF0YXItd3JhcHBlci1zbScgOiAnYXZhdGFyLXdyYXBwZXInfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogKHByb3BzLnNpemluZyA9PT0gJ3NtJyA/IDcyIDogMTEyKSArICdweCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAocHJvcHMuc2l6aW5nID09PSAnc20nID8gNzIgOiAxMTIpICsgJ3B4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3hTaGFkb3c6ICFhdWRpb011dGVkICYmIHNvdW5kTGV2ZWwgPiAzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJzAgMCAwICcgKyAoMyArIHNvdW5kTGV2ZWwgLyAxMikgKyAncHggJyArIChhcHBsaWNhdGlvbk1hbmFnZXIuZ2V0QXBwbGljYXRpb25QcmltYXJ5Q29sb3IoKSB8fCAnIzAwNDc2YScpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ25vbmUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb246ICdib3gtc2hhZG93IDkwbXMgbGluZWFyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjM2E0NjU0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogJyNmZmYnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtwcm9wcy5zaXppbmcgPT09ICdtZCcgPyAnYXZhdGFyIGF2YXRhci1tZCcgOiBwcm9wcy5zaXppbmcgPT09ICdzbScgPyAnYXZhdGFyIGF2YXRhci1zbScgOiAnYXZhdGFyJ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiBwcm9wcy5zaXppbmcgPT09ICdzbScgPyAnMjBweCcgOiBudWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfS8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvd25sb2FkVXJsID8gPGRpdiBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAnMTAwJScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZFJlcGVhdDogJ25vLXJlcGVhdCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZFNpemU6ICdjb3ZlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZFBvc2l0aW9uOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6ICc1MCUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3RyYW5zcGFyZW50JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kSW1hZ2U6IGB1cmwoJHtkb3dubG9hZFVybH0pYFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+IDogVXRpbHMuZ2V0SW5pdGlhbHMocHJvcHMuZGF0YS5uYW1lKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2aWRlb1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9e3Byb3BzLmRhdGEudXNlcklkICsgJy12aWRlbyd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD17NjQwfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PXszMjB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvUGxheSByZWY9e3ZpZGVvUmVmfSBtdXRlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogJzEwMCUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdEZpdDogJ2NvdmVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IHByb3BzLmlzQ3VycmVudFVzZXIgPyAnc2NhbGVYKC0xKScgOiAnbm9uZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgekluZGV4OiAnMCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogKHZpZGVvTXV0ZWQgfHwgIXZpZGVvUmVmLmN1cnJlbnQgfHwgIXZpZGVvUmVmLmN1cnJlbnQuc3JjT2JqZWN0KSA/ICdub25lJyA6IG51bGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLypXZSBuZWVkIHRoaXMgZWxlbWVudCB0byBjYXB0dXJlIHJlY29yZGluZyBzb3VuZCovXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzLmlzSG9zdCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXVkaW9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPXtwcm9wcy5kYXRhLnVzZXJJZCArICctYXVkaW8nfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b1BsYXkgcmVmPXthdWRpb1JlZn0gbXV0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogJ25vbmUnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17cHJvcHMuc2l6aW5nID09PSAnc20nID8gJ25hbWUtbGFiZWwtc20nIDogJ25hbWUtbGFiZWwnfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm90dG9tOiAnMCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IHByb3BzLnNpemluZyA9PT0gJ3NtJyA/ICc2cHgnIDogJzhweCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJveFNpemluZzogJ2JvcmRlci1ib3gnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGlnbkl0ZW1zOiAnZmxleC1lbmQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYXA6ICc0cHgnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogJ2lubGluZS1mbGV4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4V2lkdGg6ICc3MCUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogcHJvcHMuc2l6aW5nID09PSAnc20nID8gJzFweCA4cHgnIDogJzJweCAxMHB4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogJzZweCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICdyZ2JhKDAsMCwwLDAuNTUpJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAnI2ZmZicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250U2l6ZTogcHJvcHMuc2l6aW5nID09PSAnc20nID8gJzExcHgnIDogJzEzcHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udFdlaWdodDogNTAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZUhlaWdodDogMS40LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpdGVTcGFjZTogJ25vd3JhcCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdmVyZmxvdzogJ2hpZGRlbicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0T3ZlcmZsb3c6ICdlbGxpcHNpcycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW5MZWZ0OiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luUmlnaHQ6ICdhdXRvJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHshcHJvcHMuaXNDdXJyZW50VXNlciAmJiBnZXRQYXJ0aWNpcGFudE5hbWUoKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtwcm9wcy5pc0N1cnJlbnRVc2VyICYmICdZb3UnfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIXByb3BzLmlzQ3VycmVudFVzZXIgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3ttYXJnaW5MZWZ0OiAnNHB4JywgZGlzcGxheTogJ2ZsZXgnLCBhbGlnbkl0ZW1zOiAnY2VudGVyJywganVzdGlmeUNvbnRlbnQ6ICdmbGV4LWVuZCcsIGdhcDogJzRweCd9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzLmlzSG9zdCAmJiAhYXVkaW9NdXRlZCA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SWNvbkJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eyhlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzLm9uSG9zdEF1ZGlvTXV0ZShwcm9wcy5kYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAnMjRweCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogJzI0cHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogJyNmZmYnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICdyZ2JhKDAsMCwwLDAuNTUpJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAnNnB4J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEljb24gaWQ9eydNSUMnfS8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0ljb25CdXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IGF1ZGlvTXV0ZWQgPyAnaW5saW5lLWZsZXgnIDogJ25vbmUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAnI2ZmZicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAncmdiYSgwLDAsMCwwLjU1KScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAnNnB4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAnMnB4J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEljb24gaWQ9eydNSUNfT0ZGJ30vPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzLmlzSG9zdCAmJiAhdmlkZW9NdXRlZCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SWNvbkJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wcy5vbkhvc3RWaWRlb011dGUocHJvcHMuZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogJzI0cHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogJzI0cHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAnI2ZmZicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAncmdiYSgwLDAsMCwwLjU1KScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAnNnB4J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEljb24gaWQ9eydDQU1FUkEnfS8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvSWNvbkJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wcy5pc0N1cnJlbnRVc2VyICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7ZGlzcGxheTogJ2ZsZXgnLCBhbGlnbkl0ZW1zOiAnY2VudGVyJywganVzdGlmeUNvbnRlbnQ6ICdmbGV4LWVuZCd9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VG9vbHRpcCB0aXRsZT1cIk15IGRldmljZXNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEljb25CdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZUNsaWNrRGV2aWNlc0ljb259XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWNvbnRyb2xzPXtvcGVuTW9yZUFjdGlvbnMgPyAnZGV2aWNlLW1lbnUnIDogdW5kZWZpbmVkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1oYXNwb3B1cD1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1leHBhbmRlZD17b3Blbk1vcmVBY3Rpb25zID8gJ3RydWUnIDogdW5kZWZpbmVkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogJzI0cHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogJzI0cHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAnI2ZmZicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAncmdiYSgwLDAsMCwwLjU1KScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAnNnB4J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEljb24gaWQ9eydTRVRUSU5HUyd9Lz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9JY29uQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvVG9vbHRpcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFwcm9wcy5pc0N1cnJlbnRVc2VyICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT17e21hcmdpbkxlZnQ6ICc0cHgnfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtoYW5kUmFpc2VkICYmIDxQYW5Ub29sIGZvbnRTaXplPXsnc21hbGwnfSBzdHlsZT17e2NvbG9yOiAnI2UyYjAzMCd9fS8+fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wcy5pc0N1cnJlbnRVc2VyICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9eydtZWV0aW5nLWF1ZGlvLWVsLWNvbnRhaW5lcid9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgPE1lbnVcbiAgICAgICAgICAgICAgICBhbmNob3JFbD17YW5jaG9yRWx9XG4gICAgICAgICAgICAgICAgaWQ9XCJkZXZpY2VzLW1lbnVcIlxuICAgICAgICAgICAgICAgIG9wZW49e29wZW5Nb3JlQWN0aW9uc31cbiAgICAgICAgICAgICAgICBvbkNsb3NlPXtoYW5kbGVDbG9zZURldmljZU1lbnV9XG4gICAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlQ2xvc2VEZXZpY2VNZW51fVxuICAgICAgICAgICAgICAgIFBhcGVyUHJvcHM9e3tcbiAgICAgICAgICAgICAgICAgICAgZWxldmF0aW9uOiAwLFxuICAgICAgICAgICAgICAgICAgICBzeDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3c6ICd2aXNpYmxlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcjogJ2Ryb3Atc2hhZG93KDBweCAycHggOHB4IHJnYmEoMCwwLDAsMC4zMikpJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG10OiAxLjUsXG4gICAgICAgICAgICAgICAgICAgICAgICAnJiAuTXVpTGlzdC1yb290Jzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogJzFweCBzb2xpZCAjZTFlMWUxJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6ICc0cHgnXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgJyYgLk11aUF2YXRhci1yb290Jzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAzMixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDMyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1sOiAtMC41LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1yOiAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICcmOmJlZm9yZSc6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50OiAnXCJcIicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogJ2Jsb2NrJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3A6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmlnaHQ6IDE0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAxMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDEwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJnY29sb3I6ICdwcmltYXJ5JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKC01MCUpIHJvdGF0ZSg0NWRlZyknLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpJbmRleDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm1PcmlnaW49e3tcbiAgICAgICAgICAgICAgICAgICAgaG9yaXpvbnRhbDogMjAsXG4gICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsOiAxMzZcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIGFuY2hvck9yaWdpbj17e1xuICAgICAgICAgICAgICAgICAgICBob3Jpem9udGFsOiAncmlnaHQnLFxuICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbDogJ3RvcCdcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgYXVkaW9EZXZpY2VzLm1hcCgoZGV2aWNlLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxNZW51SXRlbSBvbkNsaWNrPXsoKSA9PiBjaGFuZ2VBdWRpb0RldmljZShkZXZpY2UpfSBrZXk9e2luZGV4fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17e2NvbG9yOiBzZWxlY3RlZEF1ZGlvRGV2aWNlICYmIHNlbGVjdGVkQXVkaW9EZXZpY2UuaWQgPT09IGRldmljZS5pZCA/ICcjMTk4NzU0JyA6IG51bGx9fT5cbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICBkZXZpY2UubGFiZWxcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9NZW51SXRlbT47XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9NZW51PlxuICAgICAgICA8Lz5cbiAgICApO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgVkNSb29tUGFydGljaXBhbnQ7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUNBLElBQUFBLE1BQUEsR0FBQUMsdUJBQUEsQ0FBQUMsT0FBQTtBQUNBQSxPQUFBO0FBQ0EsSUFBQUMsTUFBQSxHQUFBQyxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUcsWUFBQSxHQUFBSCxPQUFBO0FBQ0EsSUFBQUksZUFBQSxHQUFBRixzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUssZUFBQSxHQUFBSCxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQU0sZ0JBQUEsR0FBQUosc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFPLE9BQUEsR0FBQUwsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFRLFdBQUEsR0FBQU4sc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFTLEtBQUEsR0FBQVAsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFVLGNBQUEsR0FBQVYsT0FBQTtBQUNBLElBQUFXLFFBQUEsR0FBQVQsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFZLFNBQUEsR0FBQVosT0FBQTtBQUNBLElBQUFhLGNBQUEsR0FBQVgsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFjLE9BQUEsR0FBQVosc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFlLG1CQUFBLEdBQUFiLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBZ0IsZ0JBQUEsR0FBQWhCLE9BQUE7QUFBdUQsU0FBQUUsdUJBQUFlLENBQUEsV0FBQUEsQ0FBQSxJQUFBQSxDQUFBLENBQUFDLFVBQUEsR0FBQUQsQ0FBQSxLQUFBRSxPQUFBLEVBQUFGLENBQUE7QUFBQSxTQUFBbEIsd0JBQUFrQixDQUFBLEVBQUFHLENBQUEsNkJBQUFDLE9BQUEsTUFBQUMsQ0FBQSxPQUFBRCxPQUFBLElBQUFFLENBQUEsT0FBQUYsT0FBQSxZQUFBdEIsdUJBQUEsWUFBQUEsQ0FBQWtCLENBQUEsRUFBQUcsQ0FBQSxTQUFBQSxDQUFBLElBQUFILENBQUEsSUFBQUEsQ0FBQSxDQUFBQyxVQUFBLFNBQUFELENBQUEsTUFBQU8sQ0FBQSxFQUFBQyxDQUFBLEVBQUFDLENBQUEsS0FBQUMsU0FBQSxRQUFBUixPQUFBLEVBQUFGLENBQUEsaUJBQUFBLENBQUEsdUJBQUFBLENBQUEseUJBQUFBLENBQUEsU0FBQVMsQ0FBQSxNQUFBRixDQUFBLEdBQUFKLENBQUEsR0FBQUcsQ0FBQSxHQUFBRCxDQUFBLFFBQUFFLENBQUEsQ0FBQUksR0FBQSxDQUFBWCxDQUFBLFVBQUFPLENBQUEsQ0FBQUssR0FBQSxDQUFBWixDQUFBLEdBQUFPLENBQUEsQ0FBQU0sR0FBQSxDQUFBYixDQUFBLEVBQUFTLENBQUEsZ0JBQUFOLENBQUEsSUFBQUgsQ0FBQSxnQkFBQUcsQ0FBQSxPQUFBVyxjQUFBLENBQUFDLElBQUEsQ0FBQWYsQ0FBQSxFQUFBRyxDQUFBLE9BQUFLLENBQUEsSUFBQUQsQ0FBQSxHQUFBUyxNQUFBLENBQUFDLGNBQUEsS0FBQUQsTUFBQSxDQUFBRSx3QkFBQSxDQUFBbEIsQ0FBQSxFQUFBRyxDQUFBLE9BQUFLLENBQUEsQ0FBQUksR0FBQSxJQUFBSixDQUFBLENBQUFLLEdBQUEsSUFBQU4sQ0FBQSxDQUFBRSxDQUFBLEVBQUFOLENBQUEsRUFBQUssQ0FBQSxJQUFBQyxDQUFBLENBQUFOLENBQUEsSUFBQUgsQ0FBQSxDQUFBRyxDQUFBLFdBQUFNLENBQUEsS0FBQVQsQ0FBQSxFQUFBRyxDQUFBO0FBakJ2RDs7QUFtQkEsTUFBTWdCLGNBQWMsR0FBRyxDQUFDO0FBRWpCLE1BQU1DLG1CQUFtQixHQUFBQyxPQUFBLENBQUFELG1CQUFBLEdBQUc7RUFDL0JFLHVCQUF1QixFQUFFO0FBQzdCLENBQUM7QUFFTSxNQUFNQyxpQkFBaUIsR0FBQUYsT0FBQSxDQUFBRSxpQkFBQSxHQUFHO0VBQzdCQyxLQUFLLEVBQUUsS0FBSztFQUNaQyxLQUFLLEVBQUU7SUFDSEMsS0FBSyxFQUFFO01BQ0hDLEdBQUcsRUFBRSxHQUFHO01BQ1JDLEtBQUssRUFBRTtJQUNYLENBQUM7SUFDREMsTUFBTSxFQUFFO01BQ0pGLEdBQUcsRUFBRSxHQUFHO01BQ1JDLEtBQUssRUFBRTtJQUNYO0VBQ0o7QUFDSixDQUFDO0FBRU0sTUFBTUUsZUFBZSxHQUFBVCxPQUFBLENBQUFTLGVBQUEsR0FBRyxDQUMzQjtFQUNJQyxHQUFHLEVBQUUsSUFBSTtFQUNUQyxVQUFVLEVBQUUsS0FBSztFQUNqQjtFQUNBQyxlQUFlLEVBQUU7QUFDckIsQ0FBQyxFQUNEO0VBQ0lGLEdBQUcsRUFBRSxJQUFJO0VBQ1RDLFVBQVUsRUFBRSxNQUFNO0VBQ2xCQyxlQUFlLEVBQUU7QUFDckIsQ0FBQyxFQUNEO0VBQ0lGLEdBQUcsRUFBRSxJQUFJO0VBQ1RDLFVBQVUsRUFBRSxNQUFNO0VBQ2xCQyxlQUFlLEVBQUU7QUFDckIsQ0FBQyxDQUNKO0FBRUQsTUFBTUMsUUFBUSxHQUFHQyxNQUFNLENBQUNELFFBQVEsQ0FBQ0UsUUFBUSxHQUFHLElBQUksR0FBR0QsTUFBTSxDQUFDRCxRQUFRLENBQUNHLFFBQVE7QUFDM0UsTUFBTUMsaUJBQWlCLEdBQUlDLEtBQUssSUFBSztFQUNqQyxNQUFNLENBQUNDLFVBQVUsRUFBRUMsYUFBYSxDQUFDLEdBQUdDLGNBQUssQ0FBQ0MsUUFBUSxDQUFDLEtBQUssQ0FBQztFQUN6RCxNQUFNLENBQUNDLFVBQVUsRUFBRUMsYUFBYSxDQUFDLEdBQUdILGNBQUssQ0FBQ0MsUUFBUSxDQUFDSixLQUFLLENBQUNLLFVBQVUsQ0FBQztFQUNwRSxNQUFNLENBQUNFLFVBQVUsRUFBRUMsYUFBYSxDQUFDLEdBQUdMLGNBQUssQ0FBQ0MsUUFBUSxDQUFDSixLQUFLLENBQUNPLFVBQVUsQ0FBQztFQUNwRSxNQUFNLENBQUNFLGlCQUFpQixFQUFFQyxvQkFBb0IsQ0FBQyxHQUFHUCxjQUFLLENBQUNDLFFBQVEsQ0FBQ0osS0FBSyxDQUFDUyxpQkFBaUIsQ0FBQztFQUN6RixNQUFNLENBQUNFLGNBQWMsRUFBRUMsaUJBQWlCLENBQUMsR0FBR1QsY0FBSyxDQUFDQyxRQUFRLENBQUMsS0FBSyxDQUFDO0VBQ2pFLE1BQU0sQ0FBQ1MsU0FBUyxDQUFDLEdBQUdWLGNBQUssQ0FBQ0MsUUFBUSxDQUFDLElBQUlVLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDN0MsTUFBTSxDQUFDQyxpQ0FBaUMsQ0FBQyxHQUFHWixjQUFLLENBQUNDLFFBQVEsQ0FBQyxFQUFFLENBQUM7RUFDOUQsTUFBTSxDQUFDWSxZQUFZLEVBQUVDLGVBQWUsQ0FBQyxHQUFHZCxjQUFLLENBQUNDLFFBQVEsQ0FBQyxFQUFFLENBQUM7RUFDMUQsTUFBTSxDQUFDYyxtQkFBbUIsRUFBRUMsc0JBQXNCLENBQUMsR0FBR2hCLGNBQUssQ0FBQ0MsUUFBUSxDQUFDLElBQUksQ0FBQztFQUMxRSxNQUFNLENBQUNnQixTQUFTLENBQUMsR0FBR2pCLGNBQUssQ0FBQ0MsUUFBUSxDQUFDLElBQUlVLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDN0MsTUFBTSxDQUFDTyxVQUFVLEVBQUVDLGFBQWEsQ0FBQyxHQUFHbkIsY0FBSyxDQUFDQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0VBQ3JELE1BQU0sQ0FBQ21CLFlBQVksQ0FBQyxHQUFHLElBQUFuQixlQUFRLEVBQUMsQ0FBQyxDQUFDLENBQUM7RUFDbkMsTUFBTW9CLFFBQVEsR0FBRyxJQUFBQyxhQUFNLEVBQUMsQ0FBQztFQUN6QixNQUFNQyxXQUFXLEdBQUcsSUFBQUQsYUFBTSxFQUFDLENBQUM7RUFDNUIsTUFBTUUsUUFBUSxHQUFHLElBQUFGLGFBQU0sRUFBQyxDQUFDO0VBQ3pCLE1BQU1HLE1BQU0sR0FBRyxJQUFBSCxhQUFNLEVBQUMsSUFBSUksZUFBTSxDQUFDLENBQUMsQ0FBQztFQUNuQyxNQUFNQyxpQkFBaUIsR0FBRyxJQUFBTCxhQUFNLEVBQUMsQ0FBQyxDQUFDO0VBQ25DO0VBQ0E7RUFDQTtFQUNBLE1BQU1NLE1BQU0sR0FBRyxJQUFBTixhQUFNLEVBQUMsSUFBSVgsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUNoQztFQUNBO0VBQ0EsTUFBTWtCLFlBQVksR0FBRyxJQUFBUCxhQUFNLEVBQUMsS0FBSyxDQUFDO0VBQ2xDLE1BQU1RLFNBQVMsR0FBRyxJQUFJO0VBQ3RCLE1BQU07SUFDRkMsTUFBTTtJQUNOQztFQUNKLENBQUMsR0FBR25DLEtBQUs7RUFDVCxNQUFNO0lBQUNvQztFQUEwQixDQUFDLEdBQUdwQyxLQUFLO0VBQzFDLE1BQU0sQ0FBQ3FDLFFBQVEsRUFBRUMsV0FBVyxDQUFDLEdBQUcsSUFBQWxDLGVBQVEsRUFBQyxJQUFJLENBQUM7RUFDOUMsTUFBTW1DLGVBQWUsR0FBR0MsT0FBTyxDQUFDSCxRQUFRLENBQUM7RUFFekMsTUFBTSxDQUFDSSxXQUFXLEVBQUVDLGNBQWMsQ0FBQyxHQUFHLElBQUF0QyxlQUFRLEVBQUMsSUFBSSxDQUFDO0VBRXBELE1BQU11QyxPQUFPLEdBQUdBLENBQUEsS0FBTTtJQUNsQixPQUFPO01BQ0gsSUFBSUMsRUFBRUEsQ0FBQSxFQUFHO1FBQ0wsT0FBTyxzQkFBc0IsR0FBRzVDLEtBQUssQ0FBQzZDLElBQUksQ0FBQ0MsTUFBTTtNQUNyRCxDQUFDO01BQ0RDLEVBQUUsRUFBRUEsQ0FBQ0MsU0FBUyxFQUFFQyxFQUFFLEtBQUs7UUFDbkIsUUFBUUQsU0FBUztVQUNiLEtBQUtFLHdCQUFXLENBQUNDLDZCQUE2QjtZQUMxQ0Msa0JBQWtCLENBQUNILEVBQUUsQ0FBQ0ksT0FBTyxHQUFHSixFQUFFLENBQUNJLE9BQU8sR0FBR0osRUFBRSxDQUFDO1lBQ2hEO1VBQ0osS0FBS0Msd0JBQVcsQ0FBQ0ksVUFBVTtZQUN2QkMsV0FBVyxDQUFDTixFQUFFLENBQUNJLE9BQU8sQ0FBQztZQUN2QjtVQUNKLEtBQUtILHdCQUFXLENBQUNNLFVBQVU7WUFDdkJDLFdBQVcsQ0FBQ1IsRUFBRSxDQUFDSSxPQUFPLENBQUM7WUFDdkI7VUFDSixLQUFLSCx3QkFBVyxDQUFDUSxhQUFhO1lBQzFCQyxjQUFjLENBQUNWLEVBQUUsQ0FBQ0ksT0FBTyxDQUFDO1lBQzFCO1VBQ0osS0FBS0gsd0JBQVcsQ0FBQ1UsZUFBZTtZQUM1QixJQUFJeEMsU0FBUyxDQUFDaEQsR0FBRyxDQUFDNkUsRUFBRSxDQUFDSSxPQUFPLENBQUNRLFVBQVUsQ0FBQyxFQUFFO2NBQ3RDQyxjQUFjLENBQUNiLEVBQUUsQ0FBQ0ksT0FBTyxDQUFDUSxVQUFVLEVBQUVaLEVBQUUsQ0FBQ0ksT0FBTyxDQUFDVSxJQUFJLENBQUM7WUFDMUQ7WUFDQTtVQUNKLEtBQUtiLHdCQUFXLENBQUNjLFdBQVc7WUFDeEIsSUFBSWYsRUFBRSxDQUFDSSxPQUFPLElBQUlKLEVBQUUsQ0FBQ0ksT0FBTyxDQUFDUCxNQUFNLEtBQUs5QyxLQUFLLENBQUM2QyxJQUFJLENBQUNDLE1BQU0sRUFBRTtjQUN2RHhCLGFBQWEsQ0FBQzJCLEVBQUUsQ0FBQ0ksT0FBTyxDQUFDWSxLQUFLLENBQUM7WUFDbkM7WUFDQTtRQUNSO01BQ0o7SUFDSixDQUFDO0VBQ0wsQ0FBQztFQUVELE1BQU1DLHNCQUFzQixHQUFJQyxLQUFLLElBQUs7SUFDdEM3QixXQUFXLENBQUM2QixLQUFLLENBQUNDLGFBQWEsQ0FBQztFQUNwQyxDQUFDO0VBRUQsTUFBTUMsaUJBQWlCLEdBQUluQyxNQUFNLElBQUs7SUFDbENmLHNCQUFzQixDQUFDZSxNQUFNLENBQUM7RUFDbEMsQ0FBQztFQUVELE1BQU1xQixXQUFXLEdBQUlGLE9BQU8sSUFBSztJQUM3QixJQUFJQSxPQUFPLElBQUlBLE9BQU8sQ0FBQ1AsTUFBTSxLQUFLOUMsS0FBSyxDQUFDNkMsSUFBSSxDQUFDQyxNQUFNLEVBQUU7TUFDakQ1QyxhQUFhLENBQUMsSUFBSSxDQUFDO01BQ25CRixLQUFLLENBQUM2QyxJQUFJLENBQUM1QyxVQUFVLEdBQUcsSUFBSTtJQUNoQztFQUNKLENBQUM7RUFFRCxNQUFNd0QsV0FBVyxHQUFJSixPQUFPLElBQUs7SUFDN0IsSUFBSUEsT0FBTyxJQUFJQSxPQUFPLENBQUNQLE1BQU0sS0FBSzlDLEtBQUssQ0FBQzZDLElBQUksQ0FBQ0MsTUFBTSxFQUFFO01BQ2pENUMsYUFBYSxDQUFDLEtBQUssQ0FBQztNQUNwQkYsS0FBSyxDQUFDNkMsSUFBSSxDQUFDNUMsVUFBVSxHQUFHLEtBQUs7SUFDakM7RUFDSixDQUFDO0VBRUQsSUFBQXFFLGdCQUFTLEVBQUMsTUFBTTtJQUNaL0MsWUFBWSxDQUFDZ0QsR0FBRyxHQUFHNUIsT0FBTyxDQUFDLENBQUM7RUFDaEMsQ0FBQyxDQUFDO0VBRUYsSUFBQTJCLGdCQUFTLEVBQUMsTUFBTTtJQUNaLElBQUk5QyxRQUFRLENBQUNnRCxPQUFPLElBQUk5QyxXQUFXLENBQUM4QyxPQUFPLEVBQUU7TUFDekNoRCxRQUFRLENBQUNnRCxPQUFPLENBQUNDLFNBQVMsR0FBRy9DLFdBQVcsQ0FBQzhDLE9BQU87SUFDcEQ7RUFDSixDQUFDLEVBQUUsQ0FBQ2hELFFBQVEsQ0FBQ2dELE9BQU8sQ0FBQyxDQUFDO0VBRXRCLElBQUFGLGdCQUFTLEVBQUMsTUFBTTtJQUNaLElBQUl0RSxLQUFLLENBQUMwRSxZQUFZLElBQUksQ0FBQzFFLEtBQUssQ0FBQzJFLE1BQU0sRUFBRTtNQUNyQyxJQUFJdEQsVUFBVSxHQUFHLENBQUMsRUFBRTtRQUNoQlMsaUJBQWlCLENBQUMwQyxPQUFPLEdBQUcsRUFBRTtNQUNsQyxDQUFDLE1BQU0sSUFBSTFDLGlCQUFpQixDQUFDMEMsT0FBTyxHQUFHLENBQUMsRUFBRTtRQUN0QzFDLGlCQUFpQixDQUFDMEMsT0FBTyxFQUFFO01BQy9CO01BRUF4RSxLQUFLLENBQUMwRSxZQUFZLENBQUMxRSxLQUFLLENBQUM2QyxJQUFJLENBQUNDLE1BQU0sRUFBRWhCLGlCQUFpQixDQUFDMEMsT0FBTyxLQUFLLENBQUMsSUFBSWpFLFVBQVUsQ0FBQztJQUN4RjtFQUNKLENBQUMsRUFBRSxDQUFDYyxVQUFVLENBQUMsQ0FBQztFQUVoQixJQUFBaUQsZ0JBQVMsRUFBQyxNQUFNO0lBQ1osSUFBSS9ELFVBQVUsRUFBRTtNQUNaZSxhQUFhLENBQUMsQ0FBQyxDQUFDO01BQ2hCLElBQUl0QixLQUFLLENBQUMwRSxZQUFZLElBQUksQ0FBQzFFLEtBQUssQ0FBQzJFLE1BQU0sRUFBRTtRQUNyQzNFLEtBQUssQ0FBQzBFLFlBQVksQ0FBQzFFLEtBQUssQ0FBQzZDLElBQUksQ0FBQ0MsTUFBTSxFQUFFLElBQUksQ0FBQztNQUMvQztJQUNKO0VBQ0osQ0FBQyxFQUFFLENBQUN2QyxVQUFVLENBQUMsQ0FBQztFQUVoQixNQUFNcUUscUJBQXFCLEdBQUdBLENBQUEsS0FBTTtJQUNoQ3RDLFdBQVcsQ0FBQyxJQUFJLENBQUM7RUFDckIsQ0FBQztFQUVELE1BQU1jLGtCQUFrQixHQUFJQyxPQUFPLElBQUs7SUFDcEMsSUFBSXJELEtBQUssQ0FBQzZDLElBQUksQ0FBQ0MsTUFBTSxLQUFLTyxPQUFPLENBQUNQLE1BQU0sRUFBRTtNQUN0QyxJQUFJOUMsS0FBSyxDQUFDNkUsYUFBYSxFQUFFO1FBQ3JCLElBQUl4QixPQUFPLENBQUM5QyxVQUFVLEVBQUU7VUFDcEJ1RSxhQUFhLENBQUMsT0FBTyxDQUFDO1FBQzFCLENBQUMsTUFBTTtVQUNILElBQUk1QyxNQUFNLEVBQUU7WUFDUjZDLE9BQU8sQ0FBQyxPQUFPLENBQUM7VUFDcEI7UUFDSjtRQUVBLElBQUkxQixPQUFPLENBQUNoRCxVQUFVLEVBQUU7VUFDcEJ5RSxhQUFhLENBQUMsT0FBTyxDQUFDO1FBQzFCLENBQUMsTUFBTTtVQUNILElBQUk1QyxNQUFNLEVBQUU7WUFDUjZDLE9BQU8sQ0FBQyxPQUFPLENBQUM7VUFDcEI7UUFDSjtNQUNKO01BRUF2RSxhQUFhLENBQUM2QyxPQUFPLENBQUM5QyxVQUFVLENBQUM7TUFDakNELGFBQWEsQ0FBQytDLE9BQU8sQ0FBQ2hELFVBQVUsQ0FBQztJQUVyQyxDQUFDLE1BQU0sSUFBSUwsS0FBSyxDQUFDNkUsYUFBYSxFQUFFLENBRWhDO0VBQ0osQ0FBQztFQUVELElBQUFQLGdCQUFTLEVBQUMsTUFBTTtJQUNaLElBQUl0RSxLQUFLLENBQUM2QyxJQUFJLElBQUksQ0FBQ21DLGNBQUssQ0FBQ0MsTUFBTSxDQUFDakYsS0FBSyxDQUFDNkMsSUFBSSxDQUFDcUMsUUFBUSxDQUFDLElBQzdDbEYsS0FBSyxDQUFDNkMsSUFBSSxDQUFDcUMsUUFBUSxLQUFLLFdBQVcsSUFBSWxGLEtBQUssQ0FBQzZDLElBQUksQ0FBQ3FDLFFBQVEsS0FBSyxNQUFNLEVBQUU7TUFDMUV4QyxjQUFjLENBQUMvQyxRQUFRLEdBQUd3RiwyQkFBa0IsQ0FBQ0MsY0FBYyxDQUFDLENBQUMsR0FBRyxnQ0FBZ0MsR0FBR3BGLEtBQUssQ0FBQzZDLElBQUksQ0FBQ3FDLFFBQVEsR0FDbEgsZ0JBQWdCLEdBQUdHLGNBQWMsQ0FBQ0MsT0FBTyxDQUFDLGFBQWEsQ0FBQyxHQUFHLFdBQVcsR0FBR0QsY0FBYyxDQUFDQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDbkg7RUFDSixDQUFDLEVBQUUsQ0FBQ3RGLEtBQUssQ0FBQzZDLElBQUksQ0FBQyxDQUFDO0VBRWhCLElBQUF5QixnQkFBUyxFQUFDLE1BQU07SUFDWjlELGFBQWEsQ0FBQ1IsS0FBSyxDQUFDTyxVQUFVLENBQUM7RUFDbkMsQ0FBQyxFQUFFLENBQUNQLEtBQUssQ0FBQ08sVUFBVSxDQUFDLENBQUM7RUFFdEIsSUFBQStELGdCQUFTLEVBQUMsTUFBTTtJQUNaaEUsYUFBYSxDQUFDTixLQUFLLENBQUNLLFVBQVUsQ0FBQztFQUNuQyxDQUFDLEVBQUUsQ0FBQ0wsS0FBSyxDQUFDSyxVQUFVLENBQUMsQ0FBQztFQUV0QixJQUFBaUUsZ0JBQVMsRUFBQyxNQUFNO0lBQ1osSUFBSTdELGlCQUFpQixFQUFFO01BQ25CO01BQ0E7TUFDQTtNQUNBO01BQ0FxRSxhQUFhLENBQUMsT0FBTyxDQUFDO01BQ3RCQSxhQUFhLENBQUMsT0FBTyxDQUFDO01BRXRCLElBQUksQ0FBQzlFLEtBQUssQ0FBQ0ssVUFBVSxFQUFFO1FBQ25CMEUsT0FBTyxDQUFDLE9BQU8sQ0FBQztNQUNwQjtNQUNBLElBQUksQ0FBQy9FLEtBQUssQ0FBQ08sVUFBVSxFQUFFO1FBQ25Cd0UsT0FBTyxDQUFDLE9BQU8sQ0FBQztNQUNwQjtJQUNKO0VBQ0osQ0FBQyxFQUFFLENBQUN0RSxpQkFBaUIsQ0FBQyxDQUFDO0VBRXZCLElBQUE2RCxnQkFBUyxFQUFDLE1BQU07SUFDWjVELG9CQUFvQixDQUFDVixLQUFLLENBQUNTLGlCQUFpQixDQUFDO0VBQ2pELENBQUMsRUFBRSxDQUFDVCxLQUFLLENBQUNTLGlCQUFpQixDQUFDLENBQUM7RUFFN0IsSUFBQTZELGdCQUFTLEVBQUMsTUFBTTtJQUNaLElBQUl0RSxLQUFLLENBQUM2RSxhQUFhLEVBQUU7TUFDckI3RSxLQUFLLENBQUN1RixtQkFBbUIsQ0FBQ3JFLG1CQUFtQixDQUFDO01BQzlDNEQsYUFBYSxDQUFDLE9BQU8sRUFBRSxNQUFNO1FBQ3pCLElBQUk1RCxtQkFBbUIsRUFBRTtVQUNyQixJQUFJLENBQUNULGlCQUFpQixFQUFFO1lBQ3BCK0UsdUJBQXVCLENBQUMsQ0FBQztVQUM3QixDQUFDLE1BQU0sSUFBSSxDQUFDakYsVUFBVSxFQUFFO1lBQ3BCd0UsT0FBTyxDQUFDLE9BQU8sQ0FBQztVQUNwQjtRQUNKO01BQ0osQ0FBQyxDQUFDO0lBQ047RUFDSixDQUFDLEVBQUUsQ0FBQzdELG1CQUFtQixDQUFDLENBQUM7RUFFekIsSUFBQW9ELGdCQUFTLEVBQUMsTUFBTTtJQUNaO0lBQ0E7SUFDQTtJQUNBO0lBQ0EsSUFBSXBDLE1BQU0sRUFBRTtNQUNSdUQsT0FBTyxDQUFDQyxHQUFHLENBQUMsZ0NBQWdDLEVBQUUxRixLQUFLLENBQUM2QyxJQUFJLENBQUNoQyxTQUFTLENBQUM7TUFDbkUsSUFBSWIsS0FBSyxDQUFDNkMsSUFBSSxDQUFDaEMsU0FBUyxFQUFFO1FBQ3RCOEMsY0FBYyxDQUFDM0QsS0FBSyxDQUFDNkMsSUFBSSxDQUFDaEMsU0FBUyxFQUFFLElBQUksQ0FBQztNQUM5QztNQUVBOEMsY0FBYyxDQUFDNUMsaUNBQWlDLEVBQUUsSUFBSSxDQUFDO01BQ3ZEQSxpQ0FBaUMsQ0FBQzRFLE1BQU0sQ0FBQyxDQUFDLEVBQUU1RSxpQ0FBaUMsQ0FBQzZFLE1BQU0sQ0FBQztJQUN6RjtFQUNKLENBQUMsRUFBRSxDQUFDMUQsTUFBTSxDQUFDLENBQUM7RUFFWixNQUFNc0QsdUJBQXVCLEdBQUcsTUFBQUEsQ0FBQSxLQUFZO0lBQ3hDOUUsb0JBQW9CLENBQUMsTUFBTW1GLHdCQUFlLENBQUNDLHFCQUFxQixDQUFDOUYsS0FBSyxDQUFDa0MsTUFBTSxFQUFFbEMsS0FBSyxDQUFDK0YsU0FBUyxFQUMxRlosMkJBQWtCLENBQUNhLGNBQWMsQ0FBQyxDQUFDLENBQUNDLFFBQVEsQ0FBQyxDQUFDO0VBQ3RELENBQUM7RUFFRCxNQUFNQyxvQkFBb0IsR0FBSUMsT0FBTyxJQUFLO0lBQ3RDLElBQUlDLGVBQWUsR0FBRyxFQUFFO0lBQ3hCRCxPQUFPLENBQUNFLE9BQU8sQ0FBRW5FLE1BQU0sSUFBSztNQUN4QixJQUFJLFlBQVksS0FBS0EsTUFBTSxDQUFDNkIsSUFBSSxFQUFFO1FBQzlCcUMsZUFBZSxDQUFDRSxJQUFJLENBQUM7VUFDakIxRCxFQUFFLEVBQUVWLE1BQU0sQ0FBQ3FFLFFBQVE7VUFDbkJDLEtBQUssRUFBRXRFLE1BQU0sQ0FBQ3NFO1FBQ2xCLENBQUMsQ0FBQztNQUNOO0lBQ0osQ0FBQyxDQUFDO0lBRUZ2RixlQUFlLENBQUNtRixlQUFlLENBQUM7SUFFaEMsSUFBSUEsZUFBZSxDQUFDUixNQUFNLEdBQUcsQ0FBQyxFQUFFO01BQzVCekUsc0JBQXNCLENBQUNpRixlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUMsQ0FBQyxNQUFNO01BQ0hqRixzQkFBc0IsQ0FBQyxJQUFJLENBQUM7SUFDaEM7RUFDSixDQUFDO0VBRUQsSUFBQW1ELGdCQUFTLEVBQUMsTUFBTTtJQUNabUMsdUJBQWMsQ0FBQ0MsbUJBQW1CLENBQUNuRixZQUFZLENBQUM7SUFDaERrRix1QkFBYyxDQUFDRSxnQkFBZ0IsQ0FBQ3BGLFlBQVksRUFBRTJCLHdCQUFXLENBQUNDLDZCQUE2QixFQUNuRkQsd0JBQVcsQ0FBQ0ksVUFBVSxFQUFFSix3QkFBVyxDQUFDTSxVQUFVLEVBQUVOLHdCQUFXLENBQUNRLGFBQWEsRUFBRVIsd0JBQVcsQ0FBQ1UsZUFBZSxFQUN0R1Ysd0JBQVcsQ0FBQ2MsV0FBVyxDQUFDO0lBRTVCLElBQUloRSxLQUFLLENBQUM2RSxhQUFhLEVBQUU7TUFDckIrQixTQUFTLENBQUNDLFlBQVksQ0FBQ0MsY0FBYyxHQUFHLE1BQU07UUFDMUNGLFNBQVMsQ0FBQ0MsWUFBWSxDQUFDRSxnQkFBZ0IsQ0FBQyxDQUFDLENBQ3BDQyxJQUFJLENBQUViLE9BQU8sSUFBSztVQUNYRCxvQkFBb0IsQ0FBQ0MsT0FBTyxDQUFDO1FBQ2pDLENBQ0osQ0FBQztNQUNULENBQUM7TUFFRFMsU0FBUyxDQUFDQyxZQUFZLENBQUNFLGdCQUFnQixDQUFDLENBQUMsQ0FDcENDLElBQUksQ0FBRWIsT0FBTyxJQUFLO1FBQ1hELG9CQUFvQixDQUFDQyxPQUFPLENBQUM7TUFDakMsQ0FDSixDQUFDO0lBQ1Q7SUFFQSxJQUFJbkcsS0FBSyxDQUFDNkUsYUFBYSxFQUFFO01BQ3JCb0Msc0JBQXNCLENBQUMsQ0FBQztJQUM1QjtJQUVBLE9BQU8sTUFBTTtNQUNUeEIsT0FBTyxDQUFDQyxHQUFHLENBQUMsMEVBQTBFLEdBQUcxRixLQUFLLENBQUM2QyxJQUFJLENBQUNDLE1BQU0sQ0FBQztNQUMzR2QsWUFBWSxDQUFDd0MsT0FBTyxHQUFHLElBQUk7TUFFM0IsSUFBSXhFLEtBQUssQ0FBQzZFLGFBQWEsRUFBRTtRQUNyQjtRQUNBO1FBQ0ErQixTQUFTLENBQUNDLFlBQVksQ0FBQ0MsY0FBYyxHQUFHLElBQUk7UUFDNUNoQyxhQUFhLENBQUMsT0FBTyxDQUFDO1FBQ3RCQSxhQUFhLENBQUMsT0FBTyxDQUFDO01BQzFCO01BRUEsS0FBSyxJQUFJLENBQUNvQyxHQUFHLEVBQUVDLEtBQUssQ0FBQyxJQUFJL0YsU0FBUyxFQUFFO1FBQ2hDMEMsY0FBYyxDQUFDb0QsR0FBRyxFQUFFLE9BQU8sQ0FBQztNQUNoQzs7TUFFQTtNQUNBbkYsTUFBTSxDQUFDeUMsT0FBTyxDQUFDNkIsT0FBTyxDQUFFZSxJQUFJLElBQUtBLElBQUksQ0FBQyxDQUFDLENBQUM7TUFDeENyRixNQUFNLENBQUN5QyxPQUFPLENBQUM2QyxLQUFLLENBQUMsQ0FBQztNQUV0QlosdUJBQWMsQ0FBQ0MsbUJBQW1CLENBQUNuRixZQUFZLENBQUM7SUFDcEQsQ0FBQztFQUNMLENBQUMsRUFBRSxFQUFFLENBQUM7O0VBRU47RUFDQTtFQUNBLE1BQU0rRixVQUFVLEdBQUdBLENBQUNKLEdBQUcsRUFBRUssTUFBTSxFQUFFekUsTUFBTSxLQUFLO0lBQ3hDMEUsU0FBUyxDQUFDTixHQUFHLENBQUM7SUFDZCxNQUFNRSxJQUFJLEdBQUcsSUFBQUsscUNBQW9CLEVBQUNGLE1BQU0sRUFBR3RELEtBQUssSUFBSztNQUNqRHdDLHVCQUFjLENBQUNpQixTQUFTLENBQUN4RSx3QkFBVyxDQUFDYyxXQUFXLEVBQUU7UUFBQ1gsT0FBTyxFQUFFO1VBQUNQLE1BQU07VUFBRW1CO1FBQUs7TUFBQyxDQUFDLENBQUM7SUFDakYsQ0FBQyxDQUFDO0lBQ0ZsQyxNQUFNLENBQUN5QyxPQUFPLENBQUNsRyxHQUFHLENBQUM0SSxHQUFHLEVBQUVFLElBQUksQ0FBQztFQUNqQyxDQUFDO0VBRUQsTUFBTUksU0FBUyxHQUFJTixHQUFHLElBQUs7SUFDdkIsTUFBTUUsSUFBSSxHQUFHckYsTUFBTSxDQUFDeUMsT0FBTyxDQUFDbkcsR0FBRyxDQUFDNkksR0FBRyxDQUFDO0lBQ3BDLElBQUlFLElBQUksRUFBRTtNQUNOQSxJQUFJLENBQUMsQ0FBQztNQUNOckYsTUFBTSxDQUFDeUMsT0FBTyxDQUFDbUQsTUFBTSxDQUFDVCxHQUFHLENBQUM7SUFDOUI7RUFDSixDQUFDO0VBRUQsTUFBTW5DLE9BQU8sR0FBRyxNQUFPNkMsSUFBSSxJQUFLO0lBQzVCLElBQUksQ0FBQzFGLE1BQU0sRUFBRTtNQUNUdUQsT0FBTyxDQUFDb0MsS0FBSyxDQUFDLHFCQUFxQixDQUFDO01BQ3BDO0lBQ0o7SUFFQSxJQUFJLENBQUMzRixNQUFNLENBQUM0RixVQUFVLENBQUMsT0FBTyxDQUFDLElBQUlGLElBQUksS0FBSyxPQUFPLEVBQUU7TUFDakRuQyxPQUFPLENBQUNvQyxLQUFLLENBQUMsc0JBQXNCLENBQUM7TUFDckM7SUFDSjtJQUVBLElBQUksQ0FBQzNHLG1CQUFtQixJQUFJMEcsSUFBSSxLQUFLLE9BQU8sRUFBRTtNQUMxQ25DLE9BQU8sQ0FBQ29DLEtBQUssQ0FBQywwQkFBMEIsQ0FBQztNQUN6QztJQUNKO0lBRUEsSUFBSWhILFNBQVMsQ0FBQ3pDLEdBQUcsQ0FBQ3dKLElBQUksQ0FBQyxFQUFFO01BQ3JCbkMsT0FBTyxDQUFDQyxHQUFHLENBQUMsd0NBQXdDLEdBQUdrQyxJQUFJLENBQUM7TUFDNUQ7SUFDSjtJQUVBLElBQUlHLGdCQUFnQjtJQUNwQixRQUFRSCxJQUFJO01BQ1IsS0FBSyxPQUFPO1FBQ1JHLGdCQUFnQixHQUFHO1VBQ2Z4QixRQUFRLEVBQUVyRixtQkFBbUIsQ0FBQzBCLEVBQUU7VUFDaEMzRCxLQUFLLEVBQUUsSUFBSTtVQUNYQyxLQUFLLEVBQUU7UUFDWCxDQUFDO1FBRUQ7TUFDSixLQUFLLE9BQU87UUFDUjZJLGdCQUFnQixHQUFHL0ksaUJBQWlCO1FBQ3BDO01BQ0o7UUFDSTtJQUNSO0lBRUEsSUFBSXVJLE1BQU0sR0FBRyxNQUFNWCxTQUFTLENBQUNDLFlBQVksQ0FBQ21CLFlBQVksQ0FBQ0QsZ0JBQWdCLENBQUM7SUFDeEUsTUFBTUUsS0FBSyxHQUFHTCxJQUFJLEtBQUssT0FBTyxHQUFHTCxNQUFNLENBQUNXLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdYLE1BQU0sQ0FBQ1ksY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDeEYsTUFBTUMsTUFBTSxHQUFHO01BQ1hIO0lBQ0osQ0FBQztJQUVEdEcsUUFBUSxDQUFDNkMsT0FBTyxHQUFHK0MsTUFBTTtJQUN6QixJQUFJSyxJQUFJLEtBQUssT0FBTyxFQUFFO01BQ2xCO01BQ0FOLFVBQVUsQ0FBQyxZQUFZLEVBQUVDLE1BQU0sRUFBRXZILEtBQUssQ0FBQzZDLElBQUksQ0FBQ0MsTUFBTSxDQUFDO0lBQ3ZEO0lBQ0EsSUFBSTlDLEtBQUssQ0FBQ3FJLE1BQU0sSUFBSVQsSUFBSSxLQUFLLE9BQU8sRUFBRTtNQUNsQ1UsdUJBQWEsQ0FBQ0MsUUFBUSxDQUFDdkksS0FBSyxDQUFDNkMsSUFBSSxDQUFDQyxNQUFNLEVBQUVtRixLQUFLLENBQUM7TUFDaERyRyxNQUFNLENBQUM0QyxPQUFPLENBQUNnRSxhQUFhLENBQUNQLEtBQUssQ0FBQztJQUN2QztJQUVBLElBQUlMLElBQUksS0FBSyxPQUFPLEVBQUU7TUFDbEJRLE1BQU0sQ0FBQ0ssU0FBUyxHQUFHbEosZUFBZTtNQUNsQzZJLE1BQU0sQ0FBQ00sWUFBWSxHQUFHN0osbUJBQW1CO01BQ3pDK0MsTUFBTSxDQUFDNEMsT0FBTyxDQUFDbUUsYUFBYSxDQUFDVixLQUFLLENBQUM7SUFDdkM7SUFFQSxJQUFJVyxRQUFRO0lBQ1osSUFBSTtNQUNBQSxRQUFRLEdBQUcsTUFBTW5JLGlCQUFpQixDQUFDc0UsT0FBTyxDQUFDcUQsTUFBTSxDQUFDO0lBQ3RELENBQUMsQ0FBQyxPQUFPM0ssQ0FBQyxFQUFFO01BQ1JnSSxPQUFPLENBQUNDLEdBQUcsQ0FBQ2pJLENBQUMsQ0FBQztJQUNsQjtJQUVBLElBQUltTCxRQUFRLEVBQUU7TUFDVm5JLGlCQUFpQixDQUFDb0ksUUFBUSxDQUFDLENBQUMsQ0FDdkI3QixJQUFJLENBQUVuRSxJQUFJLElBQUs0QyxPQUFPLENBQUNDLEdBQUcsQ0FBQzdDLElBQUksQ0FBQyxDQUFDO01BQ3RDaEMsU0FBUyxDQUFDdkMsR0FBRyxDQUFDc0osSUFBSSxFQUFFZ0IsUUFBUSxDQUFDO01BRTdCLElBQUloQixJQUFJLEtBQUssT0FBTyxFQUFFO1FBQ2xCcEcsUUFBUSxDQUFDZ0QsT0FBTyxDQUFDQyxTQUFTLEdBQUc4QyxNQUFNO1FBQ25DN0YsV0FBVyxDQUFDOEMsT0FBTyxHQUFHK0MsTUFBTTtRQUM1QjNHLGlCQUFpQixDQUFDLENBQUNELGNBQWMsQ0FBQztRQUNsQzhFLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDNkIsTUFBTSxDQUFDO01BQ3ZCO01BRUFxQixRQUFRLENBQUM3RixFQUFFLENBQUMsZ0JBQWdCLEVBQUUsTUFBTTtRQUNoQ3dFLE1BQU0sQ0FBQzlDLFNBQVMsQ0FBQ3FFLFNBQVMsQ0FBQyxDQUFDLENBQ3ZCekMsT0FBTyxDQUFDLFVBQVU0QixLQUFLLEVBQUU7VUFDdEJBLEtBQUssQ0FBQ2IsSUFBSSxDQUFDLENBQUM7UUFDaEIsQ0FBQyxDQUFDO1FBRU52RyxTQUFTLENBQUM4RyxNQUFNLENBQUNDLElBQUksQ0FBQztNQUMxQixDQUFDLENBQUM7TUFFRmdCLFFBQVEsQ0FBQzdGLEVBQUUsQ0FBQyxPQUFPLEVBQUUsTUFBTTtRQUN2QndFLE1BQU0sQ0FBQzlDLFNBQVMsQ0FBQ3FFLFNBQVMsQ0FBQyxDQUFDLENBQ3ZCekMsT0FBTyxDQUFDLFVBQVU0QixLQUFLLEVBQUU7VUFDdEJBLEtBQUssQ0FBQ2IsSUFBSSxDQUFDLENBQUM7UUFDaEIsQ0FBQyxDQUFDO1FBRU52RyxTQUFTLENBQUM4RyxNQUFNLENBQUNDLElBQUksQ0FBQztNQUMxQixDQUFDLENBQUM7SUFDTjtFQUNKLENBQUM7RUFFRCxNQUFNWCxzQkFBc0IsR0FBR0EsQ0FBQSxLQUFNO0lBQ2pDOEIsVUFBVSxDQUFDLFlBQVk7TUFDbkIsSUFBSS9HLFlBQVksQ0FBQ3dDLE9BQU8sRUFBRTtNQUMxQixJQUFJdEMsTUFBTSxFQUFFO1FBQ1J5QixjQUFjLENBQUM1QyxpQ0FBaUMsRUFBRSxJQUFJLENBQUM7UUFDdkRBLGlDQUFpQyxDQUFDNEUsTUFBTSxDQUFDLENBQUMsRUFBRTVFLGlDQUFpQyxDQUFDNkUsTUFBTSxDQUFDO1FBQ3JGcUIsc0JBQXNCLENBQUMsQ0FBQztNQUM1QjtJQUNKLENBQUMsRUFBRSxJQUFJLENBQUM7RUFDWixDQUFDO0VBRUQsTUFBTW5DLGFBQWEsR0FBR0EsQ0FBQzhDLElBQUksRUFBRW9CLFFBQVEsS0FBSztJQUN0QyxJQUFJLENBQUNuSSxTQUFTLENBQUN6QyxHQUFHLENBQUN3SixJQUFJLENBQUMsRUFBRTtNQUN0Qm5DLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDLHFDQUFxQyxHQUFHa0MsSUFBSSxDQUFDO01BQ3pEO0lBQ0o7SUFFQSxJQUFJcUIsVUFBVSxHQUFHcEksU0FBUyxDQUFDeEMsR0FBRyxDQUFDdUosSUFBSSxDQUFDLENBQUNoRixFQUFFO0lBQ3ZDNkMsT0FBTyxDQUFDQyxHQUFHLENBQUMsZ0JBQWdCLEVBQUV1RCxVQUFVLENBQUM7SUFFekNwSSxTQUFTLENBQUN4QyxHQUFHLENBQUN1SixJQUFJLENBQUMsQ0FDZHNCLEtBQUssQ0FBQyxDQUFDO0lBQ1pySSxTQUFTLENBQUM4RyxNQUFNLENBQUNDLElBQUksQ0FBQztJQUN0QixJQUFJQSxJQUFJLEtBQUssT0FBTyxFQUFFO01BQ2xCaEcsTUFBTSxDQUFDNEMsT0FBTyxDQUFDMkUsY0FBYyxDQUFDLENBQUM7SUFDbkM7SUFFQSxJQUFJdkIsSUFBSSxLQUFLLE9BQU8sRUFBRTtNQUNsQmhHLE1BQU0sQ0FBQzRDLE9BQU8sQ0FBQzRFLGNBQWMsQ0FBQyxDQUFDO0lBQ25DO0lBRUEsSUFBSUosUUFBUSxFQUFFO01BQ1ZBLFFBQVEsQ0FBQyxDQUFDO0lBQ2Q7SUFFQXZELE9BQU8sQ0FBQ0MsR0FBRyxDQUFDLDJCQUEyQixHQUFHdUQsVUFBVSxDQUFDO0lBQ3JESSxzQkFBYSxDQUFDQyxTQUFTLENBQUNwRyx3QkFBVyxDQUFDcUcsZUFBZSxFQUFFO01BQ2pEekcsTUFBTSxFQUFFOUMsS0FBSyxDQUFDNkMsSUFBSSxDQUFDQyxNQUFNO01BQ3pCbUcsVUFBVTtNQUNWTyxNQUFNLEVBQUV4SixLQUFLLENBQUMrRjtJQUNsQixDQUFDLENBQUMsQ0FDR2lCLElBQUksQ0FBRW5FLElBQUksSUFBSyxDQUNoQixDQUFDLENBQUMsQ0FDRDRHLEtBQUssQ0FBRWhNLENBQUMsSUFBS2dJLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDLDBCQUEwQixFQUFFakksQ0FBQyxDQUFDLENBQUM7RUFDakUsQ0FBQztFQUVELE1BQU1rRyxjQUFjLEdBQUcsU0FBQUEsQ0FBQzlDLFNBQVMsRUFBc0I7SUFBQSxJQUFwQjZJLE9BQU8sR0FBQUMsU0FBQSxDQUFBL0QsTUFBQSxRQUFBK0QsU0FBQSxRQUFBQyxTQUFBLEdBQUFELFNBQUEsTUFBRyxLQUFLO0lBQzlDbEUsT0FBTyxDQUFDQyxHQUFHLENBQUMsZ0NBQWdDLEdBQUdtRSxJQUFJLENBQUNDLFNBQVMsQ0FBQ2pKLFNBQVMsQ0FBQyxHQUFHLFlBQVksQ0FBQztJQUN4RixLQUFLLE1BQU0rSCxRQUFRLElBQUkvSCxTQUFTLEVBQUU7TUFDOUIsSUFBSXFCLE1BQU0sRUFBRTtRQUNSLElBQUkwRyxRQUFRLENBQUM5RixNQUFNLEtBQUs5QyxLQUFLLENBQUM2QyxJQUFJLENBQUNDLE1BQU0sRUFBRTtVQUN2QyxJQUFJOEYsUUFBUSxDQUFDN0UsSUFBSSxLQUFLLE9BQU8sSUFBSSxDQUFDNkUsUUFBUSxDQUFDbUIsYUFBYSxFQUFFO1lBQ3REdEUsT0FBTyxDQUFDQyxHQUFHLENBQUMsOENBQThDLEdBQUcxRixLQUFLLENBQUM2QyxJQUFJLENBQUNDLE1BQU0sR0FBRyxLQUFLLEdBQUc4RixRQUFRLENBQUNLLFVBQVUsQ0FBQztZQUM3R2UsT0FBTyxDQUFDcEIsUUFBUSxDQUFDSyxVQUFVLEVBQUVMLFFBQVEsQ0FBQzdFLElBQUksRUFBRTJGLE9BQU8sRUFBRWQsUUFBUSxDQUFDOUYsTUFBTSxDQUFDO1VBQ3pFO1FBQ0o7UUFFQSxJQUFJOUMsS0FBSyxDQUFDNkUsYUFBYSxJQUFJNkUsT0FBTyxFQUFFO1VBQ2hDO1VBQ0E7VUFDQSxJQUFJZCxRQUFRLENBQUM3RSxJQUFJLEtBQUssT0FBTyxFQUFFO1lBQzNCaUcsT0FBTyxDQUFDcEIsUUFBUSxDQUFDSyxVQUFVLEVBQUVMLFFBQVEsQ0FBQzdFLElBQUksRUFBRTJGLE9BQU8sRUFBRWQsUUFBUSxDQUFDOUYsTUFBTSxDQUFDO1VBQ3pFO1FBQ0o7TUFDSixDQUFDLE1BQU07UUFDSC9CLGlDQUFpQyxDQUFDdUYsSUFBSSxDQUFDc0MsUUFBUSxDQUFDO01BQ3BEO0lBQ0o7SUFDQW5ELE9BQU8sQ0FBQ0MsR0FBRyxDQUFDLGtEQUFrRCxHQUFHbUUsSUFBSSxDQUFDQyxTQUFTLENBQUMvSSxpQ0FBaUMsQ0FBQyxHQUFHLFlBQVksQ0FBQztFQUN0SSxDQUFDO0VBRUQsTUFBTStDLGNBQWMsR0FBR0EsQ0FBQ0QsVUFBVSxFQUFFRSxJQUFJLEVBQUVqQixNQUFNLEtBQUs7SUFDakQ7SUFDQTBFLFNBQVMsQ0FBQzNELFVBQVUsQ0FBQztJQUNyQixJQUFJRSxJQUFJLEtBQUssT0FBTyxFQUFFO01BQ2xCLElBQUlyQyxXQUFXLENBQUM4QyxPQUFPLEVBQUU7UUFDckIsSUFBSTlDLFdBQVcsQ0FBQzhDLE9BQU8sRUFBRTtVQUNyQjlDLFdBQVcsQ0FBQzhDLE9BQU8sQ0FBQ3NFLFNBQVMsQ0FBQyxDQUFDLENBQzFCekMsT0FBTyxDQUFDLFVBQVU0QixLQUFLLEVBQUU7WUFDdEJBLEtBQUssQ0FBQ2IsSUFBSSxDQUFDLENBQUM7VUFDaEIsQ0FBQyxDQUFDO1FBQ1Y7TUFDSjtJQUNKLENBQUMsTUFBTSxJQUFJckQsSUFBSSxLQUFLLE9BQU8sRUFBRTtNQUN6QixJQUFJa0csWUFBWSxHQUFHQyxRQUFRLENBQUNDLGNBQWMsQ0FBQ3RHLFVBQVUsQ0FBQztNQUN0RCxJQUFJb0csWUFBWSxJQUFJQSxZQUFZLENBQUN4RixTQUFTLEVBQUU7UUFDeEN3RixZQUFZLENBQUN4RixTQUFTLENBQUNxRSxTQUFTLENBQUMsQ0FBQyxDQUM3QnpDLE9BQU8sQ0FBQyxVQUFVNEIsS0FBSyxFQUFFO1VBQ3RCQSxLQUFLLENBQUNiLElBQUksQ0FBQyxDQUFDO1FBQ2hCLENBQUMsQ0FBQztRQUVOLElBQUl0RSxNQUFNLElBQUl3Rix1QkFBYSxFQUFFO1VBQ3pCQSx1QkFBYSxDQUFDOEIsV0FBVyxDQUFDdEgsTUFBTSxDQUFDO1FBQ3JDO1FBQ0EsSUFBSXVILFdBQVcsR0FBR0gsUUFBUSxDQUFDQyxjQUFjLENBQUNuSyxLQUFLLENBQUM2QyxJQUFJLENBQUNDLE1BQU0sR0FBRyxxQkFBcUIsQ0FBQztRQUNwRixJQUFJdUgsV0FBVyxFQUFFO1VBQ2JBLFdBQVcsQ0FBQ0MsV0FBVyxDQUFDTCxZQUFZLENBQUM7UUFDekM7TUFDSjtJQUNKO0lBRUE3SSxTQUFTLENBQUN1RyxNQUFNLENBQUM5RCxVQUFVLENBQUM7RUFDaEMsQ0FBQztFQUVELFNBQVMwRyxZQUFZQSxDQUFDeEcsSUFBSSxFQUFFakIsTUFBTSxFQUFFckYsQ0FBQyxFQUFFK00sT0FBTyxFQUFFdkIsVUFBVSxFQUFFUyxPQUFPLEVBQUU7SUFDakVqRSxPQUFPLENBQUNDLEdBQUcsQ0FBQyxvQkFBb0IsR0FBRzNCLElBQUksR0FBRyxRQUFRLEdBQUdqQixNQUFNLENBQUM7SUFDNUQyQyxPQUFPLENBQUNDLEdBQUcsQ0FBQ2pJLENBQUMsQ0FBQztJQUVkLElBQUkrTSxPQUFPLEdBQUcsRUFBRSxFQUFFO01BQ2QvRSxPQUFPLENBQUNDLEdBQUcsQ0FBQyxhQUFhLEdBQUc4RSxPQUFPLEdBQUcsR0FBRyxDQUFDO01BQzFDekIsVUFBVSxDQUFDLFlBQVk7UUFDbkIsSUFBSS9HLFlBQVksQ0FBQ3dDLE9BQU8sRUFBRTtRQUMxQndGLE9BQU8sQ0FBQ2YsVUFBVSxFQUFFbEYsSUFBSSxFQUFFMkYsT0FBTyxFQUFFNUcsTUFBTSxFQUFFMEgsT0FBTyxDQUFDO01BQ3ZELENBQUMsRUFBRSxJQUFJLENBQUM7SUFDWixDQUFDLE1BQU07TUFDSC9FLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDLCtCQUErQixHQUFHM0IsSUFBSSxHQUFHLFFBQVEsR0FBR2pCLE1BQU0sQ0FBQztJQUMzRTtFQUNKO0VBRUEsTUFBTWtILE9BQU8sR0FBRyxlQUFBQSxDQUFPZixVQUFVLEVBQUVsRixJQUFJLEVBQUUyRixPQUFPLEVBQUU1RyxNQUFNLEVBQWtCO0lBQUEsSUFBaEIwSCxPQUFPLEdBQUFiLFNBQUEsQ0FBQS9ELE1BQUEsUUFBQStELFNBQUEsUUFBQUMsU0FBQSxHQUFBRCxTQUFBLE1BQUcsQ0FBQztJQUNqRTtJQUNBO0lBQ0E7SUFDQTtJQUNBLE1BQU1jLFNBQVMsR0FBRyxNQUFNekssS0FBSyxDQUFDMEssZ0JBQWdCLENBQUMzRyxJQUFJLENBQUM7SUFDcEQsSUFBSSxDQUFDMEcsU0FBUyxFQUFFO01BQ1pGLFlBQVksQ0FBQ3hHLElBQUksRUFBRWpCLE1BQU0sRUFBRSxJQUFJNkgsS0FBSyxDQUFDLGlDQUFpQyxHQUFHNUcsSUFBSSxDQUFDLEVBQUV5RyxPQUFPLEVBQUV2QixVQUFVLEVBQUVTLE9BQU8sQ0FBQztNQUM3RztJQUNKO0lBQ0E3RCx3QkFBZSxDQUFDK0UsZ0JBQWdCLENBQUMzQixVQUFVLEVBQUUvRyxNQUFNLENBQUMySSxlQUFlLEVBQUVKLFNBQVMsRUFBRXpLLEtBQUssQ0FBQytGLFNBQVMsRUFDM0ZaLDJCQUFrQixDQUFDYSxjQUFjLENBQUMsQ0FBQyxDQUFDQyxRQUFRLEVBQUVsQyxJQUFJLENBQUMsQ0FDbERpRCxJQUFJLENBQ0Q4RCxJQUFBLElBSU87TUFBQSxJQUpOO1FBQ0lDLFFBQVE7UUFDUnhELE1BQU07UUFDTnhEO01BQ0osQ0FBQyxHQUFBK0csSUFBQTtNQUNFLElBQUlDLFFBQVEsRUFBRTtRQUNWM0osU0FBUyxDQUFDOUMsR0FBRyxDQUFDeU0sUUFBUSxDQUFDbkksRUFBRSxFQUFFbUksUUFBUSxDQUFDO1FBRXBDdEYsT0FBTyxDQUFDQyxHQUFHLENBQUMsc0ZBQXNGLEdBQUczQixJQUFJLEdBQUcsU0FBUyxHQUFHakIsTUFBTSxDQUFDO1FBQy9ILElBQUlpQixJQUFJLEtBQUssT0FBTyxFQUFFO1VBQ2xCLElBQUl2QyxRQUFRLENBQUNnRCxPQUFPLEVBQUU7WUFDbEJoRCxRQUFRLENBQUNnRCxPQUFPLENBQUNDLFNBQVMsR0FBRzhDLE1BQU07VUFDdkM7VUFFQTdGLFdBQVcsQ0FBQzhDLE9BQU8sR0FBRytDLE1BQU07VUFFNUJqSCxhQUFhLENBQUMsS0FBSyxDQUFDO1VBQ3BCTSxpQkFBaUIsQ0FBQyxDQUFDRCxjQUFjLENBQUM7VUFDbENpQixNQUFNLENBQUM0QyxPQUFPLENBQUNtRSxhQUFhLENBQUNwQixNQUFNLENBQUNZLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUQsQ0FBQyxNQUFNO1VBQ0gsSUFBSW5JLEtBQUssQ0FBQzZFLGFBQWEsSUFBSTZFLE9BQU8sRUFBRTtZQUNoQyxJQUFJTyxZQUFZLEdBQUdDLFFBQVEsQ0FBQ2MsYUFBYSxDQUFDLE9BQU8sQ0FBQztZQUNsRGYsWUFBWSxDQUFDeEYsU0FBUyxHQUFHOEMsTUFBTTtZQUMvQjBDLFlBQVksQ0FBQ3JILEVBQUUsR0FBR21JLFFBQVEsQ0FBQ25JLEVBQUU7WUFDN0JxSCxZQUFZLENBQUNnQixXQUFXLEdBQUcsS0FBSztZQUNoQ2hCLFlBQVksQ0FBQ2lCLFFBQVEsR0FBRyxJQUFJO1lBQzVCaEIsUUFBUSxDQUFDQyxjQUFjLENBQUMsNEJBQTRCLENBQUMsQ0FDaERnQixXQUFXLENBQUNsQixZQUFZLENBQUM7O1lBRTlCO1lBQ0EzQyxVQUFVLENBQUN5RCxRQUFRLENBQUNuSSxFQUFFLEVBQUUyRSxNQUFNLEVBQUV6RSxNQUFNLENBQUM7WUFFdkMsSUFBSTlDLEtBQUssQ0FBQ3FJLE1BQU0sRUFBRTtjQUNkQyx1QkFBYSxDQUFDQyxRQUFRLENBQUN6RixNQUFNLEVBQUV5RSxNQUFNLENBQUNXLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDOUQ7VUFDSjtRQUNKO1FBRUE2QyxRQUFRLENBQUNoSSxFQUFFLENBQ1AsWUFBWSxFQUNaLE1BQU07VUFDRjBDLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDM0IsSUFBSSxHQUFHLDRCQUE0QixHQUFHakIsTUFBTSxDQUFDO1VBQ3pEZ0IsY0FBYyxDQUFDaUgsUUFBUSxDQUFDbkksRUFBRSxFQUFFbUIsSUFBSSxFQUFFakIsTUFBTSxDQUFDO1VBQ3pDO1VBQ0E7VUFDQSxNQUFNc0kscUJBQXFCLEdBQUdqSixZQUFZLENBQUNrSixJQUFJLENBQUVDLENBQUMsSUFBS0EsQ0FBQyxDQUFDeEksTUFBTSxLQUFLQSxNQUFNLENBQUM7VUFDM0UsSUFBSXNJLHFCQUFxQixLQUNoQnJILElBQUksS0FBSyxPQUFPLElBQUksQ0FBQ3FILHFCQUFxQixDQUFDL0ssVUFBVSxJQUNsRDBELElBQUksS0FBSyxPQUFPLElBQUksQ0FBQ3FILHFCQUFxQixDQUFDN0ssVUFBVyxDQUFDLEVBQUU7WUFDakVnSyxZQUFZLENBQUN4RyxJQUFJLEVBQUVqQixNQUFNLEVBQUUsSUFBSTZILEtBQUssQ0FBQyxtQkFBbUIsR0FBRzVHLElBQUksR0FBRyxlQUFlLENBQUMsRUFBRXlHLE9BQU8sRUFBRXZCLFVBQVUsRUFBRVMsT0FBTyxDQUFDO1VBQ3JIO1FBQ0osQ0FDSixDQUFDO1FBRURxQixRQUFRLENBQUNoSSxFQUFFLENBQ1AsZ0JBQWdCLEVBQ2hCLE1BQU07VUFDRjBDLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDM0IsSUFBSSxHQUFHLHVCQUF1QixHQUFHakIsTUFBTSxDQUFDO1VBQ3BEZ0IsY0FBYyxDQUFDaUgsUUFBUSxDQUFDbkksRUFBRSxFQUFFbUIsSUFBSSxFQUFFakIsTUFBTSxDQUFDO1FBQzdDLENBQ0osQ0FBQztNQUNMO0lBQ0osQ0FDSixDQUFDLENBQUMyRyxLQUFLLENBQUVoTSxDQUFDLElBQUs7TUFDZjhNLFlBQVksQ0FBQ3hHLElBQUksRUFBRWpCLE1BQU0sRUFBRXJGLENBQUMsRUFBRStNLE9BQU8sRUFBRXZCLFVBQVUsRUFBRVMsT0FBTyxDQUFDO0lBQy9ELENBQUMsQ0FBQztFQUNOLENBQUM7RUFFRCxNQUFNNkIsa0JBQWtCLEdBQUdBLENBQUEsS0FBTTtJQUM3QixJQUFJQyxJQUFJLEdBQUd4TCxLQUFLLENBQUM2QyxJQUFJLENBQUMySSxJQUFJO0lBRTFCLElBQUl4RyxjQUFLLENBQUNDLE1BQU0sQ0FBQ2pGLEtBQUssQ0FBQzZDLElBQUksQ0FBQ0MsTUFBTSxDQUFDLEVBQUU7TUFDakMwSSxJQUFJLE1BQUFDLE1BQUEsQ0FBTUQsSUFBSSxhQUFVO0lBQzVCO0lBRUEsT0FBT0EsSUFBSTtFQUNmLENBQUM7RUFFRCxvQkFDSWxQLE1BQUEsQ0FBQXFCLE9BQUEsQ0FBQXFOLGFBQUEsQ0FBQTFPLE1BQUEsQ0FBQXFCLE9BQUEsQ0FBQStOLFFBQUEscUJBRVFwUCxNQUFBLENBQUFxQixPQUFBLENBQUFxTixhQUFBO0lBQ0lXLFNBQVMsS0FBQUYsTUFBQSxDQUFLLFVBQVUsSUFBSXpMLEtBQUssQ0FBQzZFLGFBQWEsR0FBRyw0Q0FBNEMsR0FBRywrQkFBK0IsQ0FBQyxDQUFHO0lBQ3BJK0csS0FBSyxFQUFFO01BQ0hDLE9BQU8sRUFBRTdMLEtBQUssQ0FBQzZMLE9BQU8sR0FBRzdMLEtBQUssQ0FBQzZMLE9BQU8sR0FBRyxJQUFJO01BQzdDdk0sTUFBTSxFQUFFVSxLQUFLLENBQUNWLE1BQU0sR0FBR1UsS0FBSyxDQUFDVixNQUFNLEdBQUcsTUFBTTtNQUM1Q0gsS0FBSyxFQUFFLE1BQU07TUFDYjJNLFFBQVEsRUFBRSxVQUFVO01BQ3BCQyxZQUFZLEVBQUUsTUFBTTtNQUNwQkMsUUFBUSxFQUFFLFFBQVE7TUFDbEJDLFNBQVMsRUFBRSxZQUFZO01BQ3ZCQyxlQUFlLEVBQUVsTSxLQUFLLENBQUM2RSxhQUFhLEdBQUcsU0FBUyxHQUFHLElBQUk7TUFDdkRzSCxNQUFNLEVBQUVuTSxLQUFLLENBQUM2RSxhQUFhLEdBQ3JCLFlBQVksSUFBSU0sMkJBQWtCLENBQUNpSCwwQkFBMEIsQ0FBQyxDQUFDLElBQUksU0FBUyxDQUFDLEdBQzdFLGtDQUFrQztNQUN4QztNQUNBO01BQ0FDLFNBQVMsRUFBRyxDQUFDOUwsVUFBVSxJQUFJYyxVQUFVLEdBQUd6QyxjQUFjLEdBQ2hELGtCQUFrQixJQUFJdUcsMkJBQWtCLENBQUNpSCwwQkFBMEIsQ0FBQyxDQUFDLElBQUksU0FBUyxDQUFDLEdBQ25GLE1BQU07TUFDWkUsVUFBVSxFQUFFO0lBQ2hCO0VBQUUsZ0JBRUVoUSxNQUFBLENBQUFxQixPQUFBLENBQUFxTixhQUFBLENBQUExTyxNQUFBLENBQUFxQixPQUFBLENBQUErTixRQUFBLFFBRVEsQ0FBQ3JMLFVBQVUsSUFBSSxDQUFDbUIsUUFBUSxDQUFDZ0QsT0FBTyxJQUFJLENBQUNoRCxRQUFRLENBQUNnRCxPQUFPLENBQUNDLFNBQVMsa0JBQy9EbkksTUFBQSxDQUFBcUIsT0FBQSxDQUFBcU4sYUFBQTtJQUFLVyxTQUFTLEVBQUUsbUJBQW9CO0lBQy9CQyxLQUFLLEVBQUU7TUFDSHpNLEtBQUssRUFBRSxNQUFNO01BQ2JHLE1BQU0sRUFBRSxNQUFNO01BQ2RpTixZQUFZLEVBQUV2TSxLQUFLLENBQUN3TSxNQUFNLEtBQUssSUFBSSxHQUFHLEtBQUssR0FBRztJQUNsRDtFQUFFLGdCQUVDbFEsTUFBQSxDQUFBcUIsT0FBQSxDQUFBcU4sYUFBQTtJQUFLVyxTQUFTLEVBQUUzTCxLQUFLLENBQUN3TSxNQUFNLEtBQUssSUFBSSxHQUFHLG1CQUFtQixHQUFHLGdCQUFpQjtJQUMxRVosS0FBSyxFQUFFO01BQ0h6TSxLQUFLLEVBQUUsQ0FBQ2EsS0FBSyxDQUFDd00sTUFBTSxLQUFLLElBQUksR0FBRyxFQUFFLEdBQUcsR0FBRyxJQUFJLElBQUk7TUFDaERsTixNQUFNLEVBQUUsQ0FBQ1UsS0FBSyxDQUFDd00sTUFBTSxLQUFLLElBQUksR0FBRyxFQUFFLEdBQUcsR0FBRyxJQUFJLElBQUk7TUFDakRILFNBQVMsRUFBRSxDQUFDOUwsVUFBVSxJQUFJYyxVQUFVLEdBQUcsQ0FBQyxHQUNsQyxRQUFRLElBQUksQ0FBQyxHQUFHQSxVQUFVLEdBQUcsRUFBRSxDQUFDLEdBQUcsS0FBSyxJQUFJOEQsMkJBQWtCLENBQUNpSCwwQkFBMEIsQ0FBQyxDQUFDLElBQUksU0FBUyxDQUFDLEdBQ3pHLE1BQU07TUFDWkUsVUFBVSxFQUFFLHdCQUF3QjtNQUNwQ0osZUFBZSxFQUFFLFNBQVM7TUFDMUJPLEtBQUssRUFBRTtJQUNYO0VBQUUsZ0JBQ0huUSxNQUFBLENBQUFxQixPQUFBLENBQUFxTixhQUFBO0lBQ0lXLFNBQVMsRUFBRTNMLEtBQUssQ0FBQ3dNLE1BQU0sS0FBSyxJQUFJLEdBQUcsa0JBQWtCLEdBQUd4TSxLQUFLLENBQUN3TSxNQUFNLEtBQUssSUFBSSxHQUFHLGtCQUFrQixHQUFHLFFBQVM7SUFDOUdaLEtBQUssRUFDRDtNQUNJYyxRQUFRLEVBQUUxTSxLQUFLLENBQUN3TSxNQUFNLEtBQUssSUFBSSxHQUFHLE1BQU0sR0FBRztJQUMvQztFQUNILENBQUMsQ0FBQyxFQUVIL0osV0FBVyxnQkFBR25HLE1BQUEsQ0FBQXFCLE9BQUEsQ0FBQXFOLGFBQUE7SUFBS1ksS0FBSyxFQUFFO01BQ3RCek0sS0FBSyxFQUFFLE1BQU07TUFDYkcsTUFBTSxFQUFFLE1BQU07TUFDZHFOLGdCQUFnQixFQUFFLFdBQVc7TUFDN0JDLGNBQWMsRUFBRSxPQUFPO01BQ3ZCQyxrQkFBa0IsRUFBRSxRQUFRO01BQzVCZCxZQUFZLEVBQUUsS0FBSztNQUNuQkcsZUFBZSxFQUFFLGFBQWE7TUFDOUJZLGVBQWUsU0FBQXJCLE1BQUEsQ0FBU2hKLFdBQVc7SUFDdkM7RUFBRSxDQUNELENBQUMsR0FBR3VDLGNBQUssQ0FBQytILFdBQVcsQ0FBQy9NLEtBQUssQ0FBQzZDLElBQUksQ0FBQzJJLElBQUksQ0FFekMsQ0FFUixDQUFDLGVBR05sUCxNQUFBLENBQUFxQixPQUFBLENBQUFxTixhQUFBO0lBQ0lwSSxFQUFFLEVBQUU1QyxLQUFLLENBQUM2QyxJQUFJLENBQUNDLE1BQU0sR0FBRyxRQUFTO0lBQ2pDM0QsS0FBSyxFQUFFLEdBQUk7SUFDWEcsTUFBTSxFQUFFLEdBQUk7SUFDWjBOLFFBQVE7SUFBQ0MsR0FBRyxFQUFFekwsUUFBUztJQUFDMEwsS0FBSztJQUM3QnRCLEtBQUssRUFBRTtNQUNIek0sS0FBSyxFQUFFLE1BQU07TUFDYkcsTUFBTSxFQUFFLE1BQU07TUFDZDZOLFNBQVMsRUFBRSxPQUFPO01BQ2xCQyxTQUFTLEVBQUVwTixLQUFLLENBQUM2RSxhQUFhLEdBQUcsWUFBWSxHQUFHLE1BQU07TUFDdER3SSxNQUFNLEVBQUUsR0FBRztNQUNYQyxPQUFPLEVBQUdqTixVQUFVLElBQUksQ0FBQ21CLFFBQVEsQ0FBQ2dELE9BQU8sSUFBSSxDQUFDaEQsUUFBUSxDQUFDZ0QsT0FBTyxDQUFDQyxTQUFTLEdBQUksTUFBTSxHQUFHO0lBQ3pGO0VBQUUsQ0FDTCxDQUFDLEVBR0Y7RUFDQXpFLEtBQUssQ0FBQ3FJLE1BQU0saUJBQ1ovTCxNQUFBLENBQUFxQixPQUFBLENBQUFxTixhQUFBO0lBQ0lwSSxFQUFFLEVBQUU1QyxLQUFLLENBQUM2QyxJQUFJLENBQUNDLE1BQU0sR0FBRyxRQUFTO0lBQ2pDa0ssUUFBUTtJQUFDQyxHQUFHLEVBQUV0TCxRQUFTO0lBQUN1TCxLQUFLO0lBQzdCdEIsS0FBSyxFQUFFO01BQ0gwQixPQUFPLEVBQUU7SUFDYjtFQUFFLENBQ0wsQ0FBQyxlQUVOaFIsTUFBQSxDQUFBcUIsT0FBQSxDQUFBcU4sYUFBQTtJQUFLVyxTQUFTLEVBQUUzTCxLQUFLLENBQUN3TSxNQUFNLEtBQUssSUFBSSxHQUFHLGVBQWUsR0FBRyxZQUFhO0lBQ2xFWixLQUFLLEVBQ0Q7TUFDSTBCLE9BQU8sRUFBRSxNQUFNO01BQ2Z4QixRQUFRLEVBQUUsVUFBVTtNQUNwQnlCLElBQUksRUFBRSxDQUFDO01BQ1BwTyxLQUFLLEVBQUUsTUFBTTtNQUNicU8sTUFBTSxFQUFFLEdBQUc7TUFDWDNCLE9BQU8sRUFBRTdMLEtBQUssQ0FBQ3dNLE1BQU0sS0FBSyxJQUFJLEdBQUcsS0FBSyxHQUFHLEtBQUs7TUFDOUNQLFNBQVMsRUFBRSxZQUFZO01BQ3ZCd0IsVUFBVSxFQUFFLFVBQVU7TUFDdEJDLEdBQUcsRUFBRTtJQUNUO0VBQ0gsZ0JBQ0ZwUixNQUFBLENBQUFxQixPQUFBLENBQUFxTixhQUFBO0lBQUtZLEtBQUssRUFBRTtNQUNSMEIsT0FBTyxFQUFFLGFBQWE7TUFDdEJHLFVBQVUsRUFBRSxRQUFRO01BQ3BCRSxRQUFRLEVBQUUsS0FBSztNQUNmOUIsT0FBTyxFQUFFN0wsS0FBSyxDQUFDd00sTUFBTSxLQUFLLElBQUksR0FBRyxTQUFTLEdBQUcsVUFBVTtNQUN2RFQsWUFBWSxFQUFFLEtBQUs7TUFDbkJHLGVBQWUsRUFBRSxrQkFBa0I7TUFDbkNPLEtBQUssRUFBRSxNQUFNO01BQ2JDLFFBQVEsRUFBRTFNLEtBQUssQ0FBQ3dNLE1BQU0sS0FBSyxJQUFJLEdBQUcsTUFBTSxHQUFHLE1BQU07TUFDakRvQixVQUFVLEVBQUUsR0FBRztNQUNmQyxVQUFVLEVBQUUsR0FBRztNQUNmQyxVQUFVLEVBQUUsUUFBUTtNQUNwQjlCLFFBQVEsRUFBRSxRQUFRO01BQ2xCK0IsWUFBWSxFQUFFLFVBQVU7TUFDeEJDLFVBQVUsRUFBRSxDQUFDO01BQ2JDLFdBQVcsRUFBRTtJQUNqQjtFQUFFLEdBQ0csQ0FBQ2pPLEtBQUssQ0FBQzZFLGFBQWEsSUFBSTBHLGtCQUFrQixDQUFDLENBQUMsRUFDNUN2TCxLQUFLLENBQUM2RSxhQUFhLElBQUksS0FDdkIsQ0FBQyxFQUVGLENBQUM3RSxLQUFLLENBQUM2RSxhQUFhLGlCQUNwQnZJLE1BQUEsQ0FBQXFCLE9BQUEsQ0FBQXFOLGFBQUE7SUFBS1ksS0FBSyxFQUFFO01BQUNvQyxVQUFVLEVBQUUsS0FBSztNQUFFVixPQUFPLEVBQUUsTUFBTTtNQUFFRyxVQUFVLEVBQUUsUUFBUTtNQUFFUyxjQUFjLEVBQUUsVUFBVTtNQUFFUixHQUFHLEVBQUU7SUFBSztFQUFFLEdBRXZHMU4sS0FBSyxDQUFDcUksTUFBTSxJQUFJLENBQUM5SCxVQUFVLGdCQUN2QmpFLE1BQUEsQ0FBQXFCLE9BQUEsQ0FBQXFOLGFBQUEsQ0FBQ2hPLFdBQUEsQ0FBQVcsT0FBVTtJQUNQd1EsT0FBTyxFQUFHMVEsQ0FBQyxJQUFLO01BQ1p1QyxLQUFLLENBQUNvTyxlQUFlLENBQUNwTyxLQUFLLENBQUM2QyxJQUFJLENBQUM7SUFDckMsQ0FBRTtJQUNGK0ksS0FBSyxFQUFFO01BQ0h6TSxLQUFLLEVBQUUsTUFBTTtNQUNiRyxNQUFNLEVBQUUsTUFBTTtNQUNkbU4sS0FBSyxFQUFFLE1BQU07TUFDYlAsZUFBZSxFQUFFLGtCQUFrQjtNQUNuQ0gsWUFBWSxFQUFFO0lBQ2xCO0VBQUUsZ0JBRUZ6UCxNQUFBLENBQUFxQixPQUFBLENBQUFxTixhQUFBLENBQUMvTixLQUFBLENBQUFVLE9BQUk7SUFBQ2lGLEVBQUUsRUFBRTtFQUFNLENBQUMsQ0FDVCxDQUFDLGdCQUVidEcsTUFBQSxDQUFBcUIsT0FBQSxDQUFBcU4sYUFBQTtJQUFNWSxLQUFLLEVBQUU7TUFDVDBCLE9BQU8sRUFBRS9NLFVBQVUsR0FBRyxhQUFhLEdBQUcsTUFBTTtNQUM1Q2tOLFVBQVUsRUFBRSxRQUFRO01BQ3BCaEIsS0FBSyxFQUFFLE1BQU07TUFDYlAsZUFBZSxFQUFFLGtCQUFrQjtNQUNuQ0gsWUFBWSxFQUFFLEtBQUs7TUFDbkJGLE9BQU8sRUFBRTtJQUNiO0VBQUUsZ0JBQ0V2UCxNQUFBLENBQUFxQixPQUFBLENBQUFxTixhQUFBLENBQUMvTixLQUFBLENBQUFVLE9BQUk7SUFBQ2lGLEVBQUUsRUFBRTtFQUFVLENBQUMsQ0FDbkIsQ0FBQyxFQUdYNUMsS0FBSyxDQUFDcUksTUFBTSxJQUFJLENBQUNoSSxVQUFVLGlCQUMzQi9ELE1BQUEsQ0FBQXFCLE9BQUEsQ0FBQXFOLGFBQUEsQ0FBQ2hPLFdBQUEsQ0FBQVcsT0FBVTtJQUNQd1EsT0FBTyxFQUFHMVEsQ0FBQyxJQUFLO01BQ1p1QyxLQUFLLENBQUNxTyxlQUFlLENBQUNyTyxLQUFLLENBQUM2QyxJQUFJLENBQUM7SUFDckMsQ0FBRTtJQUNGK0ksS0FBSyxFQUFFO01BQ0h6TSxLQUFLLEVBQUUsTUFBTTtNQUNiRyxNQUFNLEVBQUUsTUFBTTtNQUNkbU4sS0FBSyxFQUFFLE1BQU07TUFDYlAsZUFBZSxFQUFFLGtCQUFrQjtNQUNuQ0gsWUFBWSxFQUFFO0lBQ2xCO0VBQUUsZ0JBRUZ6UCxNQUFBLENBQUFxQixPQUFBLENBQUFxTixhQUFBLENBQUMvTixLQUFBLENBQUFVLE9BQUk7SUFBQ2lGLEVBQUUsRUFBRTtFQUFTLENBQUMsQ0FDWixDQUVmLENBQUMsRUFHTjVDLEtBQUssQ0FBQzZFLGFBQWEsaUJBQ25CdkksTUFBQSxDQUFBcUIsT0FBQSxDQUFBcU4sYUFBQTtJQUFLWSxLQUFLLEVBQUU7TUFBQzBCLE9BQU8sRUFBRSxNQUFNO01BQUVHLFVBQVUsRUFBRSxRQUFRO01BQUVTLGNBQWMsRUFBRTtJQUFVO0VBQUUsZ0JBQzVFNVIsTUFBQSxDQUFBcUIsT0FBQSxDQUFBcU4sYUFBQSxDQUFDN04sUUFBQSxDQUFBUSxPQUFPO0lBQUMyUSxLQUFLLEVBQUM7RUFBWSxnQkFDdkJoUyxNQUFBLENBQUFxQixPQUFBLENBQUFxTixhQUFBLENBQUNoTyxXQUFBLENBQUFXLE9BQVU7SUFDUHdRLE9BQU8sRUFBRWpLLHNCQUF1QjtJQUNoQyxpQkFBZTNCLGVBQWUsR0FBRyxhQUFhLEdBQUdxSCxTQUFVO0lBQzNELGlCQUFjLE1BQU07SUFDcEIsaUJBQWVySCxlQUFlLEdBQUcsTUFBTSxHQUFHcUgsU0FBVTtJQUNwRGdDLEtBQUssRUFBRTtNQUNIek0sS0FBSyxFQUFFLE1BQU07TUFDYkcsTUFBTSxFQUFFLE1BQU07TUFDZG1OLEtBQUssRUFBRSxNQUFNO01BQ2JQLGVBQWUsRUFBRSxrQkFBa0I7TUFDbkNILFlBQVksRUFBRTtJQUNsQjtFQUFFLGdCQUVGelAsTUFBQSxDQUFBcUIsT0FBQSxDQUFBcU4sYUFBQSxDQUFDL04sS0FBQSxDQUFBVSxPQUFJO0lBQUNpRixFQUFFLEVBQUU7RUFBVyxDQUFDLENBQ2QsQ0FDUCxDQUNSLENBQUMsRUFHTixDQUFDNUMsS0FBSyxDQUFDNkUsYUFBYSxpQkFDcEJ2SSxNQUFBLENBQUFxQixPQUFBLENBQUFxTixhQUFBO0lBQU1ZLEtBQUssRUFBRTtNQUFDb0MsVUFBVSxFQUFFO0lBQUs7RUFBRSxHQUMxQy9OLFVBQVUsaUJBQUkzRCxNQUFBLENBQUFxQixPQUFBLENBQUFxTixhQUFBLENBQUM5TixjQUFBLENBQUFxUixPQUFPO0lBQUM3QixRQUFRLEVBQUUsT0FBUTtJQUFDZCxLQUFLLEVBQUU7TUFBQ2EsS0FBSyxFQUFFO0lBQVM7RUFBRSxDQUFDLENBQ2xFLENBRUcsQ0FBQyxFQUVGek0sS0FBSyxDQUFDNkUsYUFBYSxpQkFDbkJ2SSxNQUFBLENBQUFxQixPQUFBLENBQUFxTixhQUFBO0lBQUtwSSxFQUFFLEVBQUU7RUFBNkIsQ0FDakMsQ0FFWCxDQUVMLENBQUMsZUFFVnRHLE1BQUEsQ0FBQXFCLE9BQUEsQ0FBQXFOLGFBQUEsQ0FBQzVOLFNBQUEsQ0FBQW9SLElBQUk7SUFDRG5NLFFBQVEsRUFBRUEsUUFBUztJQUNuQk8sRUFBRSxFQUFDLGNBQWM7SUFDakI2TCxJQUFJLEVBQUVsTSxlQUFnQjtJQUN0Qm1NLE9BQU8sRUFBRTlKLHFCQUFzQjtJQUMvQnVKLE9BQU8sRUFBRXZKLHFCQUFzQjtJQUMvQitKLFVBQVUsRUFBRTtNQUNSQyxTQUFTLEVBQUUsQ0FBQztNQUNaQyxFQUFFLEVBQUU7UUFDQTdDLFFBQVEsRUFBRSxTQUFTO1FBQ25COEMsTUFBTSxFQUFFLDJDQUEyQztRQUNuREMsRUFBRSxFQUFFLEdBQUc7UUFDUCxpQkFBaUIsRUFBRTtVQUNmNUMsTUFBTSxFQUFFLG1CQUFtQjtVQUMzQkosWUFBWSxFQUFFO1FBQ2xCLENBQUM7UUFDRCxtQkFBbUIsRUFBRTtVQUNqQjVNLEtBQUssRUFBRSxFQUFFO1VBQ1RHLE1BQU0sRUFBRSxFQUFFO1VBQ1YwUCxFQUFFLEVBQUUsQ0FBQyxHQUFHO1VBQ1JDLEVBQUUsRUFBRTtRQUNSLENBQUM7UUFDRCxVQUFVLEVBQUU7VUFDUkMsT0FBTyxFQUFFLElBQUk7VUFDYjVCLE9BQU8sRUFBRSxPQUFPO1VBQ2hCeEIsUUFBUSxFQUFFLFVBQVU7VUFDcEJxRCxHQUFHLEVBQUUsQ0FBQztVQUNOQyxLQUFLLEVBQUUsRUFBRTtVQUNUalEsS0FBSyxFQUFFLEVBQUU7VUFDVEcsTUFBTSxFQUFFLEVBQUU7VUFDVitQLE9BQU8sRUFBRSxTQUFTO1VBQ2xCakMsU0FBUyxFQUFFLGdDQUFnQztVQUMzQ0MsTUFBTSxFQUFFO1FBQ1o7TUFDSjtJQUNKLENBQUU7SUFDRmlDLGVBQWUsRUFBRTtNQUNiQyxVQUFVLEVBQUUsRUFBRTtNQUNkQyxRQUFRLEVBQUU7SUFDZCxDQUFFO0lBQ0ZDLFlBQVksRUFBRTtNQUNWRixVQUFVLEVBQUUsT0FBTztNQUNuQkMsUUFBUSxFQUFFO0lBQ2Q7RUFBRSxHQUdFeE8sWUFBWSxDQUFDME8sR0FBRyxDQUFDLENBQUN4TixNQUFNLEVBQUV5TixLQUFLLEtBQUs7SUFDaEMsb0JBQU9yVCxNQUFBLENBQUFxQixPQUFBLENBQUFxTixhQUFBLENBQUM1TixTQUFBLENBQUF3UyxRQUFRO01BQUN6QixPQUFPLEVBQUVBLENBQUEsS0FBTTlKLGlCQUFpQixDQUFDbkMsTUFBTSxDQUFFO01BQUNnRixHQUFHLEVBQUV5STtJQUFNLGdCQUU5RHJULE1BQUEsQ0FBQXFCLE9BQUEsQ0FBQXFOLGFBQUE7TUFDSVksS0FBSyxFQUFFO1FBQUNhLEtBQUssRUFBRXZMLG1CQUFtQixJQUFJQSxtQkFBbUIsQ0FBQzBCLEVBQUUsS0FBS1YsTUFBTSxDQUFDVSxFQUFFLEdBQUcsU0FBUyxHQUFHO01BQUk7SUFBRSxHQUU3R1YsTUFBTSxDQUFDc0UsS0FFUCxDQUVZLENBQUM7RUFDZixDQUFDLENBRUgsQ0FDUixDQUFDO0FBRVgsQ0FBQztBQUFDLElBQUFxSixRQUFBLEdBQUEvUSxPQUFBLENBQUFuQixPQUFBLEdBRWFvQyxpQkFBaUIiLCJpZ25vcmVMaXN0IjpbXX0=
858
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfVXRpbHMiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX1ZDRXZlbnRUeXBlIiwiX1ZDRXZlbnRNYW5hZ2VyIiwiX1ZDUm9vbVJlY29yZGVyIiwiX01lZGlhU291cEhlbHBlciIsIl9UcmFja3MiLCJfSWNvbkJ1dHRvbiIsIl9JY29uIiwiX2ljb25zTWF0ZXJpYWwiLCJfVG9vbHRpcCIsIl9tYXRlcmlhbCIsIl9Tb2NrZXRNYW5hZ2VyIiwiX0J1dHRvbiIsIl9BcHBsaWNhdGlvbk1hbmFnZXIiLCJfYXVkaW9MZXZlbE1ldGVyIiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwidCIsIldlYWtNYXAiLCJyIiwibiIsIm8iLCJpIiwiZiIsIl9fcHJvdG9fXyIsImhhcyIsImdldCIsInNldCIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiU1BFQUtJTkdfTEVWRUwiLCJWSURFT19DT0RFQ19PUFRJT05TIiwiZXhwb3J0cyIsInZpZGVvR29vZ2xlU3RhcnRCaXRyYXRlIiwiVklERU9fQ09OU1RSQUlOVFMiLCJhdWRpbyIsInZpZGVvIiwid2lkdGgiLCJtaW4iLCJpZGVhbCIsImhlaWdodCIsIlZJREVPX0VOQ09ESU5HUyIsInJpZCIsIm1heEJpdHJhdGUiLCJzY2FsYWJpbGl0eU1vZGUiLCJsb2NhdGlvbiIsIndpbmRvdyIsInByb3RvY29sIiwiaG9zdG5hbWUiLCJWQ1Jvb21QYXJ0aWNpcGFudCIsInByb3BzIiwiaGFuZFJhaXNlZCIsInNldEhhbmRSYWlzZWQiLCJSZWFjdCIsInVzZVN0YXRlIiwidmlkZW9NdXRlZCIsInNldFZpZGVvTXV0ZWQiLCJhdWRpb011dGVkIiwic2V0QXVkaW9NdXRlZCIsInByb2R1Y2VyVHJhbnNwb3J0Iiwic2V0UHJvZHVjZXJUcmFuc3BvcnQiLCJ2aWRlb1JlZnJlc2hlciIsInNldFZpZGVvUmVmcmVzaGVyIiwicHJvZHVjZXJzIiwiTWFwIiwiZmFpbGVkUHJvZHVjZXJzRHVlVG9OdWxsVHJhbnNwb3J0IiwiYXVkaW9EZXZpY2VzIiwic2V0QXVkaW9EZXZpY2VzIiwic2VsZWN0ZWRBdWRpb0RldmljZSIsInNldFNlbGVjdGVkQXVkaW9EZXZpY2UiLCJjb25zdW1lcnMiLCJzb3VuZExldmVsIiwic2V0U291bmRMZXZlbCIsImV2ZW50SGFuZGxlciIsInZpZGVvUmVmIiwidXNlUmVmIiwidmlkZW9TdHJlYW0iLCJhdWRpb1JlZiIsInRyYWNrcyIsIlRyYWNrcyIsInNvdW5kTGV2ZWxDb3VudGVyIiwibWV0ZXJzIiwidW5tb3VudGVkUmVmIiwic2hvd1ZpZGVvIiwiZGV2aWNlIiwicGFydGljaXBhbnRzIiwibnVtYmVyT2ZJblZpZXdQYXJ0aWNpcGFudHMiLCJhbmNob3JFbCIsInNldEFuY2hvckVsIiwib3Blbk1vcmVBY3Rpb25zIiwiQm9vbGVhbiIsImRvd25sb2FkVXJsIiwic2V0RG93bmxvYWRVcmwiLCJoYW5kbGVyIiwiaWQiLCJkYXRhIiwidXNlcklkIiwib24iLCJldmVudFR5cGUiLCJiZSIsIlZDRXZlbnRUeXBlIiwiQVVESU9fVklTVUFMX1NFVFRJTkdTX0NIQU5HRUQiLCJvbkFWU2V0dGluZ3NDaGFuZ2UiLCJwYXlsb2FkIiwiUkFJU0VfSEFORCIsIm9uUmFpc2VIYW5kIiwiTE9XRVJfSEFORCIsIm9uTG93ZXJIYW5kIiwiTkVXX1BST0RVQ0VSUyIsIm9uTmV3UHJvZHVjZXJzIiwiQ09OU1VNRVJfQ0xPU0VEIiwiY29uc3VtZXJJZCIsInJlbW92ZUNvbnN1bWVyIiwia2luZCIsIkFVRElPX0xFVkVMIiwibGV2ZWwiLCJoYW5kbGVDbGlja0RldmljZXNJY29uIiwiZXZlbnQiLCJjdXJyZW50VGFyZ2V0IiwiY2hhbmdlQXVkaW9EZXZpY2UiLCJ1c2VFZmZlY3QiLCJhcGkiLCJjdXJyZW50Iiwic3JjT2JqZWN0Iiwic291bmRNb25pdG9yIiwiaW5WaWV3IiwiaGFuZGxlQ2xvc2VEZXZpY2VNZW51IiwiaXNDdXJyZW50VXNlciIsInN0b3BQcm9kdWNpbmciLCJwcm9kdWNlIiwiVXRpbHMiLCJpc051bGwiLCJhdmF0YXJJZCIsImFwcGxpY2F0aW9uTWFuYWdlciIsImdldENvbnRleHRSb290Iiwic2Vzc2lvblN0b3JhZ2UiLCJnZXRJdGVtIiwib25BdWRpb0RldmljZUNoYW5nZSIsImNyZWF0ZVByb2R1Y2VyVHJhbnNwb3J0IiwiY29uc29sZSIsImxvZyIsInNwbGljZSIsImxlbmd0aCIsIm1lZGlhU291cEhlbHBlciIsImluaXRQcm9kdWNlclRyYW5zcG9ydCIsIm1lZXRpbmdJZCIsImdldFVzZXJEZXRhaWxzIiwidXNlcm5hbWUiLCJoYW5kbGVEZXZpY2VzQ2hhbmdlZCIsImRldmljZXMiLCJhdWRpb0RldmljZUxpc3QiLCJmb3JFYWNoIiwicHVzaCIsImRldmljZUlkIiwibGFiZWwiLCJ2Y0V2ZW50TWFuYWdlciIsInJlbW92ZVN1YnNjcmlwdGlvbnMiLCJhZGRTdWJzY3JpcHRpb25zIiwibmF2aWdhdG9yIiwibWVkaWFEZXZpY2VzIiwib25kZXZpY2VjaGFuZ2UiLCJlbnVtZXJhdGVEZXZpY2VzIiwidGhlbiIsImNvbnN1bWVGYWlsZWRQcm9kdWNlcnMiLCJrZXkiLCJ2YWx1ZSIsInN0b3AiLCJjbGVhciIsInN0YXJ0TWV0ZXIiLCJzdHJlYW0iLCJzdG9wTWV0ZXIiLCJzdGFydEF1ZGlvTGV2ZWxNZXRlciIsImZpcmVFdmVudCIsImRlbGV0ZSIsInR5cGUiLCJlcnJvciIsImNhblByb2R1Y2UiLCJtZWRpYUNvbnN0cmFpbnRzIiwiZ2V0VXNlck1lZGlhIiwidHJhY2siLCJnZXRBdWRpb1RyYWNrcyIsImdldFZpZGVvVHJhY2tzIiwicGFyYW1zIiwiaXNIb3N0IiwibWVkaWFSZWNvcmRlciIsImFkZFRyYWNrIiwic2V0QXVkaW9UcmFjayIsImVuY29kaW5ncyIsImNvZGVjT3B0aW9ucyIsInNldFZpZGVvVHJhY2siLCJwcm9kdWNlciIsImlzUnRwQ29sbGlzaW9uRXJyb3IiLCJTWVNURU1fQUxFUlQiLCJtZXNzYWdlIiwiUkVKT0lOX0FMRVJUX01FU1NBR0UiLCJnZXRTdGF0cyIsImdldFRyYWNrcyIsInNldFRpbWVvdXQiLCJjYWxsYmFjayIsInByb2R1Y2VySWQiLCJjbG9zZSIsInN0b3BWaWRlb1RyYWNrIiwic3RvcEF1ZGlvVHJhY2siLCJzb2NrZXRNYW5hZ2VyIiwiZW1pdEV2ZW50IiwiUFJPRFVDRVJfQ0xPU0VEIiwicm9vbUlkIiwiY2F0Y2giLCJsb2FkaW5nIiwiYXJndW1lbnRzIiwidW5kZWZpbmVkIiwiSlNPTiIsInN0cmluZ2lmeSIsInNjcmVlblNoYXJpbmciLCJjb25zdW1lIiwiYXVkaW9FbGVtZW50IiwiZG9jdW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsInJlbW92ZVRyYWNrIiwiZWxlbWVudEJ5SWQiLCJyZW1vdmVDaGlsZCIsInJldHJ5Q29uc3VtZSIsInJldHJpZXMiLCJ0cmFuc3BvcnQiLCJnZXRSZWN2VHJhbnNwb3J0IiwiRXJyb3IiLCJnZXRDb25zdW1lU3RyZWFtIiwicnRwQ2FwYWJpbGl0aWVzIiwiX3JlZiIsImNvbnN1bWVyIiwiY3JlYXRlRWxlbWVudCIsInBsYXlzaW5saW5lIiwiYXV0b3BsYXkiLCJhcHBlbmRDaGlsZCIsInRyYWNrRW5kZWRQYXJ0aWNpcGFudCIsImZpbmQiLCJwIiwiZ2V0UGFydGljaXBhbnROYW1lIiwibmFtZSIsImNvbmNhdCIsIkZyYWdtZW50IiwiY2xhc3NOYW1lIiwic3R5bGUiLCJwYWRkaW5nIiwicG9zaXRpb24iLCJib3JkZXJSYWRpdXMiLCJvdmVyZmxvdyIsImJveFNpemluZyIsImJhY2tncm91bmRDb2xvciIsImJvcmRlciIsImdldEFwcGxpY2F0aW9uUHJpbWFyeUNvbG9yIiwiYm94U2hhZG93IiwidHJhbnNpdGlvbiIsIm1hcmdpbkJvdHRvbSIsInNpemluZyIsImNvbG9yIiwiZm9udFNpemUiLCJiYWNrZ3JvdW5kUmVwZWF0IiwiYmFja2dyb3VuZFNpemUiLCJiYWNrZ3JvdW5kUG9zaXRpb24iLCJiYWNrZ3JvdW5kSW1hZ2UiLCJnZXRJbml0aWFscyIsImF1dG9QbGF5IiwicmVmIiwibXV0ZWQiLCJvYmplY3RGaXQiLCJ0cmFuc2Zvcm0iLCJ6SW5kZXgiLCJkaXNwbGF5IiwibGVmdCIsImJvdHRvbSIsImFsaWduSXRlbXMiLCJnYXAiLCJtYXhXaWR0aCIsImZvbnRXZWlnaHQiLCJsaW5lSGVpZ2h0Iiwid2hpdGVTcGFjZSIsInRleHRPdmVyZmxvdyIsIm1hcmdpbkxlZnQiLCJtYXJnaW5SaWdodCIsImp1c3RpZnlDb250ZW50Iiwib25DbGljayIsIm9uSG9zdEF1ZGlvTXV0ZSIsIm9uSG9zdFZpZGVvTXV0ZSIsInRpdGxlIiwiUGFuVG9vbCIsIk1lbnUiLCJvcGVuIiwib25DbG9zZSIsIlBhcGVyUHJvcHMiLCJlbGV2YXRpb24iLCJzeCIsImZpbHRlciIsIm10IiwibWwiLCJtciIsImNvbnRlbnQiLCJ0b3AiLCJyaWdodCIsImJnY29sb3IiLCJ0cmFuc2Zvcm1PcmlnaW4iLCJob3Jpem9udGFsIiwidmVydGljYWwiLCJhbmNob3JPcmlnaW4iLCJtYXAiLCJpbmRleCIsIk1lbnVJdGVtIiwiX2RlZmF1bHQiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvbWVkaWEvVkNSb29tUGFydGljaXBhbnQuanN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwcyAqL1xuaW1wb3J0IFJlYWN0LCB7dXNlRWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgJy4vVkNSb29tUGFydGljaXBhbnQuY3NzJztcbmltcG9ydCBVdGlscyBmcm9tICcuLi8uLi9VdGlscyc7XG5pbXBvcnQge1ZDRXZlbnRUeXBlfSBmcm9tICcuL1ZDRXZlbnRUeXBlJztcbmltcG9ydCB2Y0V2ZW50TWFuYWdlciBmcm9tICcuL1ZDRXZlbnRNYW5hZ2VyJztcbmltcG9ydCBtZWRpYVJlY29yZGVyIGZyb20gJy4vVkNSb29tUmVjb3JkZXInO1xuaW1wb3J0IG1lZGlhU291cEhlbHBlciwge2lzUnRwQ29sbGlzaW9uRXJyb3IsIFJFSk9JTl9BTEVSVF9NRVNTQUdFfSBmcm9tICcuL01lZGlhU291cEhlbHBlcic7XG5pbXBvcnQgVHJhY2tzIGZyb20gJy4vVHJhY2tzJztcbmltcG9ydCBJY29uQnV0dG9uIGZyb20gJ0BtdWkvbWF0ZXJpYWwvSWNvbkJ1dHRvbic7XG5pbXBvcnQgSWNvbiBmcm9tICcuLi9JY29uJztcbmltcG9ydCB7UGFuVG9vbH0gZnJvbSAnQG11aS9pY29ucy1tYXRlcmlhbCc7XG5pbXBvcnQgVG9vbHRpcCBmcm9tICdAbXVpL21hdGVyaWFsL1Rvb2x0aXAnO1xuaW1wb3J0IHtNZW51LCBNZW51SXRlbX0gZnJvbSAnQG11aS9tYXRlcmlhbCc7XG5pbXBvcnQgc29ja2V0TWFuYWdlciBmcm9tICcuLi9Tb2NrZXRNYW5hZ2VyJztcbmltcG9ydCBCdXR0b24gZnJvbSAnQG11aS9tYXRlcmlhbC9CdXR0b24nO1xuaW1wb3J0IGFwcGxpY2F0aW9uTWFuYWdlciBmcm9tICcuLi8uLi9BcHBsaWNhdGlvbk1hbmFnZXInO1xuaW1wb3J0IHtzdGFydEF1ZGlvTGV2ZWxNZXRlcn0gZnJvbSAnLi9hdWRpb0xldmVsTWV0ZXInO1xuXG5jb25zdCBTUEVBS0lOR19MRVZFTCA9IDY7XG5cbmV4cG9ydCBjb25zdCBWSURFT19DT0RFQ19PUFRJT05TID0ge1xuICAgIHZpZGVvR29vZ2xlU3RhcnRCaXRyYXRlOiAxMDAwXG59O1xuXG5leHBvcnQgY29uc3QgVklERU9fQ09OU1RSQUlOVFMgPSB7XG4gICAgYXVkaW86IGZhbHNlLFxuICAgIHZpZGVvOiB7XG4gICAgICAgIHdpZHRoOiB7XG4gICAgICAgICAgICBtaW46IDY0MCxcbiAgICAgICAgICAgIGlkZWFsOiAxOTIwXG4gICAgICAgIH0sXG4gICAgICAgIGhlaWdodDoge1xuICAgICAgICAgICAgbWluOiA0MDAsXG4gICAgICAgICAgICBpZGVhbDogMTA4MFxuICAgICAgICB9XG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IFZJREVPX0VOQ09ESU5HUyA9IFtcbiAgICB7XG4gICAgICAgIHJpZDogJ3IwJyxcbiAgICAgICAgbWF4Qml0cmF0ZTogMjAwMDAsXG4gICAgICAgIC8vc2NhbGVSZXNvbHV0aW9uRG93bkJ5OiAxMC4wLFxuICAgICAgICBzY2FsYWJpbGl0eU1vZGU6ICdTMVQzJ1xuICAgIH0sXG4gICAge1xuICAgICAgICByaWQ6ICdyMScsXG4gICAgICAgIG1heEJpdHJhdGU6IDE1MDAwMCxcbiAgICAgICAgc2NhbGFiaWxpdHlNb2RlOiAnUzFUMydcbiAgICB9LFxuICAgIHtcbiAgICAgICAgcmlkOiAncjInLFxuICAgICAgICBtYXhCaXRyYXRlOiA0NTAwMDAsXG4gICAgICAgIHNjYWxhYmlsaXR5TW9kZTogJ1MxVDMnXG4gICAgfVxuXTtcblxuY29uc3QgbG9jYXRpb24gPSB3aW5kb3cubG9jYXRpb24ucHJvdG9jb2wgKyAnLy8nICsgd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lO1xuY29uc3QgVkNSb29tUGFydGljaXBhbnQgPSAocHJvcHMpID0+IHtcbiAgICBjb25zdCBbaGFuZFJhaXNlZCwgc2V0SGFuZFJhaXNlZF0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gICAgY29uc3QgW3ZpZGVvTXV0ZWQsIHNldFZpZGVvTXV0ZWRdID0gUmVhY3QudXNlU3RhdGUocHJvcHMudmlkZW9NdXRlZCk7XG4gICAgY29uc3QgW2F1ZGlvTXV0ZWQsIHNldEF1ZGlvTXV0ZWRdID0gUmVhY3QudXNlU3RhdGUocHJvcHMuYXVkaW9NdXRlZCk7XG4gICAgY29uc3QgW3Byb2R1Y2VyVHJhbnNwb3J0LCBzZXRQcm9kdWNlclRyYW5zcG9ydF0gPSBSZWFjdC51c2VTdGF0ZShwcm9wcy5wcm9kdWNlclRyYW5zcG9ydCk7XG4gICAgY29uc3QgW3ZpZGVvUmVmcmVzaGVyLCBzZXRWaWRlb1JlZnJlc2hlcl0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gICAgY29uc3QgW3Byb2R1Y2Vyc10gPSBSZWFjdC51c2VTdGF0ZShuZXcgTWFwKCkpO1xuICAgIGNvbnN0IFtmYWlsZWRQcm9kdWNlcnNEdWVUb051bGxUcmFuc3BvcnRdID0gUmVhY3QudXNlU3RhdGUoW10pO1xuICAgIGNvbnN0IFthdWRpb0RldmljZXMsIHNldEF1ZGlvRGV2aWNlc10gPSBSZWFjdC51c2VTdGF0ZShbXSk7XG4gICAgY29uc3QgW3NlbGVjdGVkQXVkaW9EZXZpY2UsIHNldFNlbGVjdGVkQXVkaW9EZXZpY2VdID0gUmVhY3QudXNlU3RhdGUobnVsbCk7XG4gICAgY29uc3QgW2NvbnN1bWVyc10gPSBSZWFjdC51c2VTdGF0ZShuZXcgTWFwKCkpO1xuICAgIGNvbnN0IFtzb3VuZExldmVsLCBzZXRTb3VuZExldmVsXSA9IFJlYWN0LnVzZVN0YXRlKDApO1xuICAgIGNvbnN0IFtldmVudEhhbmRsZXJdID0gdXNlU3RhdGUoe30pO1xuICAgIGNvbnN0IHZpZGVvUmVmID0gdXNlUmVmKCk7XG4gICAgY29uc3QgdmlkZW9TdHJlYW0gPSB1c2VSZWYoKTtcbiAgICBjb25zdCBhdWRpb1JlZiA9IHVzZVJlZigpO1xuICAgIGNvbnN0IHRyYWNrcyA9IHVzZVJlZihuZXcgVHJhY2tzKCkpO1xuICAgIGNvbnN0IHNvdW5kTGV2ZWxDb3VudGVyID0gdXNlUmVmKDApO1xuICAgIC8vIEFjdGl2ZS1zcGVha2VyIG1ldGVyczogdGhpcyAoc2VsZikgdGlsZSBpcyB0aGUgYXVkaW8gaHViIOKAlCBpdCBjb25zdW1lc1xuICAgIC8vIGV2ZXJ5IHBhcnRpY2lwYW50J3MgYXVkaW8gKyBwcm9kdWNlcyB0aGUgbG9jYWwgbWljIOKAlCBzbyBpdCBydW5zIHRoZSBsZXZlbFxuICAgIC8vIG1ldGVycyBhbmQgYnJvYWRjYXN0cyB7dXNlcklkLCBsZXZlbH0gZm9yIGVhY2ggdGlsZSB0byBoaWdobGlnaHQgaXRzZWxmLlxuICAgIGNvbnN0IG1ldGVycyA9IHVzZVJlZihuZXcgTWFwKCkpO1xuICAgIC8vIFNldCBvbiB1bm1vdW50IHNvIHRoZSByZWN1cnNpdmUgY29uc3VtZS9yZXRyeSBzZXRUaW1lb3V0IGxvb3BzIHN0b3BcbiAgICAvLyByZS1zY2hlZHVsaW5nIChvdGhlcndpc2UgdGhleSBwb2xsL3JldHJ5IGZvcmV2ZXIgYWZ0ZXIgdGhlIHRpbGUgaXMgZ29uZSkuXG4gICAgY29uc3QgdW5tb3VudGVkUmVmID0gdXNlUmVmKGZhbHNlKTtcbiAgICBjb25zdCBzaG93VmlkZW8gPSB0cnVlO1xuICAgIGNvbnN0IHtcbiAgICAgICAgZGV2aWNlLFxuICAgICAgICBwYXJ0aWNpcGFudHNcbiAgICB9ID0gcHJvcHM7XG4gICAgY29uc3Qge251bWJlck9mSW5WaWV3UGFydGljaXBhbnRzfSA9IHByb3BzO1xuICAgIGNvbnN0IFthbmNob3JFbCwgc2V0QW5jaG9yRWxdID0gdXNlU3RhdGUobnVsbCk7XG4gICAgY29uc3Qgb3Blbk1vcmVBY3Rpb25zID0gQm9vbGVhbihhbmNob3JFbCk7XG5cbiAgICBjb25zdCBbZG93bmxvYWRVcmwsIHNldERvd25sb2FkVXJsXSA9IHVzZVN0YXRlKG51bGwpO1xuXG4gICAgY29uc3QgaGFuZGxlciA9ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGdldCBpZCgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ21lZXRpbmctcGFydGljaXBhbnQtJyArIHByb3BzLmRhdGEudXNlcklkO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uOiAoZXZlbnRUeXBlLCBiZSkgPT4ge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoZXZlbnRUeXBlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgVkNFdmVudFR5cGUuQVVESU9fVklTVUFMX1NFVFRJTkdTX0NIQU5HRUQ6XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkFWU2V0dGluZ3NDaGFuZ2UoYmUucGF5bG9hZCA/IGJlLnBheWxvYWQgOiBiZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBWQ0V2ZW50VHlwZS5SQUlTRV9IQU5EOlxuICAgICAgICAgICAgICAgICAgICAgICAgb25SYWlzZUhhbmQoYmUucGF5bG9hZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBWQ0V2ZW50VHlwZS5MT1dFUl9IQU5EOlxuICAgICAgICAgICAgICAgICAgICAgICAgb25Mb3dlckhhbmQoYmUucGF5bG9hZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBWQ0V2ZW50VHlwZS5ORVdfUFJPRFVDRVJTOlxuICAgICAgICAgICAgICAgICAgICAgICAgb25OZXdQcm9kdWNlcnMoYmUucGF5bG9hZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBWQ0V2ZW50VHlwZS5DT05TVU1FUl9DTE9TRUQ6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uc3VtZXJzLmhhcyhiZS5wYXlsb2FkLmNvbnN1bWVySWQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlQ29uc3VtZXIoYmUucGF5bG9hZC5jb25zdW1lcklkLCBiZS5wYXlsb2FkLmtpbmQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgVkNFdmVudFR5cGUuQVVESU9fTEVWRUw6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYmUucGF5bG9hZCAmJiBiZS5wYXlsb2FkLnVzZXJJZCA9PT0gcHJvcHMuZGF0YS51c2VySWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRTb3VuZExldmVsKGJlLnBheWxvYWQubGV2ZWwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBoYW5kbGVDbGlja0RldmljZXNJY29uID0gKGV2ZW50KSA9PiB7XG4gICAgICAgIHNldEFuY2hvckVsKGV2ZW50LmN1cnJlbnRUYXJnZXQpO1xuICAgIH07XG5cbiAgICBjb25zdCBjaGFuZ2VBdWRpb0RldmljZSA9IChkZXZpY2UpID0+IHtcbiAgICAgICAgc2V0U2VsZWN0ZWRBdWRpb0RldmljZShkZXZpY2UpO1xuICAgIH07XG5cbiAgICBjb25zdCBvblJhaXNlSGFuZCA9IChwYXlsb2FkKSA9PiB7XG4gICAgICAgIGlmIChwYXlsb2FkICYmIHBheWxvYWQudXNlcklkID09PSBwcm9wcy5kYXRhLnVzZXJJZCkge1xuICAgICAgICAgICAgc2V0SGFuZFJhaXNlZCh0cnVlKTtcbiAgICAgICAgICAgIHByb3BzLmRhdGEuaGFuZFJhaXNlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3Qgb25Mb3dlckhhbmQgPSAocGF5bG9hZCkgPT4ge1xuICAgICAgICBpZiAocGF5bG9hZCAmJiBwYXlsb2FkLnVzZXJJZCA9PT0gcHJvcHMuZGF0YS51c2VySWQpIHtcbiAgICAgICAgICAgIHNldEhhbmRSYWlzZWQoZmFsc2UpO1xuICAgICAgICAgICAgcHJvcHMuZGF0YS5oYW5kUmFpc2VkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgZXZlbnRIYW5kbGVyLmFwaSA9IGhhbmRsZXIoKTtcbiAgICB9KTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmICh2aWRlb1JlZi5jdXJyZW50ICYmIHZpZGVvU3RyZWFtLmN1cnJlbnQpIHtcbiAgICAgICAgICAgIHZpZGVvUmVmLmN1cnJlbnQuc3JjT2JqZWN0ID0gdmlkZW9TdHJlYW0uY3VycmVudDtcbiAgICAgICAgfVxuICAgIH0sIFt2aWRlb1JlZi5jdXJyZW50XSk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAocHJvcHMuc291bmRNb25pdG9yICYmICFwcm9wcy5pblZpZXcpIHtcbiAgICAgICAgICAgIGlmIChzb3VuZExldmVsID4gMykge1xuICAgICAgICAgICAgICAgIHNvdW5kTGV2ZWxDb3VudGVyLmN1cnJlbnQgPSAxMDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc291bmRMZXZlbENvdW50ZXIuY3VycmVudCA+IDApIHtcbiAgICAgICAgICAgICAgICBzb3VuZExldmVsQ291bnRlci5jdXJyZW50LS07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHByb3BzLnNvdW5kTW9uaXRvcihwcm9wcy5kYXRhLnVzZXJJZCwgc291bmRMZXZlbENvdW50ZXIuY3VycmVudCA9PT0gMCB8fCBhdWRpb011dGVkKTtcbiAgICAgICAgfVxuICAgIH0sIFtzb3VuZExldmVsXSk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAoYXVkaW9NdXRlZCkge1xuICAgICAgICAgICAgc2V0U291bmRMZXZlbCgwKTtcbiAgICAgICAgICAgIGlmIChwcm9wcy5zb3VuZE1vbml0b3IgJiYgIXByb3BzLmluVmlldykge1xuICAgICAgICAgICAgICAgIHByb3BzLnNvdW5kTW9uaXRvcihwcm9wcy5kYXRhLnVzZXJJZCwgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LCBbYXVkaW9NdXRlZF0pO1xuXG4gICAgY29uc3QgaGFuZGxlQ2xvc2VEZXZpY2VNZW51ID0gKCkgPT4ge1xuICAgICAgICBzZXRBbmNob3JFbChudWxsKTtcbiAgICB9O1xuXG4gICAgY29uc3Qgb25BVlNldHRpbmdzQ2hhbmdlID0gKHBheWxvYWQpID0+IHtcbiAgICAgICAgaWYgKHByb3BzLmRhdGEudXNlcklkID09PSBwYXlsb2FkLnVzZXJJZCkge1xuICAgICAgICAgICAgaWYgKHByb3BzLmlzQ3VycmVudFVzZXIpIHtcbiAgICAgICAgICAgICAgICAvLyBUaGUgaWNvbiBtdXN0IHJlZmxlY3QgdGhlIEFDVFVBTCBwcm9kdWNlciwgbm90IHRoZSByZXF1ZXN0ZWQgc3RhdGU6XG4gICAgICAgICAgICAgICAgLy8gLSBtdXRlOiBmbGlwIHRoZSBpY29uIG9ubHkgb25jZSBzdG9wUHJvZHVjaW5nIGNvbmZpcm1zIHRoZSBwcm9kdWNlciBpc1xuICAgICAgICAgICAgICAgIC8vICAgY2xvc2VkIGFuZCB0aGUgdHJhY2sgc3RvcHBlZCAoaXRzIHN1Y2Nlc3MgY2FsbGJhY2spIOKAlCBzbyB3ZSBuZXZlciBzaG93XG4gICAgICAgICAgICAgICAgLy8gICBcIm11dGVkXCIgd2hpbGUgYXVkaW8gaXMgc3RpbGwgZ29pbmcgb3V0LlxuICAgICAgICAgICAgICAgIC8vIC0gdW5tdXRlOiBwcm9kdWNlKCkgZmxpcHMgdGhlIGljb24gb2ZmIG9ubHkgYWZ0ZXIgdGhlIHByb2R1Y2VyIGlzIGNyZWF0ZWQuXG4gICAgICAgICAgICAgICAgaWYgKHBheWxvYWQuYXVkaW9NdXRlZCkge1xuICAgICAgICAgICAgICAgICAgICBzdG9wUHJvZHVjaW5nKCdhdWRpbycsICgpID0+IHNldEF1ZGlvTXV0ZWQodHJ1ZSkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGV2aWNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHByb2R1Y2UoJ2F1ZGlvJyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHBheWxvYWQudmlkZW9NdXRlZCkge1xuICAgICAgICAgICAgICAgICAgICBzdG9wUHJvZHVjaW5nKCd2aWRlbycsICgpID0+IHNldFZpZGVvTXV0ZWQodHJ1ZSkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGV2aWNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHByb2R1Y2UoJ3ZpZGVvJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzZXRBdWRpb011dGVkKHBheWxvYWQuYXVkaW9NdXRlZCk7XG4gICAgICAgICAgICAgICAgc2V0VmlkZW9NdXRlZChwYXlsb2FkLnZpZGVvTXV0ZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmIChwcm9wcy5kYXRhICYmICFVdGlscy5pc051bGwocHJvcHMuZGF0YS5hdmF0YXJJZClcbiAgICAgICAgICAgICYmIHByb3BzLmRhdGEuYXZhdGFySWQgIT09ICd1bmRlZmluZWQnICYmIHByb3BzLmRhdGEuYXZhdGFySWQgIT09ICdudWxsJykge1xuICAgICAgICAgICAgc2V0RG93bmxvYWRVcmwobG9jYXRpb24gKyBhcHBsaWNhdGlvbk1hbmFnZXIuZ2V0Q29udGV4dFJvb3QoKSArICcvZG9jcy9hcGkvdjEvbWFuYWdlci9kb3dubG9hZC8nICsgcHJvcHMuZGF0YS5hdmF0YXJJZCArXG4gICAgICAgICAgICAgICAgJz9hY2Nlc3NfdG9rZW49JyArIHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ2FjY2Vzc1Rva2VuJykgKyAnJmlkVG9rZW49JyArIHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ2lkVG9rZW4nKSk7XG4gICAgICAgIH1cbiAgICB9LCBbcHJvcHMuZGF0YV0pO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgLy8gUmVtb3RlIHRpbGVzIHJlZmxlY3QgdGhlIHBlZXIncyByZXBvcnRlZCBzdGF0ZS4gVGhlIENVUlJFTlQgdXNlcidzIGljb24gaXMgTk9UXG4gICAgICAgIC8vIHN5bmNlZCBmcm9tIHByb3BzIOKAlCBpdCBpcyBkcml2ZW4gb25seSBieSB0aGUgYWN0dWFsIHByb2R1Y2VyIChtdXRlIHNob3dzIG9uY2UgdGhlXG4gICAgICAgIC8vIHByb2R1Y2VyIGlzIGNvbmZpcm1lZCBzdG9wcGVkOyB1bm11dGUgb25jZSBwcm9kdWNlKCkgc3VjY2VlZHMpLCBzbyB0aGUgaWNvbiBjYW5cbiAgICAgICAgLy8gbmV2ZXIgY2xhaW0gXCJtdXRlZFwiIHdoaWxlIGF1ZGlvIGlzIHN0aWxsIGJlaW5nIHByb2R1Y2VkLlxuICAgICAgICBpZiAoIXByb3BzLmlzQ3VycmVudFVzZXIpIHtcbiAgICAgICAgICAgIHNldEF1ZGlvTXV0ZWQocHJvcHMuYXVkaW9NdXRlZCk7XG4gICAgICAgIH1cbiAgICB9LCBbcHJvcHMuYXVkaW9NdXRlZF0pO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKCFwcm9wcy5pc0N1cnJlbnRVc2VyKSB7XG4gICAgICAgICAgICBzZXRWaWRlb011dGVkKHByb3BzLnZpZGVvTXV0ZWQpO1xuICAgICAgICB9XG4gICAgfSwgW3Byb3BzLnZpZGVvTXV0ZWRdKTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmIChwcm9kdWNlclRyYW5zcG9ydCkge1xuICAgICAgICAgICAgLy8gQSAocmUpYXNzaWduZWQgdHJhbnNwb3J0IG1lYW5zIGV4aXN0aW5nIHByb2R1Y2VycyBsaXZlZCBvbiB0aGUgb2xkXG4gICAgICAgICAgICAvLyAobm93LWNsb3NlZCkgdHJhbnNwb3J0LiBUZWFyIHRoZW0gZG93biBwcm9wZXJseSDigJQgY2xvc2UgKyBzdG9wIHRoZVxuICAgICAgICAgICAgLy8gbG9jYWwgdHJhY2tzICsgbm90aWZ5IHRoZSBzZXJ2ZXIg4oCUIHNvIHByb2R1Y2UoKSByZWNyZWF0ZXMgdGhlbSBvbiB0aGVcbiAgICAgICAgICAgIC8vIG5ldyB0cmFuc3BvcnQgaW5zdGVhZCBvZiBlYXJseS1yZXR1cm5pbmcuIE5vLW9wIG9uIGZpcnN0IG1vdW50LlxuICAgICAgICAgICAgc3RvcFByb2R1Y2luZygndmlkZW8nKTtcbiAgICAgICAgICAgIHN0b3BQcm9kdWNpbmcoJ2F1ZGlvJyk7XG5cbiAgICAgICAgICAgIGlmICghcHJvcHMudmlkZW9NdXRlZCkge1xuICAgICAgICAgICAgICAgIHByb2R1Y2UoJ3ZpZGVvJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXByb3BzLmF1ZGlvTXV0ZWQpIHtcbiAgICAgICAgICAgICAgICBwcm9kdWNlKCdhdWRpbycpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSwgW3Byb2R1Y2VyVHJhbnNwb3J0XSk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBzZXRQcm9kdWNlclRyYW5zcG9ydChwcm9wcy5wcm9kdWNlclRyYW5zcG9ydCk7XG4gICAgfSwgW3Byb3BzLnByb2R1Y2VyVHJhbnNwb3J0XSk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAocHJvcHMuaXNDdXJyZW50VXNlcikge1xuICAgICAgICAgICAgcHJvcHMub25BdWRpb0RldmljZUNoYW5nZShzZWxlY3RlZEF1ZGlvRGV2aWNlKTtcbiAgICAgICAgICAgIHN0b3BQcm9kdWNpbmcoJ2F1ZGlvJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChzZWxlY3RlZEF1ZGlvRGV2aWNlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghcHJvZHVjZXJUcmFuc3BvcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZVByb2R1Y2VyVHJhbnNwb3J0KCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIWF1ZGlvTXV0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y2UoJ2F1ZGlvJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH0sIFtzZWxlY3RlZEF1ZGlvRGV2aWNlXSk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICAvLyBPbmNlIHRoZSBEZXZpY2UgaXMgcmVhZHksIGNvbnN1bWUgdGhlIHByb2R1Y2VycyB3ZSBhbHJlYWR5IGtub3cgYWJvdXRcbiAgICAgICAgLy8gYW5kIHJlcGxheSBhbnkgdGhhdCBhcnJpdmVkIGJlZm9yZSB3ZSB3ZXJlIHJlYWR5LiBSZWN2IHRyYW5zcG9ydHNcbiAgICAgICAgLy8gdGhlbXNlbHZlcyBhcmUgY3JlYXRlZCBqdXN0LWluLXRpbWUgaW5zaWRlIGNvbnN1bWUoKSAocGVyIGtpbmQpLCBzbyB0aGVcbiAgICAgICAgLy8gdHJpZ2dlciBoZXJlIGlzIHRoZSBEZXZpY2UsIG5vdCBhIHRyYW5zcG9ydC5cbiAgICAgICAgaWYgKGRldmljZSkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ0RFVklDRSBSRUFEWSBXSVRIIFBST0RVQ0VSUyA6ICcsIHByb3BzLmRhdGEucHJvZHVjZXJzKTtcbiAgICAgICAgICAgIGlmIChwcm9wcy5kYXRhLnByb2R1Y2Vycykge1xuICAgICAgICAgICAgICAgIG9uTmV3UHJvZHVjZXJzKHByb3BzLmRhdGEucHJvZHVjZXJzLCB0cnVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgb25OZXdQcm9kdWNlcnMoZmFpbGVkUHJvZHVjZXJzRHVlVG9OdWxsVHJhbnNwb3J0LCB0cnVlKTtcbiAgICAgICAgICAgIGZhaWxlZFByb2R1Y2Vyc0R1ZVRvTnVsbFRyYW5zcG9ydC5zcGxpY2UoMCwgZmFpbGVkUHJvZHVjZXJzRHVlVG9OdWxsVHJhbnNwb3J0Lmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICB9LCBbZGV2aWNlXSk7XG5cbiAgICBjb25zdCBjcmVhdGVQcm9kdWNlclRyYW5zcG9ydCA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgc2V0UHJvZHVjZXJUcmFuc3BvcnQoYXdhaXQgbWVkaWFTb3VwSGVscGVyLmluaXRQcm9kdWNlclRyYW5zcG9ydChwcm9wcy5kZXZpY2UsIHByb3BzLm1lZXRpbmdJZCxcbiAgICAgICAgICAgIGFwcGxpY2F0aW9uTWFuYWdlci5nZXRVc2VyRGV0YWlscygpLnVzZXJuYW1lKSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGhhbmRsZURldmljZXNDaGFuZ2VkID0gKGRldmljZXMpID0+IHtcbiAgICAgICAgbGV0IGF1ZGlvRGV2aWNlTGlzdCA9IFtdO1xuICAgICAgICBkZXZpY2VzLmZvckVhY2goKGRldmljZSkgPT4ge1xuICAgICAgICAgICAgaWYgKCdhdWRpb2lucHV0JyA9PT0gZGV2aWNlLmtpbmQpIHtcbiAgICAgICAgICAgICAgICBhdWRpb0RldmljZUxpc3QucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIGlkOiBkZXZpY2UuZGV2aWNlSWQsXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiBkZXZpY2UubGFiZWxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgc2V0QXVkaW9EZXZpY2VzKGF1ZGlvRGV2aWNlTGlzdCk7XG5cbiAgICAgICAgaWYgKGF1ZGlvRGV2aWNlTGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBzZXRTZWxlY3RlZEF1ZGlvRGV2aWNlKGF1ZGlvRGV2aWNlTGlzdFswXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZXRTZWxlY3RlZEF1ZGlvRGV2aWNlKG51bGwpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIHZjRXZlbnRNYW5hZ2VyLnJlbW92ZVN1YnNjcmlwdGlvbnMoZXZlbnRIYW5kbGVyKTtcbiAgICAgICAgdmNFdmVudE1hbmFnZXIuYWRkU3Vic2NyaXB0aW9ucyhldmVudEhhbmRsZXIsIFZDRXZlbnRUeXBlLkFVRElPX1ZJU1VBTF9TRVRUSU5HU19DSEFOR0VELFxuICAgICAgICAgICAgVkNFdmVudFR5cGUuUkFJU0VfSEFORCwgVkNFdmVudFR5cGUuTE9XRVJfSEFORCwgVkNFdmVudFR5cGUuTkVXX1BST0RVQ0VSUywgVkNFdmVudFR5cGUuQ09OU1VNRVJfQ0xPU0VELFxuICAgICAgICAgICAgVkNFdmVudFR5cGUuQVVESU9fTEVWRUwpO1xuXG4gICAgICAgIGlmIChwcm9wcy5pc0N1cnJlbnRVc2VyKSB7XG4gICAgICAgICAgICBuYXZpZ2F0b3IubWVkaWFEZXZpY2VzLm9uZGV2aWNlY2hhbmdlID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIG5hdmlnYXRvci5tZWRpYURldmljZXMuZW51bWVyYXRlRGV2aWNlcygpXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKChkZXZpY2VzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlRGV2aWNlc0NoYW5nZWQoZGV2aWNlcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBuYXZpZ2F0b3IubWVkaWFEZXZpY2VzLmVudW1lcmF0ZURldmljZXMoKVxuICAgICAgICAgICAgICAgIC50aGVuKChkZXZpY2VzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVEZXZpY2VzQ2hhbmdlZChkZXZpY2VzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJvcHMuaXNDdXJyZW50VXNlcikge1xuICAgICAgICAgICAgY29uc3VtZUZhaWxlZFByb2R1Y2VycygpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCc9PT09PT09PT09PT09PT09PT09PT09REVTVFJPWUlORyBQQVJUSUNJUEFOVD09PT09PT09PT09PT09PT09PT09PT09PT0gOiAnICsgcHJvcHMuZGF0YS51c2VySWQpO1xuICAgICAgICAgICAgdW5tb3VudGVkUmVmLmN1cnJlbnQgPSB0cnVlO1xuXG4gICAgICAgICAgICBpZiAocHJvcHMuaXNDdXJyZW50VXNlcikge1xuICAgICAgICAgICAgICAgIC8vIFJlbGVhc2UgdGhlIGdsb2JhbCBkZXZpY2VjaGFuZ2UgaGFuZGxlciB0aGlzIGNvbXBvbmVudCBpbnN0YWxsZWQg4oCUXG4gICAgICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIGl0IHN1cnZpdmVzIHVubW91bnQgYW5kIGZpcmVzIGludG8gc3RhbGUgY29tcG9uZW50IHN0YXRlLlxuICAgICAgICAgICAgICAgIG5hdmlnYXRvci5tZWRpYURldmljZXMub25kZXZpY2VjaGFuZ2UgPSBudWxsO1xuICAgICAgICAgICAgICAgIHN0b3BQcm9kdWNpbmcoJ2F1ZGlvJyk7XG4gICAgICAgICAgICAgICAgc3RvcFByb2R1Y2luZygndmlkZW8nKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChsZXQgW2tleSwgdmFsdWVdIG9mIGNvbnN1bWVycykge1xuICAgICAgICAgICAgICAgIHJlbW92ZUNvbnN1bWVyKGtleSwgJ3ZpZGVvJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFN0b3AgZXZlcnkgYXVkaW8tbGV2ZWwgbWV0ZXIgKHNlbGYgbWljICsgYWxsIGNvbnN1bWVkIHN0cmVhbXMpLlxuICAgICAgICAgICAgbWV0ZXJzLmN1cnJlbnQuZm9yRWFjaCgoc3RvcCkgPT4gc3RvcCgpKTtcbiAgICAgICAgICAgIG1ldGVycy5jdXJyZW50LmNsZWFyKCk7XG5cbiAgICAgICAgICAgIHZjRXZlbnRNYW5hZ2VyLnJlbW92ZVN1YnNjcmlwdGlvbnMoZXZlbnRIYW5kbGVyKTtcbiAgICAgICAgfTtcbiAgICB9LCBbXSk7XG5cbiAgICAvLyBNZXRlciBhIHN0cmVhbSBhbmQgYnJvYWRjYXN0IGl0cyBsZXZlbCB1bmRlciBgdXNlcklkYC4gS2V5ZWQgc28gd2UgY2FuXG4gICAgLy8gc3RvcC9yZXBsYWNlIGl0IHdoZW4gdGhlIGNvbnN1bWVyIGNsb3NlcyBvciB0aGUgcHJvZHVjZXIgcmVzdGFydHMuXG4gICAgY29uc3Qgc3RhcnRNZXRlciA9IChrZXksIHN0cmVhbSwgdXNlcklkKSA9PiB7XG4gICAgICAgIHN0b3BNZXRlcihrZXkpO1xuICAgICAgICBjb25zdCBzdG9wID0gc3RhcnRBdWRpb0xldmVsTWV0ZXIoc3RyZWFtLCAobGV2ZWwpID0+IHtcbiAgICAgICAgICAgIHZjRXZlbnRNYW5hZ2VyLmZpcmVFdmVudChWQ0V2ZW50VHlwZS5BVURJT19MRVZFTCwge3BheWxvYWQ6IHt1c2VySWQsIGxldmVsfX0pO1xuICAgICAgICB9KTtcbiAgICAgICAgbWV0ZXJzLmN1cnJlbnQuc2V0KGtleSwgc3RvcCk7XG4gICAgfTtcblxuICAgIGNvbnN0IHN0b3BNZXRlciA9IChrZXkpID0+IHtcbiAgICAgICAgY29uc3Qgc3RvcCA9IG1ldGVycy5jdXJyZW50LmdldChrZXkpO1xuICAgICAgICBpZiAoc3RvcCkge1xuICAgICAgICAgICAgc3RvcCgpO1xuICAgICAgICAgICAgbWV0ZXJzLmN1cnJlbnQuZGVsZXRlKGtleSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgcHJvZHVjZSA9IGFzeW5jICh0eXBlKSA9PiB7XG4gICAgICAgIGlmICghZGV2aWNlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdObyBhdmFpbGFibGUgZGV2aWNlJyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWRldmljZS5jYW5Qcm9kdWNlKCd2aWRlbycpICYmIHR5cGUgPT09ICd2aWRlbycpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Nhbm5vdCBwcm9kdWNlIHZpZGVvJyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXNlbGVjdGVkQXVkaW9EZXZpY2UgJiYgdHlwZSA9PT0gJ2F1ZGlvJykge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignTm8gYXVkaW8gZGV2aWNlIHNlbGVjdGVkJyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJvZHVjZXJzLmhhcyh0eXBlKSkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ1Byb2R1Y2VyIGFscmVhZHkgZXhpc3RzIGZvciB0aGlzIHR5cGUgJyArIHR5cGUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IG1lZGlhQ29uc3RyYWludHM7XG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgY2FzZSAnYXVkaW8nOlxuICAgICAgICAgICAgICAgIG1lZGlhQ29uc3RyYWludHMgPSB7XG4gICAgICAgICAgICAgICAgICAgIGRldmljZUlkOiBzZWxlY3RlZEF1ZGlvRGV2aWNlLmlkLFxuICAgICAgICAgICAgICAgICAgICBhdWRpbzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgdmlkZW86IGZhbHNlXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAndmlkZW8nOlxuICAgICAgICAgICAgICAgIG1lZGlhQ29uc3RyYWludHMgPSBWSURFT19DT05TVFJBSU5UUztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHN0cmVhbSA9IGF3YWl0IG5hdmlnYXRvci5tZWRpYURldmljZXMuZ2V0VXNlck1lZGlhKG1lZGlhQ29uc3RyYWludHMpO1xuICAgICAgICBjb25zdCB0cmFjayA9IHR5cGUgPT09ICdhdWRpbycgPyBzdHJlYW0uZ2V0QXVkaW9UcmFja3MoKVswXSA6IHN0cmVhbS5nZXRWaWRlb1RyYWNrcygpWzBdO1xuICAgICAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICAgICAgICB0cmFja1xuICAgICAgICB9O1xuXG4gICAgICAgIGF1ZGlvUmVmLmN1cnJlbnQgPSBzdHJlYW07XG4gICAgICAgIGlmICh0eXBlID09PSAnYXVkaW8nKSB7XG4gICAgICAgICAgICAvLyBNZXRlciB0aGUgbG9jYWwgbWljIHNvIHRoZSBzZWxmIHRpbGUgaGlnaGxpZ2h0cyB3aGVuIHlvdSBzcGVhay5cbiAgICAgICAgICAgIHN0YXJ0TWV0ZXIoJ3NlbGYtYXVkaW8nLCBzdHJlYW0sIHByb3BzLmRhdGEudXNlcklkKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocHJvcHMuaXNIb3N0ICYmIHR5cGUgPT09ICdhdWRpbycpIHtcbiAgICAgICAgICAgIG1lZGlhUmVjb3JkZXIuYWRkVHJhY2socHJvcHMuZGF0YS51c2VySWQsIHRyYWNrKTtcbiAgICAgICAgICAgIHRyYWNrcy5jdXJyZW50LnNldEF1ZGlvVHJhY2sodHJhY2spO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGUgPT09ICd2aWRlbycpIHtcbiAgICAgICAgICAgIHBhcmFtcy5lbmNvZGluZ3MgPSBWSURFT19FTkNPRElOR1M7XG4gICAgICAgICAgICBwYXJhbXMuY29kZWNPcHRpb25zID0gVklERU9fQ09ERUNfT1BUSU9OUztcbiAgICAgICAgICAgIHRyYWNrcy5jdXJyZW50LnNldFZpZGVvVHJhY2sodHJhY2spO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHByb2R1Y2VyO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcHJvZHVjZXIgPSBhd2FpdCBwcm9kdWNlclRyYW5zcG9ydC5wcm9kdWNlKHBhcmFtcyk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpO1xuICAgICAgICAgICAgLy8gU3RvcCB0aGUganVzdC1jYXB0dXJlZCB0cmFjayBzbyB0aGUgbWljL2NhbSBpc24ndCBsZWZ0IGxpdmUgYWZ0ZXIgYSBmYWlsZWQgcHJvZHVjZS5cbiAgICAgICAgICAgIHRyYWNrLnN0b3AoKTtcbiAgICAgICAgICAgIC8vIEEgZmF0YWwgUlRQLWV4dGVuc2lvbiBjb2xsaXNpb24gb24gY3JlYXRlT2ZmZXIgY2FuJ3QgYmUgcmVjb3ZlcmVkIGluLXBsYWNlO1xuICAgICAgICAgICAgLy8gYXNrIHRoZSB1c2VyIHRvIHJlam9pbi4gVGhlIGljb24gaXMgTk9UIGZsaXBwZWQgdG8gdW5tdXRlZCAocHJvZHVjZSBmYWlsZWQpLlxuICAgICAgICAgICAgaWYgKGlzUnRwQ29sbGlzaW9uRXJyb3IoZSkpIHtcbiAgICAgICAgICAgICAgICB2Y0V2ZW50TWFuYWdlci5maXJlRXZlbnQoVkNFdmVudFR5cGUuU1lTVEVNX0FMRVJULCB7cGF5bG9hZDoge21lc3NhZ2U6IFJFSk9JTl9BTEVSVF9NRVNTQUdFfX0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByb2R1Y2VyKSB7XG4gICAgICAgICAgICAvLyBQcm9kdWNpbmcgaXMgY29uZmlybWVkIOKAlCBub3cgKGFuZCBvbmx5IG5vdykgY2xlYXIgdGhlIG11dGVkIGljb24gZm9yIHRoaXMga2luZC5cbiAgICAgICAgICAgIGlmIChwcm9wcy5pc0N1cnJlbnRVc2VyKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdhdWRpbycpIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0QXVkaW9NdXRlZChmYWxzZSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAndmlkZW8nKSB7XG4gICAgICAgICAgICAgICAgICAgIHNldFZpZGVvTXV0ZWQoZmFsc2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcHJvZHVjZXJUcmFuc3BvcnQuZ2V0U3RhdHMoKVxuICAgICAgICAgICAgICAgIC50aGVuKChkYXRhKSA9PiBjb25zb2xlLmxvZyhkYXRhKSk7XG4gICAgICAgICAgICBwcm9kdWNlcnMuc2V0KHR5cGUsIHByb2R1Y2VyKTtcblxuICAgICAgICAgICAgaWYgKHR5cGUgPT09ICd2aWRlbycpIHtcbiAgICAgICAgICAgICAgICB2aWRlb1JlZi5jdXJyZW50LnNyY09iamVjdCA9IHN0cmVhbTtcbiAgICAgICAgICAgICAgICB2aWRlb1N0cmVhbS5jdXJyZW50ID0gc3RyZWFtO1xuICAgICAgICAgICAgICAgIHNldFZpZGVvUmVmcmVzaGVyKCF2aWRlb1JlZnJlc2hlcik7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coc3RyZWFtKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcHJvZHVjZXIub24oJ3RyYW5zcG9ydGNsb3NlJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHN0cmVhbS5zcmNPYmplY3QuZ2V0VHJhY2tzKClcbiAgICAgICAgICAgICAgICAgICAgLmZvckVhY2goZnVuY3Rpb24gKHRyYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cmFjay5zdG9wKCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgcHJvZHVjZXJzLmRlbGV0ZSh0eXBlKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBwcm9kdWNlci5vbignY2xvc2UnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgc3RyZWFtLnNyY09iamVjdC5nZXRUcmFja3MoKVxuICAgICAgICAgICAgICAgICAgICAuZm9yRWFjaChmdW5jdGlvbiAodHJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNrLnN0b3AoKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBwcm9kdWNlcnMuZGVsZXRlKHR5cGUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgY29uc3VtZUZhaWxlZFByb2R1Y2VycyA9ICgpID0+IHtcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAodW5tb3VudGVkUmVmLmN1cnJlbnQpIHJldHVybjtcbiAgICAgICAgICAgIGlmIChkZXZpY2UpIHtcbiAgICAgICAgICAgICAgICBvbk5ld1Byb2R1Y2VycyhmYWlsZWRQcm9kdWNlcnNEdWVUb051bGxUcmFuc3BvcnQsIHRydWUpO1xuICAgICAgICAgICAgICAgIGZhaWxlZFByb2R1Y2Vyc0R1ZVRvTnVsbFRyYW5zcG9ydC5zcGxpY2UoMCwgZmFpbGVkUHJvZHVjZXJzRHVlVG9OdWxsVHJhbnNwb3J0Lmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgY29uc3VtZUZhaWxlZFByb2R1Y2VycygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCA1MDAwKTtcbiAgICB9XG5cbiAgICBjb25zdCBzdG9wUHJvZHVjaW5nID0gKHR5cGUsIGNhbGxiYWNrKSA9PiB7XG4gICAgICAgIGlmICghcHJvZHVjZXJzLmhhcyh0eXBlKSkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ1RoZXJlIGlzIG5vIHByb2R1Y2VyIGZvciB0aGlzIHR5cGUgJyArIHR5cGUpO1xuICAgICAgICAgICAgLy8gTm90aGluZyBpcyBiZWluZyBwcm9kdWNlZCwgc28gdGhlIHN0b3AgaXMgdHJpdmlhbGx5IHNhdGlzZmllZCDigJQgbGV0IHRoZVxuICAgICAgICAgICAgLy8gY2FsbGVyIChlLmcuIHRoZSBtdXRlIHRvZ2dsZSkgdHJlYXQgdGhpcyBhcyBhIGNvbmZpcm1lZCBcInN0b3BwZWRcIi5cbiAgICAgICAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcHJvZHVjZXJJZCA9IHByb2R1Y2Vycy5nZXQodHlwZSkuaWQ7XG4gICAgICAgIGNvbnNvbGUubG9nKCdDbG9zZSBwcm9kdWNlcicsIHByb2R1Y2VySWQpO1xuXG4gICAgICAgIHByb2R1Y2Vycy5nZXQodHlwZSlcbiAgICAgICAgICAgIC5jbG9zZSgpO1xuICAgICAgICBwcm9kdWNlcnMuZGVsZXRlKHR5cGUpO1xuICAgICAgICBpZiAodHlwZSA9PT0gJ3ZpZGVvJykge1xuICAgICAgICAgICAgdHJhY2tzLmN1cnJlbnQuc3RvcFZpZGVvVHJhY2soKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlID09PSAnYXVkaW8nKSB7XG4gICAgICAgICAgICB0cmFja3MuY3VycmVudC5zdG9wQXVkaW9UcmFjaygpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc29sZS5sb2coJ0NMT1NJTkcgUFJPRFVDRVIgT0YgSUQgOiAnICsgcHJvZHVjZXJJZCk7XG4gICAgICAgIHNvY2tldE1hbmFnZXIuZW1pdEV2ZW50KFZDRXZlbnRUeXBlLlBST0RVQ0VSX0NMT1NFRCwge1xuICAgICAgICAgICAgdXNlcklkOiBwcm9wcy5kYXRhLnVzZXJJZCxcbiAgICAgICAgICAgIHByb2R1Y2VySWQsXG4gICAgICAgICAgICByb29tSWQ6IHByb3BzLm1lZXRpbmdJZFxuICAgICAgICB9KVxuICAgICAgICAgICAgLnRoZW4oKGRhdGEpID0+IHtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuY2F0Y2goKGUpID0+IGNvbnNvbGUubG9nKCdQUk9EVUNFUl9DTE9TRUQgRVJST1IgOiAnLCBlKSk7XG4gICAgfTtcblxuICAgIGNvbnN0IG9uTmV3UHJvZHVjZXJzID0gKHByb2R1Y2VycywgbG9hZGluZyA9IGZhbHNlKSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiPT09PT09IFBST0RVQ0VSUyBSRUNFSVZFRCA6IFsgXCIgKyBKU09OLnN0cmluZ2lmeShwcm9kdWNlcnMpICsgXCIgXSA9PT09PT09XCIpO1xuICAgICAgICBmb3IgKGNvbnN0IHByb2R1Y2VyIG9mIHByb2R1Y2Vycykge1xuICAgICAgICAgICAgaWYgKGRldmljZSkge1xuICAgICAgICAgICAgICAgIGlmIChwcm9kdWNlci51c2VySWQgPT09IHByb3BzLmRhdGEudXNlcklkKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwcm9kdWNlci5raW5kID09PSAndmlkZW8nICYmICFwcm9kdWNlci5zY3JlZW5TaGFyaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnQ0FMTElORyBDT05TVU1FIEZST00gT04gTkVXIFBST0RVQ0VSUyBGT1IgOiAnICsgcHJvcHMuZGF0YS51c2VySWQgKyAnIC0gJyArIHByb2R1Y2VyLnByb2R1Y2VySWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3VtZShwcm9kdWNlci5wcm9kdWNlcklkLCBwcm9kdWNlci5raW5kLCBsb2FkaW5nLCBwcm9kdWNlci51c2VySWQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHByb3BzLmlzQ3VycmVudFVzZXIgfHwgbG9hZGluZykge1xuICAgICAgICAgICAgICAgICAgICAvLyBUaGUgc21hbGwgcGFydGljaXBhbnQgYm94IGF0IHRoZSBib3R0b20gYmVsb25naW5nIHRvIHRoZSBjdXJyZW50IHVzZXIgbXVzdCBjb25zdW1lIGFsbCBhdWRpb1xuICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGJlY2F1c2Ugd2UgZG8gbm90IHdhbnQgdG8gZGlzdHVyYiB0aGUgYXVkaW8gZHVlIHRvIGFueSByZW5kZXJpbmcgc3VjaCBhcyBCcmluZyB0byB2aWV3XG4gICAgICAgICAgICAgICAgICAgIGlmIChwcm9kdWNlci5raW5kID09PSAnYXVkaW8nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdW1lKHByb2R1Y2VyLnByb2R1Y2VySWQsIHByb2R1Y2VyLmtpbmQsIGxvYWRpbmcsIHByb2R1Y2VyLnVzZXJJZCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGZhaWxlZFByb2R1Y2Vyc0R1ZVRvTnVsbFRyYW5zcG9ydC5wdXNoKHByb2R1Y2VyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zb2xlLmxvZyhcIj09PT09PSBQUk9EVUNFUlMgVEhBVCBDT1VMRCBOT1QgQkUgQ09OU1VNRVMgOiBbIFwiICsgSlNPTi5zdHJpbmdpZnkoZmFpbGVkUHJvZHVjZXJzRHVlVG9OdWxsVHJhbnNwb3J0KSArIFwiIF0gPT09PT09PVwiKTtcbiAgICB9O1xuXG4gICAgY29uc3QgcmVtb3ZlQ29uc3VtZXIgPSAoY29uc3VtZXJJZCwga2luZCwgdXNlcklkKSA9PiB7XG4gICAgICAgIC8vIFN0b3AgYW55IGFjdGl2ZS1zcGVha2VyIG1ldGVyIGF0dGFjaGVkIHRvIHRoaXMgY29uc3VtZXIncyBzdHJlYW0uXG4gICAgICAgIHN0b3BNZXRlcihjb25zdW1lcklkKTtcbiAgICAgICAgaWYgKGtpbmQgPT09ICd2aWRlbycpIHtcbiAgICAgICAgICAgIGlmICh2aWRlb1N0cmVhbS5jdXJyZW50KSB7XG4gICAgICAgICAgICAgICAgaWYgKHZpZGVvU3RyZWFtLmN1cnJlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgdmlkZW9TdHJlYW0uY3VycmVudC5nZXRUcmFja3MoKVxuICAgICAgICAgICAgICAgICAgICAgICAgLmZvckVhY2goZnVuY3Rpb24gKHRyYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2suc3RvcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGtpbmQgPT09ICdhdWRpbycpIHtcbiAgICAgICAgICAgIGxldCBhdWRpb0VsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChjb25zdW1lcklkKTtcbiAgICAgICAgICAgIGlmIChhdWRpb0VsZW1lbnQgJiYgYXVkaW9FbGVtZW50LnNyY09iamVjdCkge1xuICAgICAgICAgICAgICAgIGF1ZGlvRWxlbWVudC5zcmNPYmplY3QuZ2V0VHJhY2tzKClcbiAgICAgICAgICAgICAgICAgICAgLmZvckVhY2goZnVuY3Rpb24gKHRyYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cmFjay5zdG9wKCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgaWYgKHVzZXJJZCAmJiBtZWRpYVJlY29yZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIG1lZGlhUmVjb3JkZXIucmVtb3ZlVHJhY2sodXNlcklkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbGV0IGVsZW1lbnRCeUlkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQocHJvcHMuZGF0YS51c2VySWQgKyAnLWF1ZGlvLWVsLWNvbnRhaW5lcicpO1xuICAgICAgICAgICAgICAgIGlmIChlbGVtZW50QnlJZCkge1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50QnlJZC5yZW1vdmVDaGlsZChhdWRpb0VsZW1lbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN1bWVycy5kZWxldGUoY29uc3VtZXJJZCk7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIHJldHJ5Q29uc3VtZShraW5kLCB1c2VySWQsIGUsIHJldHJpZXMsIHByb2R1Y2VySWQsIGxvYWRpbmcpIHtcbiAgICAgICAgY29uc29sZS5sb2coJ0ZBSUxFRCBUTyBDT05TVU1FICcgKyBraW5kICsgJyBGUk9NICcgKyB1c2VySWQpO1xuICAgICAgICBjb25zb2xlLmxvZyhlKTtcblxuICAgICAgICBpZiAocmV0cmllcyA8IDEwKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnUkUtVFJZSU5HIFsnICsgcmV0cmllcyArICddJyk7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAodW5tb3VudGVkUmVmLmN1cnJlbnQpIHJldHVybjtcbiAgICAgICAgICAgICAgICBjb25zdW1lKHByb2R1Y2VySWQsIGtpbmQsIGxvYWRpbmcsIHVzZXJJZCwgcmV0cmllcyk7XG4gICAgICAgICAgICB9LCA1MDAwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdDT01QTEVURUxZIEZBSUxFRCBUTyBDT05TVU1FICcgKyBraW5kICsgJyBGUk9NICcgKyB1c2VySWQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgY29uc3VtZSA9IGFzeW5jIChwcm9kdWNlcklkLCBraW5kLCBsb2FkaW5nLCB1c2VySWQsIHJldHJpZXMgPSAwKSA9PiB7XG4gICAgICAgIC8vIEdldCAoYW5kIGxhemlseSBjcmVhdGUpIHRoZSByZWN2IHRyYW5zcG9ydCBmb3IgdGhpcyBraW5kLiBhdWRpbyBhbmRcbiAgICAgICAgLy8gdmlkZW8gcmlkZSBzZXBhcmF0ZSB0cmFuc3BvcnRzLCBzbyBhIGNsb3NlZCBjb25zdW1lcidzIG0tc2VjdGlvbiBpc1xuICAgICAgICAvLyBuZXZlciByZWN5Y2xlZCBhY3Jvc3Mga2luZHMg4oCUIHdoaWNoIGlzIHdoYXQgdHJpZ2dlcmVkIHRoZSBSVFBcbiAgICAgICAgLy8gZXh0ZW5zaW9uLWlkIGNvbGxpc2lvbi5cbiAgICAgICAgY29uc3QgdHJhbnNwb3J0ID0gYXdhaXQgcHJvcHMuZ2V0UmVjdlRyYW5zcG9ydChraW5kKTtcbiAgICAgICAgaWYgKCF0cmFuc3BvcnQpIHtcbiAgICAgICAgICAgIHJldHJ5Q29uc3VtZShraW5kLCB1c2VySWQsIG5ldyBFcnJvcigncmVjdiB0cmFuc3BvcnQgdW5hdmFpbGFibGUgZm9yICcgKyBraW5kKSwgcmV0cmllcywgcHJvZHVjZXJJZCwgbG9hZGluZyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgbWVkaWFTb3VwSGVscGVyLmdldENvbnN1bWVTdHJlYW0ocHJvZHVjZXJJZCwgZGV2aWNlLnJ0cENhcGFiaWxpdGllcywgdHJhbnNwb3J0LCBwcm9wcy5tZWV0aW5nSWQsXG4gICAgICAgICAgICBhcHBsaWNhdGlvbk1hbmFnZXIuZ2V0VXNlckRldGFpbHMoKS51c2VybmFtZSwga2luZClcbiAgICAgICAgICAgIC50aGVuKFxuICAgICAgICAgICAgICAgICh7XG4gICAgICAgICAgICAgICAgICAgICBjb25zdW1lcixcbiAgICAgICAgICAgICAgICAgICAgIHN0cmVhbSxcbiAgICAgICAgICAgICAgICAgICAgIGtpbmRcbiAgICAgICAgICAgICAgICAgfSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY29uc3VtZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN1bWVycy5zZXQoY29uc3VtZXIuaWQsIGNvbnN1bWVyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1DT05TVU1FPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSA6ICcgKyBraW5kICsgJyBGT1IgOiAnICsgdXNlcklkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChraW5kID09PSAndmlkZW8nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZpZGVvUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlkZW9SZWYuY3VycmVudC5zcmNPYmplY3QgPSBzdHJlYW07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlkZW9TdHJlYW0uY3VycmVudCA9IHN0cmVhbTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFZpZGVvTXV0ZWQoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFZpZGVvUmVmcmVzaGVyKCF2aWRlb1JlZnJlc2hlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2tzLmN1cnJlbnQuc2V0VmlkZW9UcmFjayhzdHJlYW0uZ2V0VmlkZW9UcmFja3MoKVswXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wcy5pc0N1cnJlbnRVc2VyIHx8IGxvYWRpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGF1ZGlvRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2F1ZGlvJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvRWxlbWVudC5zcmNPYmplY3QgPSBzdHJlYW07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvRWxlbWVudC5pZCA9IGNvbnN1bWVyLmlkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb0VsZW1lbnQucGxheXNpbmxpbmUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9FbGVtZW50LmF1dG9wbGF5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21lZXRpbmctYXVkaW8tZWwtY29udGFpbmVyJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5hcHBlbmRDaGlsZChhdWRpb0VsZW1lbnQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1ldGVyIHRoaXMgcGFydGljaXBhbnQncyBhdWRpbyBmb3IgYWN0aXZlLXNwZWFrZXIgaGlnaGxpZ2h0LlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydE1ldGVyKGNvbnN1bWVyLmlkLCBzdHJlYW0sIHVzZXJJZCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BzLmlzSG9zdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVkaWFSZWNvcmRlci5hZGRUcmFjayh1c2VySWQsIHN0cmVhbS5nZXRBdWRpb1RyYWNrcygpWzBdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3VtZXIub24oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RyYWNrZW5kZWQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coa2luZCArIFwiIENPTlNVTUVSIFRSQUNLIEVOREVEIEZPUiBcIiArIHVzZXJJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUNvbnN1bWVyKGNvbnN1bWVyLmlkLCBraW5kLCB1c2VySWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBHdWFyZDogdGhlIHBhcnRpY2lwYW50IG1heSBoYXZlIGxlZnQsIHNvIGZpbmQoKSBjYW4gYmUgdW5kZWZpbmVkIOKAlFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZWFkaW5nIC52aWRlb011dGVkLy5hdWRpb011dGVkIG9uIGl0IHRocmV3LiBObyBwYXJ0aWNpcGFudCDihpIgbm8gcmV0cnkuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRyYWNrRW5kZWRQYXJ0aWNpcGFudCA9IHBhcnRpY2lwYW50cy5maW5kKChwKSA9PiBwLnVzZXJJZCA9PT0gdXNlcklkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRyYWNrRW5kZWRQYXJ0aWNpcGFudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKChraW5kID09PSAndmlkZW8nICYmICF0cmFja0VuZGVkUGFydGljaXBhbnQudmlkZW9NdXRlZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoa2luZCA9PT0gJ2F1ZGlvJyAmJiAhdHJhY2tFbmRlZFBhcnRpY2lwYW50LmF1ZGlvTXV0ZWQpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0cnlDb25zdW1lKGtpbmQsIHVzZXJJZCwgbmV3IEVycm9yKCd0cmFja2VuZGVkIHdoaWxlICcgKyBraW5kICsgJyBpcyBOT1QgbXV0ZWQnKSwgcmV0cmllcywgcHJvZHVjZXJJZCwgbG9hZGluZyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdW1lci5vbihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAndHJhbnNwb3J0Y2xvc2UnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coa2luZCArIFwiIENPTlNVTUVSIENMT1NFRCBGT1IgXCIgKyB1c2VySWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVDb25zdW1lcihjb25zdW1lci5pZCwga2luZCwgdXNlcklkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKS5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgcmV0cnlDb25zdW1lKGtpbmQsIHVzZXJJZCwgZSwgcmV0cmllcywgcHJvZHVjZXJJZCwgbG9hZGluZyk7XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBnZXRQYXJ0aWNpcGFudE5hbWUgPSAoKSA9PiB7XG4gICAgICAgIGxldCBuYW1lID0gcHJvcHMuZGF0YS5uYW1lO1xuXG4gICAgICAgIGlmIChVdGlscy5pc051bGwocHJvcHMuZGF0YS51c2VySWQpKSB7XG4gICAgICAgICAgICBuYW1lID0gYCR7bmFtZX0gKEd1ZXN0KWA7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmFtZTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIChcbiAgICAgICAgPD5cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YCR7J2NvbC0qLSogJyArIChwcm9wcy5pc0N1cnJlbnRVc2VyID8gJ21lZXRpbmctcGFydGljaXBhbnQtY29udGFpbmVyLWN1cnJlbnQtdXNlcicgOiAnbWVldGluZy1wYXJ0aWNpcGFudC1jb250YWluZXInKX1gfVxuICAgICAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogcHJvcHMucGFkZGluZyA/IHByb3BzLnBhZGRpbmcgOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBwcm9wcy5oZWlnaHQgPyBwcm9wcy5oZWlnaHQgOiAnMTAwJScsXG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6ICcxMnB4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJveFNpemluZzogJ2JvcmRlci1ib3gnLFxuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBwcm9wcy5pc0N1cnJlbnRVc2VyID8gJyMxZjI5MzcnIDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogcHJvcHMuaXNDdXJyZW50VXNlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJzJweCBzb2xpZCAnICsgKGFwcGxpY2F0aW9uTWFuYWdlci5nZXRBcHBsaWNhdGlvblByaW1hcnlDb2xvcigpIHx8ICcjMWEzYzVlJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICcxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjA2KScsXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBBY3RpdmUtc3BlYWtlciBoaWdobGlnaHQ6IGFuIGluc2V0IHJpbmcgKHRoZSB0aWxlIGNsaXBzXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBvdmVyZmxvdywgc28gYW4gb3V0c2V0IHNoYWRvdyB3b3VsZCBiZSBjdXQgb2ZmKS5cbiAgICAgICAgICAgICAgICAgICAgICAgIGJveFNoYWRvdzogKCFhdWRpb011dGVkICYmIHNvdW5kTGV2ZWwgPiBTUEVBS0lOR19MRVZFTClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICdpbnNldCAwIDAgMCAzcHggJyArIChhcHBsaWNhdGlvbk1hbmFnZXIuZ2V0QXBwbGljYXRpb25QcmltYXJ5Q29sb3IoKSB8fCAnIzIyYzU1ZScpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnbm9uZScsXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uOiAnYm94LXNoYWRvdyAxMjBtcyBlYXNlLW91dCdcbiAgICAgICAgICAgICAgICAgICAgfX0+XG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmlkZW9NdXRlZCB8fCAhdmlkZW9SZWYuY3VycmVudCB8fCAhdmlkZW9SZWYuY3VycmVudC5zcmNPYmplY3QpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXsnY2VudGVyZWQtZmxleC1ib3gnfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogJzEwMCUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW5Cb3R0b206IHByb3BzLnNpemluZyA9PT0gJ3NtJyA/ICc4cHgnIDogMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtwcm9wcy5zaXppbmcgPT09ICdzbScgPyAnYXZhdGFyLXdyYXBwZXItc20nIDogJ2F2YXRhci13cmFwcGVyJ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IChwcm9wcy5zaXppbmcgPT09ICdzbScgPyA3MiA6IDExMikgKyAncHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogKHByb3BzLnNpemluZyA9PT0gJ3NtJyA/IDcyIDogMTEyKSArICdweCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm94U2hhZG93OiAhYXVkaW9NdXRlZCAmJiBzb3VuZExldmVsID4gM1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICcwIDAgMCAnICsgKDMgKyBzb3VuZExldmVsIC8gMTIpICsgJ3B4ICcgKyAoYXBwbGljYXRpb25NYW5hZ2VyLmdldEFwcGxpY2F0aW9uUHJpbWFyeUNvbG9yKCkgfHwgJyMwMDQ3NmEnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICdub25lJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uOiAnYm94LXNoYWRvdyA5MG1zIGxpbmVhcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAnIzNhNDY1NCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICcjZmZmJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17cHJvcHMuc2l6aW5nID09PSAnbWQnID8gJ2F2YXRhciBhdmF0YXItbWQnIDogcHJvcHMuc2l6aW5nID09PSAnc20nID8gJ2F2YXRhciBhdmF0YXItc20nIDogJ2F2YXRhcid9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250U2l6ZTogcHJvcHMuc2l6aW5nID09PSAnc20nID8gJzIwcHgnIDogbnVsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0vPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3dubG9hZFVybCA/IDxkaXYgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogJzEwMCUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRSZXBlYXQ6ICduby1yZXBlYXQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRTaXplOiAnY292ZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRQb3NpdGlvbjogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAnNTAlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICd0cmFuc3BhcmVudCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZEltYWdlOiBgdXJsKCR7ZG93bmxvYWRVcmx9KWBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPiA6IFV0aWxzLmdldEluaXRpYWxzKHByb3BzLmRhdGEubmFtZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmlkZW9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPXtwcm9wcy5kYXRhLnVzZXJJZCArICctdmlkZW8nfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9ezY0MH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD17MzIwfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b1BsYXkgcmVmPXt2aWRlb1JlZn0gbXV0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6ICcxMDAlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3RGaXQ6ICdjb3ZlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtOiBwcm9wcy5pc0N1cnJlbnRVc2VyID8gJ3NjYWxlWCgtMSknIDogJ25vbmUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpJbmRleDogJzAnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6ICh2aWRlb011dGVkIHx8ICF2aWRlb1JlZi5jdXJyZW50IHx8ICF2aWRlb1JlZi5jdXJyZW50LnNyY09iamVjdCkgPyAnbm9uZScgOiBudWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qV2UgbmVlZCB0aGlzIGVsZW1lbnQgdG8gY2FwdHVyZSByZWNvcmRpbmcgc291bmQqL1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wcy5pc0hvc3QgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGF1ZGlvXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD17cHJvcHMuZGF0YS51c2VySWQgKyAnLWF1ZGlvJ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9QbGF5IHJlZj17YXVkaW9SZWZ9IG11dGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6ICdub25lJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3Byb3BzLnNpemluZyA9PT0gJ3NtJyA/ICduYW1lLWxhYmVsLXNtJyA6ICduYW1lLWxhYmVsJ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQ6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdHRvbTogJzAnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiBwcm9wcy5zaXppbmcgPT09ICdzbScgPyAnNnB4JyA6ICc4cHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3hTaXppbmc6ICdib3JkZXItYm94JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ25JdGVtczogJ2ZsZXgtZW5kJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2FwOiAnNHB4J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6ICdpbmxpbmUtZmxleCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heFdpZHRoOiAnNzAlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IHByb3BzLnNpemluZyA9PT0gJ3NtJyA/ICcxcHggOHB4JyA6ICcycHggMTBweCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6ICc2cHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAncmdiYSgwLDAsMCwwLjU1KScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogJyNmZmYnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udFNpemU6IHByb3BzLnNpemluZyA9PT0gJ3NtJyA/ICcxMXB4JyA6ICcxM3B4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRXZWlnaHQ6IDUwMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVIZWlnaHQ6IDEuNCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaXRlU3BhY2U6ICdub3dyYXAnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dE92ZXJmbG93OiAnZWxsaXBzaXMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luTGVmdDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpblJpZ2h0OiAnYXV0bydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IXByb3BzLmlzQ3VycmVudFVzZXIgJiYgZ2V0UGFydGljaXBhbnROYW1lKCl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cHJvcHMuaXNDdXJyZW50VXNlciAmJiAnWW91J31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFwcm9wcy5pc0N1cnJlbnRVc2VyICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7bWFyZ2luTGVmdDogJzRweCcsIGRpc3BsYXk6ICdmbGV4JywgYWxpZ25JdGVtczogJ2NlbnRlcicsIGp1c3RpZnlDb250ZW50OiAnZmxleC1lbmQnLCBnYXA6ICc0cHgnfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wcy5pc0hvc3QgJiYgIWF1ZGlvTXV0ZWQgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEljb25CdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wcy5vbkhvc3RBdWRpb011dGUocHJvcHMuZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogJzI0cHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6ICcyNHB4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICcjZmZmJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAncmdiYSgwLDAsMCwwLjU1KScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogJzZweCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJY29uIGlkPXsnTUlDJ30vPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9JY29uQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBhdWRpb011dGVkID8gJ2lubGluZS1mbGV4JyA6ICdub25lJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogJyNmZmYnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3JnYmEoMCwwLDAsMC41NSknLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogJzZweCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogJzJweCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJY29uIGlkPXsnTUlDX09GRid9Lz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wcy5pc0hvc3QgJiYgIXZpZGVvTXV0ZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEljb25CdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eyhlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcHMub25Ib3N0VmlkZW9NdXRlKHByb3BzLmRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICcyNHB4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6ICcyNHB4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogJyNmZmYnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3JnYmEoMCwwLDAsMC41NSknLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogJzZweCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJY29uIGlkPXsnQ0FNRVJBJ30vPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0ljb25CdXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcHMuaXNDdXJyZW50VXNlciAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17e2Rpc3BsYXk6ICdmbGV4JywgYWxpZ25JdGVtczogJ2NlbnRlcicsIGp1c3RpZnlDb250ZW50OiAnZmxleC1lbmQnfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRvb2x0aXAgdGl0bGU9XCJNeSBkZXZpY2VzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJY29uQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVDbGlja0RldmljZXNJY29ufVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1jb250cm9scz17b3Blbk1vcmVBY3Rpb25zID8gJ2RldmljZS1tZW51JyA6IHVuZGVmaW5lZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtaGFzcG9wdXA9XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtZXhwYW5kZWQ9e29wZW5Nb3JlQWN0aW9ucyA/ICd0cnVlJyA6IHVuZGVmaW5lZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICcyNHB4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6ICcyNHB4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogJyNmZmYnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3JnYmEoMCwwLDAsMC41NSknLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogJzZweCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJY29uIGlkPXsnU0VUVElOR1MnfS8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvSWNvbkJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhcHJvcHMuaXNDdXJyZW50VXNlciAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3ttYXJnaW5MZWZ0OiAnNHB4J319PlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7aGFuZFJhaXNlZCAmJiA8UGFuVG9vbCBmb250U2l6ZT17J3NtYWxsJ30gc3R5bGU9e3tjb2xvcjogJyNlMmIwMzAnfX0vPn1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcHMuaXNDdXJyZW50VXNlciAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPXsnbWVldGluZy1hdWRpby1lbC1jb250YWluZXInfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDxNZW51XG4gICAgICAgICAgICAgICAgYW5jaG9yRWw9e2FuY2hvckVsfVxuICAgICAgICAgICAgICAgIGlkPVwiZGV2aWNlcy1tZW51XCJcbiAgICAgICAgICAgICAgICBvcGVuPXtvcGVuTW9yZUFjdGlvbnN9XG4gICAgICAgICAgICAgICAgb25DbG9zZT17aGFuZGxlQ2xvc2VEZXZpY2VNZW51fVxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZUNsb3NlRGV2aWNlTWVudX1cbiAgICAgICAgICAgICAgICBQYXBlclByb3BzPXt7XG4gICAgICAgICAgICAgICAgICAgIGVsZXZhdGlvbjogMCxcbiAgICAgICAgICAgICAgICAgICAgc3g6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJmbG93OiAndmlzaWJsZScsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXI6ICdkcm9wLXNoYWRvdygwcHggMnB4IDhweCByZ2JhKDAsMCwwLDAuMzIpKScsXG4gICAgICAgICAgICAgICAgICAgICAgICBtdDogMS41LFxuICAgICAgICAgICAgICAgICAgICAgICAgJyYgLk11aUxpc3Qtcm9vdCc6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6ICcxcHggc29saWQgI2UxZTFlMScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAnNHB4J1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICcmIC5NdWlBdmF0YXItcm9vdCc6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogMzIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAzMixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtbDogLTAuNSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtcjogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAnJjpiZWZvcmUnOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogJ1wiXCInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6ICdibG9jaycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9wOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJpZ2h0OiAxNCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogMTAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAxMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZ2NvbG9yOiAncHJpbWFyeScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtOiAndHJhbnNsYXRlWSgtNTAlKSByb3RhdGUoNDVkZWcpJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB6SW5kZXg6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtT3JpZ2luPXt7XG4gICAgICAgICAgICAgICAgICAgIGhvcml6b250YWw6IDIwLFxuICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbDogMTM2XG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBhbmNob3JPcmlnaW49e3tcbiAgICAgICAgICAgICAgICAgICAgaG9yaXpvbnRhbDogJ3JpZ2h0JyxcbiAgICAgICAgICAgICAgICAgICAgdmVydGljYWw6ICd0b3AnXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGF1ZGlvRGV2aWNlcy5tYXAoKGRldmljZSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8TWVudUl0ZW0gb25DbGljaz17KCkgPT4gY2hhbmdlQXVkaW9EZXZpY2UoZGV2aWNlKX0ga2V5PXtpbmRleH0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3tjb2xvcjogc2VsZWN0ZWRBdWRpb0RldmljZSAmJiBzZWxlY3RlZEF1ZGlvRGV2aWNlLmlkID09PSBkZXZpY2UuaWQgPyAnIzE5ODc1NCcgOiBudWxsfX0+XG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgZGV2aWNlLmxhYmVsXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvTWVudUl0ZW0+O1xuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvTWVudT5cbiAgICAgICAgPC8+XG4gICAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFZDUm9vbVBhcnRpY2lwYW50O1xuIl0sIm1h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