@phenixrts/sdk 2024.2.1 → 2024.2.3-beta.340

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.
Files changed (44) hide show
  1. package/channels/debug/channels.js +62 -58
  2. package/channels/debug/package.json +1 -1
  3. package/channels/debug/src_sdk_transformation_WorkerTransformStream_ts.js +3 -3
  4. package/channels/debug.private/channels.js +60 -56
  5. package/channels/debug.private/package.json +1 -1
  6. package/channels/debug.private/src_sdk_transformation_WorkerTransformStream_ts.js +3 -3
  7. package/channels/es5.debug.private/channels.js +56 -52
  8. package/channels/es5.debug.private/package.json +1 -1
  9. package/channels/min/378.js.map +1 -1
  10. package/channels/min/channels.js +1 -1
  11. package/channels/min/channels.js.map +1 -1
  12. package/channels/min/package.json +1 -1
  13. package/channels/min.private/378.js.map +1 -1
  14. package/channels/min.private/channels.js +1 -1
  15. package/channels/min.private/channels.js.map +1 -1
  16. package/channels/min.private/package.json +1 -1
  17. package/channels/package.json +1 -1
  18. package/full/debug/full.js +69 -65
  19. package/full/debug/package.json +1 -1
  20. package/full/debug/src_sdk_transformation_WorkerTransformStream_ts.js +3 -3
  21. package/full/debug.private/full.js +67 -63
  22. package/full/debug.private/package.json +1 -1
  23. package/full/debug.private/src_sdk_transformation_WorkerTransformStream_ts.js +3 -3
  24. package/full/min/378.js.map +1 -1
  25. package/full/min/full.js +1 -1
  26. package/full/min/full.js.map +1 -1
  27. package/full/min/package.json +1 -1
  28. package/full/min.private/378.js.map +1 -1
  29. package/full/min.private/full.js +1 -1
  30. package/full/min.private/full.js.map +1 -1
  31. package/full/min.private/package.json +1 -1
  32. package/full/package.json +1 -1
  33. package/package.json +1 -1
  34. package/publish/debug/package.json +1 -1
  35. package/publish/debug/publish.js +45 -45
  36. package/publish/debug.private/package.json +1 -1
  37. package/publish/debug.private/publish.js +45 -45
  38. package/publish/min/package.json +1 -1
  39. package/publish/min/publish.js +1 -1
  40. package/publish/min/publish.js.map +1 -1
  41. package/publish/min.private/package.json +1 -1
  42. package/publish/min.private/publish.js +1 -1
  43. package/publish/min.private/publish.js.map +1 -1
  44. package/publish/package.json +1 -1
@@ -2216,7 +2216,7 @@ var MetricsService = /*#__PURE__*/function () {
2216
2216
  }, {
2217
2217
  key: "sendMetrics",
2218
2218
  value: function () {
2219
- var _sendMetrics = _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_1___default()( /*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_5___default().mark(function _callee(metricsMessages) {
2219
+ var _sendMetrics = _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_5___default().mark(function _callee(metricsMessages) {
2220
2220
  var formData;
2221
2221
  return _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_5___default().wrap(function _callee$(_context) {
2222
2222
  while (1) switch (_context.prev = _context.next) {
@@ -2246,7 +2246,7 @@ var MetricsService = /*#__PURE__*/function () {
2246
2246
  }, {
2247
2247
  key: "sendMetricsIfAble",
2248
2248
  value: function () {
2249
- var _sendMetricsIfAble = _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_1___default()( /*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_5___default().mark(function _callee2() {
2249
+ var _sendMetricsIfAble = _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_5___default().mark(function _callee2() {
2250
2250
  var _this = this;
2251
2251
  var metricsMessages;
2252
2252
  return _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_5___default().wrap(function _callee2$(_context2) {
@@ -2787,7 +2787,7 @@ var PeerConnectionService = /*#__PURE__*/function () {
2787
2787
  }, {
2788
2788
  key: "precacheCreatePeerConnectionOffer",
2789
2789
  value: function () {
2790
- var _precacheCreatePeerConnectionOffer = _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0___default()( /*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().mark(function _callee() {
2790
+ var _precacheCreatePeerConnectionOffer = _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().mark(function _callee() {
2791
2791
  return _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().wrap(function _callee$(_context) {
2792
2792
  while (1) switch (_context.prev = _context.next) {
2793
2793
  case 0:
@@ -2812,7 +2812,7 @@ var PeerConnectionService = /*#__PURE__*/function () {
2812
2812
  }, {
2813
2813
  key: "createPeerConnectionOffer",
2814
2814
  value: function () {
2815
- var _createPeerConnectionOffer = _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0___default()( /*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().mark(function _callee3() {
2815
+ var _createPeerConnectionOffer = _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().mark(function _callee3() {
2816
2816
  var direction,
2817
2817
  encodedInsertableStreams,
2818
2818
  value,
@@ -2834,8 +2834,8 @@ var PeerConnectionService = /*#__PURE__*/function () {
2834
2834
  configuration = _environment_FeatureEnablement__WEBPACK_IMPORTED_MODULE_7__["default"].isEncodedInsertableStreamsSupported ? {
2835
2835
  encodedInsertableStreams: encodedInsertableStreams
2836
2836
  } : undefined;
2837
- return _context3.abrupt("return", PeerConnectionService._peerConnectionFactory.value.createPeerConnection(configuration).then( /*#__PURE__*/function () {
2838
- var _ref = _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0___default()( /*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().mark(function _callee2(peerConnection) {
2837
+ return _context3.abrupt("return", PeerConnectionService._peerConnectionFactory.value.createPeerConnection(configuration).then(/*#__PURE__*/function () {
2838
+ var _ref = _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().mark(function _callee2(peerConnection) {
2839
2839
  var supportsAddTransceiver, videoTransceiver, audioTransceiver, options;
2840
2840
  return _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().wrap(function _callee2$(_context2) {
2841
2841
  while (1) switch (_context2.prev = _context2.next) {
@@ -3039,7 +3039,7 @@ var RtcConnectionMonitor = /*#__PURE__*/function () {
3039
3039
  }, {
3040
3040
  key: "updateStatistic",
3041
3041
  value: function () {
3042
- var _updateStatistic = _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0___default()( /*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().mark(function _callee() {
3042
+ var _updateStatistic = _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().mark(function _callee() {
3043
3043
  var _this = this;
3044
3044
  var _ignored, getKindForSafari11, ignored;
3045
3045
  return _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().wrap(function _callee$(_context) {
@@ -3146,7 +3146,7 @@ var RtcConnectionMonitor = /*#__PURE__*/function () {
3146
3146
  }, {
3147
3147
  key: "updateStatisticLegacy",
3148
3148
  value: function () {
3149
- var _updateStatisticLegacy = _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0___default()( /*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().mark(function _callee2() {
3149
+ var _updateStatisticLegacy = _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().mark(function _callee2() {
3150
3150
  var _this2 = this;
3151
3151
  var ignored;
3152
3152
  return _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().wrap(function _callee2$(_context2) {
@@ -3298,7 +3298,7 @@ var RtcPublishMonitor = /*#__PURE__*/function () {
3298
3298
  }, {
3299
3299
  key: "updateStatistic",
3300
3300
  value: function () {
3301
- var _updateStatistic = _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0___default()( /*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().mark(function _callee() {
3301
+ var _updateStatistic = _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().mark(function _callee() {
3302
3302
  var _this = this;
3303
3303
  var _ignored, getKindForSafari11, ignored;
3304
3304
  return _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().wrap(function _callee$(_context) {
@@ -3606,7 +3606,7 @@ var VanillaPeerConnection = /*#__PURE__*/function () {
3606
3606
  }, {
3607
3607
  key: "createOffer",
3608
3608
  value: function () {
3609
- var _createOffer = _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0___default()( /*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().mark(function _callee(options) {
3609
+ var _createOffer = _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().mark(function _callee(options) {
3610
3610
  var _this = this;
3611
3611
  return _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().wrap(function _callee$(_context) {
3612
3612
  while (1) switch (_context.prev = _context.next) {
@@ -3634,7 +3634,7 @@ var VanillaPeerConnection = /*#__PURE__*/function () {
3634
3634
  }, {
3635
3635
  key: "createAnswer",
3636
3636
  value: function () {
3637
- var _createAnswer = _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0___default()( /*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().mark(function _callee2(options) {
3637
+ var _createAnswer = _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().mark(function _callee2(options) {
3638
3638
  var _this2 = this;
3639
3639
  return _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().wrap(function _callee2$(_context2) {
3640
3640
  while (1) switch (_context2.prev = _context2.next) {
@@ -3662,7 +3662,7 @@ var VanillaPeerConnection = /*#__PURE__*/function () {
3662
3662
  }, {
3663
3663
  key: "setLocalDescription",
3664
3664
  value: function () {
3665
- var _setLocalDescription = _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0___default()( /*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().mark(function _callee3(description) {
3665
+ var _setLocalDescription = _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().mark(function _callee3(description) {
3666
3666
  return _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().wrap(function _callee3$(_context3) {
3667
3667
  while (1) switch (_context3.prev = _context3.next) {
3668
3668
  case 0:
@@ -3681,7 +3681,7 @@ var VanillaPeerConnection = /*#__PURE__*/function () {
3681
3681
  }, {
3682
3682
  key: "setRemoteDescription",
3683
3683
  value: function () {
3684
- var _setRemoteDescription = _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0___default()( /*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().mark(function _callee4(description) {
3684
+ var _setRemoteDescription = _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().mark(function _callee4(description) {
3685
3685
  var _description$sdp;
3686
3686
  var hasCrypto;
3687
3687
  return _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().wrap(function _callee4$(_context4) {
@@ -3845,7 +3845,7 @@ var VanillaPeerConnectionFactory = /*#__PURE__*/function () {
3845
3845
  return _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_createClass_js__WEBPACK_IMPORTED_MODULE_2___default()(VanillaPeerConnectionFactory, [{
3846
3846
  key: "createPeerConnection",
3847
3847
  value: function () {
3848
- var _createPeerConnection = _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0___default()( /*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_3___default().mark(function _callee(configuration) {
3848
+ var _createPeerConnection = _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_3___default().mark(function _callee(configuration) {
3849
3849
  return _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_3___default().wrap(function _callee$(_context) {
3850
3850
  while (1) switch (_context.prev = _context.next) {
3851
3851
  case 0:
@@ -4971,7 +4971,7 @@ var Channel = /*#__PURE__*/function () {
4971
4971
  }, {
4972
4972
  key: "stop",
4973
4973
  value: function () {
4974
- var _stop = _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0___default()( /*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().mark(function _callee(reason) {
4974
+ var _stop = _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().mark(function _callee(reason) {
4975
4975
  var _this3 = this;
4976
4976
  return _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().wrap(function _callee$(_context) {
4977
4977
  while (1) switch (_context.prev = _context.next) {
@@ -5014,7 +5014,7 @@ var Channel = /*#__PURE__*/function () {
5014
5014
  }, {
5015
5015
  key: "resume",
5016
5016
  value: function () {
5017
- var _resume = _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0___default()( /*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().mark(function _callee2() {
5017
+ var _resume = _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().mark(function _callee2() {
5018
5018
  return _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().wrap(function _callee2$(_context2) {
5019
5019
  while (1) switch (_context2.prev = _context2.next) {
5020
5020
  case 0:
@@ -5055,7 +5055,7 @@ var Channel = /*#__PURE__*/function () {
5055
5055
  }, {
5056
5056
  key: "dispose",
5057
5057
  value: function () {
5058
- var _dispose = _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0___default()( /*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().mark(function _callee3() {
5058
+ var _dispose = _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().mark(function _callee3() {
5059
5059
  var _this4 = this;
5060
5060
  return _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().wrap(function _callee3$(_context3) {
5061
5061
  while (1) switch (_context3.prev = _context3.next) {
@@ -5088,7 +5088,7 @@ var Channel = /*#__PURE__*/function () {
5088
5088
  }, {
5089
5089
  key: "start",
5090
5090
  value: function () {
5091
- var _start = _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0___default()( /*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().mark(function _callee4() {
5091
+ var _start = _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().mark(function _callee4() {
5092
5092
  return _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().wrap(function _callee4$(_context4) {
5093
5093
  while (1) switch (_context4.prev = _context4.next) {
5094
5094
  case 0:
@@ -5121,7 +5121,7 @@ var Channel = /*#__PURE__*/function () {
5121
5121
  }, {
5122
5122
  key: "processStart",
5123
5123
  value: function () {
5124
- var _processStart = _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0___default()( /*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().mark(function _callee5() {
5124
+ var _processStart = _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().mark(function _callee5() {
5125
5125
  var _this5 = this;
5126
5126
  var token, listenOnStreamSetup, _StreamTrackTransform, valid, validationResult, _StreamTrackTransform2, _valid, _validationResult, _EncodedStreamSink$va, _valid2, _validationResult2, _EncodedStreamSink$va2, _valid3, _validationResult3, hasTransformStreamCallback, hasEncodedStreamSink, uri, handleStreamFailureCallback, streamPlayer;
5127
5127
  return _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().wrap(function _callee5$(_context5) {
@@ -5356,7 +5356,7 @@ var Channel = /*#__PURE__*/function () {
5356
5356
  }, {
5357
5357
  key: "restartAfterStop",
5358
5358
  value: function () {
5359
- var _restartAfterStop = _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0___default()( /*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().mark(function _callee6() {
5359
+ var _restartAfterStop = _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().mark(function _callee6() {
5360
5360
  var ignored;
5361
5361
  return _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().wrap(function _callee6$(_context6) {
5362
5362
  while (1) switch (_context6.prev = _context6.next) {
@@ -5390,7 +5390,7 @@ var Channel = /*#__PURE__*/function () {
5390
5390
  }, {
5391
5391
  key: "play",
5392
5392
  value: function () {
5393
- var _play = _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0___default()( /*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().mark(function _callee7() {
5393
+ var _play = _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().mark(function _callee7() {
5394
5394
  var mediaStream;
5395
5395
  return _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().wrap(function _callee7$(_context7) {
5396
5396
  while (1) switch (_context7.prev = _context7.next) {
@@ -5445,7 +5445,7 @@ var Channel = /*#__PURE__*/function () {
5445
5445
  }, {
5446
5446
  key: "handleStreamFailure",
5447
5447
  value: function () {
5448
- var _handleStreamFailure = _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0___default()( /*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().mark(function _callee8() {
5448
+ var _handleStreamFailure = _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().mark(function _callee8() {
5449
5449
  return _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().wrap(function _callee8$(_context8) {
5450
5450
  while (1) switch (_context8.prev = _context8.next) {
5451
5451
  case 0:
@@ -5546,7 +5546,7 @@ var Channel = /*#__PURE__*/function () {
5546
5546
  }, {
5547
5547
  key: "playMediaStreamInVideoElement",
5548
5548
  value: function () {
5549
- var _playMediaStreamInVideoElement = _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0___default()( /*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().mark(function _callee9(mediaStream) {
5549
+ var _playMediaStreamInVideoElement = _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().mark(function _callee9(mediaStream) {
5550
5550
  var _this7 = this;
5551
5551
  var videoElement, playPromise;
5552
5552
  return _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().wrap(function _callee9$(_context9) {
@@ -6199,7 +6199,7 @@ var Discovery = /*#__PURE__*/function () {
6199
6199
  return _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_createClass_js__WEBPACK_IMPORTED_MODULE_2___default()(Discovery, null, [{
6200
6200
  key: "precacheClosestEndPointDiscovery",
6201
6201
  value: function () {
6202
- var _precacheClosestEndPointDiscovery = _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0___default()( /*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().mark(function _callee() {
6202
+ var _precacheClosestEndPointDiscovery = _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().mark(function _callee() {
6203
6203
  var uri;
6204
6204
  return _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().wrap(function _callee$(_context) {
6205
6205
  while (1) switch (_context.prev = _context.next) {
@@ -6220,7 +6220,7 @@ var Discovery = /*#__PURE__*/function () {
6220
6220
  }, {
6221
6221
  key: "discoverClosestEndPointWithCaching",
6222
6222
  value: function () {
6223
- var _discoverClosestEndPointWithCaching = _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0___default()( /*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().mark(function _callee2(uri) {
6223
+ var _discoverClosestEndPointWithCaching = _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().mark(function _callee2(uri) {
6224
6224
  var url, discoveryService, cachedValue, ignored;
6225
6225
  return _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().wrap(function _callee2$(_context2) {
6226
6226
  while (1) switch (_context2.prev = _context2.next) {
@@ -6328,7 +6328,7 @@ var DiscoveryService = /*#__PURE__*/function () {
6328
6328
  return _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_createClass_js__WEBPACK_IMPORTED_MODULE_2___default()(DiscoveryService, [{
6329
6329
  key: "discoverNearbyEndPoints",
6330
6330
  value: function () {
6331
- var _discoverNearbyEndPoints = _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0___default()( /*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().mark(function _callee(uri, timeout) {
6331
+ var _discoverNearbyEndPoints = _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().mark(function _callee(uri, timeout) {
6332
6332
  var url, response, asString, endPoints;
6333
6333
  return _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().wrap(function _callee$(_context) {
6334
6334
  while (1) switch (_context.prev = _context.next) {
@@ -6385,7 +6385,7 @@ var DiscoveryService = /*#__PURE__*/function () {
6385
6385
  }, {
6386
6386
  key: "discoverClosestEndPoint",
6387
6387
  value: function () {
6388
- var _discoverClosestEndPoint = _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0___default()( /*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().mark(function _callee2() {
6388
+ var _discoverClosestEndPoint = _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().mark(function _callee2() {
6389
6389
  var _this = this;
6390
6390
  var timeout,
6391
6391
  url,
@@ -6585,7 +6585,7 @@ var EndPoint = /*#__PURE__*/function () {
6585
6585
  }, {
6586
6586
  key: "ping",
6587
6587
  value: function () {
6588
- var _ping = _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_1___default()( /*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_5___default().mark(function _callee() {
6588
+ var _ping = _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_5___default().mark(function _callee() {
6589
6589
  var _this = this;
6590
6590
  var url, start, response, finished;
6591
6591
  return _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_5___default().wrap(function _callee$(_context) {
@@ -6627,7 +6627,7 @@ var EndPoint = /*#__PURE__*/function () {
6627
6627
  }, {
6628
6628
  key: "subscribe",
6629
6629
  value: function () {
6630
- var _subscribe = _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_1___default()( /*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_5___default().mark(function _callee2(token, localSessionDescription, failureCount) {
6630
+ var _subscribe = _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_5___default().mark(function _callee2(token, localSessionDescription, failureCount) {
6631
6631
  var _this2 = this;
6632
6632
  var tenancy, url, formData, clientVersion, bodyWithOffer, bodyWithoutOffer, start, httpResponse, timeout, status, finished, subscribeResponse;
6633
6633
  return _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_5___default().wrap(function _callee2$(_context2) {
@@ -6739,7 +6739,7 @@ var EndPoint = /*#__PURE__*/function () {
6739
6739
  }, {
6740
6740
  key: "publish",
6741
6741
  value: function () {
6742
- var _publish = _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_1___default()( /*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_5___default().mark(function _callee3(name, token, localSessionDescription, failureCount) {
6742
+ var _publish = _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_5___default().mark(function _callee3(name, token, localSessionDescription, failureCount) {
6743
6743
  var _this3 = this;
6744
6744
  var tenancy, url, formData, clientVersion, bodyWithOffer, bodyWithoutOffer, start, httpResponse, timeout, status, finished, subscribeResponse;
6745
6745
  return _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_5___default().wrap(function _callee3$(_context3) {
@@ -6855,7 +6855,7 @@ var EndPoint = /*#__PURE__*/function () {
6855
6855
  }, {
6856
6856
  key: "setRemoteDescription",
6857
6857
  value: function () {
6858
- var _setRemoteDescription = _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_1___default()( /*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_5___default().mark(function _callee4(stream, sessionDescription) {
6858
+ var _setRemoteDescription = _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_5___default().mark(function _callee4(stream, sessionDescription) {
6859
6859
  var _this4 = this;
6860
6860
  var url, formData, body, start, httpResponse, timeout, status, finished, setRemoteDescriptionResponse;
6861
6861
  return _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_5___default().wrap(function _callee4$(_context4) {
@@ -6933,7 +6933,7 @@ var EndPoint = /*#__PURE__*/function () {
6933
6933
  }, {
6934
6934
  key: "limitBitrate",
6935
6935
  value: function () {
6936
- var _limitBitrate = _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_1___default()( /*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_5___default().mark(function _callee5(stream, elapsedInMilliseconds, bitrateInBitsPerSecond, bitrateState, bitrateMode) {
6936
+ var _limitBitrate = _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_5___default().mark(function _callee5(stream, elapsedInMilliseconds, bitrateInBitsPerSecond, bitrateState, bitrateMode) {
6937
6937
  var _this5 = this;
6938
6938
  var url, formData, body, start, httpResponse, timeout, status, finished;
6939
6939
  return _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_5___default().wrap(function _callee5$(_context5) {
@@ -7001,7 +7001,7 @@ var EndPoint = /*#__PURE__*/function () {
7001
7001
  }, {
7002
7002
  key: "addIceCandidates",
7003
7003
  value: function () {
7004
- var _addIceCandidates = _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_1___default()( /*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_5___default().mark(function _callee6(stream, candidates, discoveryCompleted) {
7004
+ var _addIceCandidates = _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_5___default().mark(function _callee6(stream, candidates, discoveryCompleted) {
7005
7005
  var _this6 = this;
7006
7006
  var options,
7007
7007
  url,
@@ -7089,7 +7089,7 @@ var EndPoint = /*#__PURE__*/function () {
7089
7089
  }, {
7090
7090
  key: "destroyStream",
7091
7091
  value: function () {
7092
- var _destroyStream = _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_1___default()( /*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_5___default().mark(function _callee7(stream, reason) {
7092
+ var _destroyStream = _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_5___default().mark(function _callee7(stream, reason) {
7093
7093
  var _this7 = this;
7094
7094
  var url, formData, body, start, httpResponse, timeout, status, finished, destroyStreamResponse;
7095
7095
  return _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_5___default().wrap(function _callee7$(_context7) {
@@ -7166,7 +7166,7 @@ var EndPoint = /*#__PURE__*/function () {
7166
7166
  }, {
7167
7167
  key: "destroyStreamOnUnmount",
7168
7168
  value: function () {
7169
- var _destroyStreamOnUnmount = _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_1___default()( /*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_5___default().mark(function _callee8(stream, reason) {
7169
+ var _destroyStreamOnUnmount = _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_5___default().mark(function _callee8(stream, reason) {
7170
7170
  var _navigator;
7171
7171
  var ignored, url, formData, body;
7172
7172
  return _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_5___default().wrap(function _callee8$(_context8) {
@@ -7364,7 +7364,7 @@ var EndPoint = /*#__PURE__*/function () {
7364
7364
  }, {
7365
7365
  key: "convertHttpResponseToSubscribeResponse",
7366
7366
  value: function () {
7367
- var _convertHttpResponseToSubscribeResponse = _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_1___default()( /*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_5___default().mark(function _callee9(tenancy, response) {
7367
+ var _convertHttpResponseToSubscribeResponse = _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_5___default().mark(function _callee9(tenancy, response) {
7368
7368
  var data, subscribeResponse;
7369
7369
  return _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_5___default().wrap(function _callee9$(_context9) {
7370
7370
  while (1) switch (_context9.prev = _context9.next) {
@@ -7417,7 +7417,7 @@ var EndPoint = /*#__PURE__*/function () {
7417
7417
  }, {
7418
7418
  key: "convertHttpResponseToPublishResponse",
7419
7419
  value: function () {
7420
- var _convertHttpResponseToPublishResponse = _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_1___default()( /*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_5___default().mark(function _callee10(tenancy, response) {
7420
+ var _convertHttpResponseToPublishResponse = _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_5___default().mark(function _callee10(tenancy, response) {
7421
7421
  var data, publishResponse;
7422
7422
  return _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_5___default().wrap(function _callee10$(_context10) {
7423
7423
  while (1) switch (_context10.prev = _context10.next) {
@@ -7500,7 +7500,7 @@ var EndPoint = /*#__PURE__*/function () {
7500
7500
  }, {
7501
7501
  key: "convertHttpResponseToSetRemoteDescriptionResponse",
7502
7502
  value: function () {
7503
- var _convertHttpResponseToSetRemoteDescriptionResponse = _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_1___default()( /*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_5___default().mark(function _callee11(response) {
7503
+ var _convertHttpResponseToSetRemoteDescriptionResponse = _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_5___default().mark(function _callee11(response) {
7504
7504
  var data, setRemoteDescriptionResponse;
7505
7505
  return _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_5___default().wrap(function _callee11$(_context11) {
7506
7506
  while (1) switch (_context11.prev = _context11.next) {
@@ -7530,7 +7530,7 @@ var EndPoint = /*#__PURE__*/function () {
7530
7530
  }, {
7531
7531
  key: "convertHttpResponseToAddIceCandidatesResponse",
7532
7532
  value: function () {
7533
- var _convertHttpResponseToAddIceCandidatesResponse = _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_1___default()( /*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_5___default().mark(function _callee12(response) {
7533
+ var _convertHttpResponseToAddIceCandidatesResponse = _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_5___default().mark(function _callee12(response) {
7534
7534
  var data, addIceCandidatesResponse;
7535
7535
  return _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_5___default().wrap(function _callee12$(_context12) {
7536
7536
  while (1) switch (_context12.prev = _context12.next) {
@@ -7563,7 +7563,7 @@ var EndPoint = /*#__PURE__*/function () {
7563
7563
  }, {
7564
7564
  key: "convertHttpResponseToDestroyStreamResponse",
7565
7565
  value: function () {
7566
- var _convertHttpResponseToDestroyStreamResponse = _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_1___default()( /*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_5___default().mark(function _callee13(response) {
7566
+ var _convertHttpResponseToDestroyStreamResponse = _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_1___default()(/*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_5___default().mark(function _callee13(response) {
7567
7567
  var data, destroyStream;
7568
7568
  return _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_5___default().wrap(function _callee13$(_context13) {
7569
7569
  while (1) switch (_context13.prev = _context13.next) {
@@ -7841,7 +7841,7 @@ var Publisher = /*#__PURE__*/function () {
7841
7841
  }, {
7842
7842
  key: "stop",
7843
7843
  value: function () {
7844
- var _stop = _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0___default()( /*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().mark(function _callee(reason) {
7844
+ var _stop = _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().mark(function _callee(reason) {
7845
7845
  var _this2 = this;
7846
7846
  return _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().wrap(function _callee$(_context) {
7847
7847
  while (1) switch (_context.prev = _context.next) {
@@ -7883,7 +7883,7 @@ var Publisher = /*#__PURE__*/function () {
7883
7883
  }, {
7884
7884
  key: "dispose",
7885
7885
  value: function () {
7886
- var _dispose = _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0___default()( /*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().mark(function _callee2() {
7886
+ var _dispose = _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().mark(function _callee2() {
7887
7887
  var _this3 = this;
7888
7888
  return _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().wrap(function _callee2$(_context2) {
7889
7889
  while (1) switch (_context2.prev = _context2.next) {
@@ -7916,7 +7916,7 @@ var Publisher = /*#__PURE__*/function () {
7916
7916
  }, {
7917
7917
  key: "start",
7918
7918
  value: function () {
7919
- var _start = _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0___default()( /*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().mark(function _callee3() {
7919
+ var _start = _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().mark(function _callee3() {
7920
7920
  return _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().wrap(function _callee3$(_context3) {
7921
7921
  while (1) switch (_context3.prev = _context3.next) {
7922
7922
  case 0:
@@ -7965,7 +7965,7 @@ var Publisher = /*#__PURE__*/function () {
7965
7965
  }, {
7966
7966
  key: "processStart",
7967
7967
  value: function () {
7968
- var _processStart = _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0___default()( /*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().mark(function _callee4() {
7968
+ var _processStart = _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().mark(function _callee4() {
7969
7969
  var _this5 = this;
7970
7970
  var token, listenOnStreamSetup, uri, handleStreamFailureCallback, streamPublisher;
7971
7971
  return _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().wrap(function _callee4$(_context4) {
@@ -8065,7 +8065,7 @@ var Publisher = /*#__PURE__*/function () {
8065
8065
  }, {
8066
8066
  key: "handleStreamFailure",
8067
8067
  value: function () {
8068
- var _handleStreamFailure = _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0___default()( /*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().mark(function _callee5() {
8068
+ var _handleStreamFailure = _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().mark(function _callee5() {
8069
8069
  var reconnectingAttemptsInterval;
8070
8070
  return _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().wrap(function _callee5$(_context5) {
8071
8071
  while (1) switch (_context5.prev = _context5.next) {
@@ -8667,7 +8667,7 @@ var RealTimePublisher = /*#__PURE__*/function () {
8667
8667
  }, {
8668
8668
  key: "applyRtcConfiguration",
8669
8669
  value: function () {
8670
- var _applyRtcConfiguration = _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0___default()( /*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_5___default().mark(function _callee(optionalPeerConnection, rtcConfiguration) {
8670
+ var _applyRtcConfiguration = _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_5___default().mark(function _callee(optionalPeerConnection, rtcConfiguration) {
8671
8671
  var newRtcConfiguration;
8672
8672
  return _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_5___default().wrap(function _callee$(_context) {
8673
8673
  while (1) switch (_context.prev = _context.next) {
@@ -9005,7 +9005,7 @@ var ChunkedStreaming = /*#__PURE__*/function () {
9005
9005
  }, {
9006
9006
  key: "start",
9007
9007
  value: function () {
9008
- var _start = _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0___default()( /*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().mark(function _callee(videoElement, streamId, offerSdp, options) {
9008
+ var _start = _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().mark(function _callee(videoElement, streamId, offerSdp, options) {
9009
9009
  var _this = this;
9010
9010
  return _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().wrap(function _callee$(_context) {
9011
9011
  while (1) switch (_context.prev = _context.next) {
@@ -9077,7 +9077,7 @@ var ChunkedStreaming = /*#__PURE__*/function () {
9077
9077
  }, {
9078
9078
  key: "play",
9079
9079
  value: function () {
9080
- var _play = _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0___default()( /*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().mark(function _callee2(Player, videoElement, streamId, offerSdp, options) {
9080
+ var _play = _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().mark(function _callee2(Player, videoElement, streamId, offerSdp, options) {
9081
9081
  var dashManifestUrlMatch, hlsManifestUrlMatch, manifestUrl, playlistUrl;
9082
9082
  return _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().wrap(function _callee2$(_context2) {
9083
9083
  while (1) switch (_context2.prev = _context2.next) {
@@ -9657,7 +9657,11 @@ var RealTimeStream = /*#__PURE__*/function () {
9657
9657
  _this._channelContext.rtcVideoStatistic = statistics.video;
9658
9658
  }
9659
9659
  }
9660
- if ((videoTrackFailed || audioTrackFailed) && navigator.onLine) {
9660
+ if (!navigator.onLine) {
9661
+ _this._channelContext.state.value = _channels_ChannelState__WEBPACK_IMPORTED_MODULE_12__["default"].Offline;
9662
+ return;
9663
+ }
9664
+ if (videoTrackFailed || audioTrackFailed) {
9661
9665
  var retryCallback = function retryCallback() {
9662
9666
  _this._channelContext.state.value = _channels_ChannelState__WEBPACK_IMPORTED_MODULE_12__["default"].ConnectionError;
9663
9667
  if (_this._channelContext.videoElement.value) {
@@ -9674,7 +9678,7 @@ var RealTimeStream = /*#__PURE__*/function () {
9674
9678
  _this.reconnectPeerConnection(peerConnection, retryCallback);
9675
9679
  } else {
9676
9680
  _this._peerConnectionContext.peerConnectionReconnectAttempts = 0;
9677
- if (_this._channelContext.state.value !== _channels_ChannelState__WEBPACK_IMPORTED_MODULE_12__["default"].Reconnecting) {
9681
+ if (_this._channelContext.state.value !== _channels_ChannelState__WEBPACK_IMPORTED_MODULE_12__["default"].Reconnecting && _this._channelContext.state.value !== _channels_ChannelState__WEBPACK_IMPORTED_MODULE_12__["default"].Offline) {
9678
9682
  return;
9679
9683
  }
9680
9684
  _this._channelContext.state.value = _this._channelContext.playing.value ? _channels_ChannelState__WEBPACK_IMPORTED_MODULE_12__["default"].Playing : _channels_ChannelState__WEBPACK_IMPORTED_MODULE_12__["default"].Paused;
@@ -9698,7 +9702,7 @@ var RealTimeStream = /*#__PURE__*/function () {
9698
9702
  }, {
9699
9703
  key: "applyRtcConfiguration",
9700
9704
  value: function () {
9701
- var _applyRtcConfiguration = _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0___default()( /*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_5___default().mark(function _callee(optionalPeerConnection, rtcConfiguration) {
9705
+ var _applyRtcConfiguration = _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_5___default().mark(function _callee(optionalPeerConnection, rtcConfiguration) {
9702
9706
  var newRtcConfiguration;
9703
9707
  return _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_5___default().wrap(function _callee$(_context) {
9704
9708
  while (1) switch (_context.prev = _context.next) {
@@ -10256,7 +10260,7 @@ var InsertableStreams = /*#__PURE__*/function () {
10256
10260
  type: undefined
10257
10261
  });
10258
10262
  worker.onmessage = /*#__PURE__*/function () {
10259
- var _ref = _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0___default()( /*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_3___default().mark(function _callee(event) {
10263
+ var _ref = _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_3___default().mark(function _callee(event) {
10260
10264
  return _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_3___default().wrap(function _callee$(_context) {
10261
10265
  while (1) switch (_context.prev = _context.next) {
10262
10266
  case 0:
@@ -10290,7 +10294,7 @@ var InsertableStreams = /*#__PURE__*/function () {
10290
10294
  break;
10291
10295
  }
10292
10296
  var encodedStreamTransformCallback = /*#__PURE__*/function () {
10293
- var _ref2 = _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0___default()( /*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_3___default().mark(function _callee2(chunk, controller) {
10297
+ var _ref2 = _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_3___default().mark(function _callee2(chunk, controller) {
10294
10298
  var surrogate;
10295
10299
  return _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_3___default().wrap(function _callee2$(_context2) {
10296
10300
  while (1) switch (_context2.prev = _context2.next) {
@@ -10352,7 +10356,7 @@ var InsertableStreams = /*#__PURE__*/function () {
10352
10356
  type: undefined
10353
10357
  });
10354
10358
  _worker.onmessage = /*#__PURE__*/function () {
10355
- var _ref3 = _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0___default()( /*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_3___default().mark(function _callee3(event) {
10359
+ var _ref3 = _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_3___default().mark(function _callee3(event) {
10356
10360
  return _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_3___default().wrap(function _callee3$(_context3) {
10357
10361
  while (1) switch (_context3.prev = _context3.next) {
10358
10362
  case 0:
@@ -10391,7 +10395,7 @@ var InsertableStreams = /*#__PURE__*/function () {
10391
10395
  break;
10392
10396
  }
10393
10397
  var _encodedStreamTransformCallback = /*#__PURE__*/function () {
10394
- var _ref4 = _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0___default()( /*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_3___default().mark(function _callee4(chunk, controller) {
10398
+ var _ref4 = _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_3___default().mark(function _callee4(chunk, controller) {
10395
10399
  return _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_3___default().wrap(function _callee4$(_context4) {
10396
10400
  while (1) switch (_context4.prev = _context4.next) {
10397
10401
  case 0:
@@ -10808,7 +10812,7 @@ var VersionManager = /*#__PURE__*/function () {
10808
10812
  key: "sdkVersion",
10809
10813
  get: function get() {
10810
10814
  try {
10811
- return "2024-08-14T22:48:47.741Z (2024.2.1)";
10815
+ return "2024-10-31T15:21:28.861Z (2024.2.3-beta.340)";
10812
10816
  } catch (e) {
10813
10817
  return this._defaultVersion;
10814
10818
  }
@@ -11031,7 +11035,7 @@ var TelemetryService = /*#__PURE__*/function () {
11031
11035
  }, {
11032
11036
  key: "sendLogs",
11033
11037
  value: function () {
11034
- var _sendLogs = _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0___default()( /*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().mark(function _callee(logMessages) {
11038
+ var _sendLogs = _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().mark(function _callee(logMessages) {
11035
11039
  var formData;
11036
11040
  return _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().wrap(function _callee$(_context) {
11037
11041
  while (1) switch (_context.prev = _context.next) {
@@ -11061,7 +11065,7 @@ var TelemetryService = /*#__PURE__*/function () {
11061
11065
  }, {
11062
11066
  key: "sendLogsIfAble",
11063
11067
  value: function () {
11064
- var _sendLogsIfAble = _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0___default()( /*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().mark(function _callee2() {
11068
+ var _sendLogsIfAble = _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0___default()(/*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().mark(function _callee2() {
11065
11069
  var _this = this;
11066
11070
  var numberOfLogsToSend, sizeOfLogsToSend, getItemSize, getLogSize, logMessages;
11067
11071
  return _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().wrap(function _callee2$(_context2) {
@@ -11823,9 +11827,9 @@ module.exports = _defineProperty, module.exports.__esModule = true, module.expor
11823
11827
  /***/ ((module) => {
11824
11828
 
11825
11829
  function _getPrototypeOf(t) {
11826
- return (module.exports = _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) {
11830
+ return module.exports = _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) {
11827
11831
  return t.__proto__ || Object.getPrototypeOf(t);
11828
- }, module.exports.__esModule = true, module.exports["default"] = module.exports), _getPrototypeOf(t);
11832
+ }, module.exports.__esModule = true, module.exports["default"] = module.exports, _getPrototypeOf(t);
11829
11833
  }
11830
11834
  module.exports = _getPrototypeOf, module.exports.__esModule = true, module.exports["default"] = module.exports;
11831
11835
 
@@ -12268,9 +12272,9 @@ module.exports = _regeneratorRuntime, module.exports.__esModule = true, module.e
12268
12272
  /***/ ((module) => {
12269
12273
 
12270
12274
  function _setPrototypeOf(t, e) {
12271
- return (module.exports = _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) {
12275
+ return module.exports = _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) {
12272
12276
  return t.__proto__ = e, t;
12273
- }, module.exports.__esModule = true, module.exports["default"] = module.exports), _setPrototypeOf(t, e);
12277
+ }, module.exports.__esModule = true, module.exports["default"] = module.exports, _setPrototypeOf(t, e);
12274
12278
  }
12275
12279
  module.exports = _setPrototypeOf, module.exports.__esModule = true, module.exports["default"] = module.exports;
12276
12280
 
@@ -12356,11 +12360,11 @@ module.exports = toPropertyKey, module.exports.__esModule = true, module.exports
12356
12360
  function _typeof(o) {
12357
12361
  "@babel/helpers - typeof";
12358
12362
 
12359
- return (module.exports = _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) {
12363
+ return module.exports = _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) {
12360
12364
  return typeof o;
12361
12365
  } : function (o) {
12362
12366
  return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o;
12363
- }, module.exports.__esModule = true, module.exports["default"] = module.exports), _typeof(o);
12367
+ }, module.exports.__esModule = true, module.exports["default"] = module.exports, _typeof(o);
12364
12368
  }
12365
12369
  module.exports = _typeof, module.exports.__esModule = true, module.exports["default"] = module.exports;
12366
12370
 
@@ -12563,4 +12567,4 @@ __webpack_require__.r(__webpack_exports__);
12563
12567
  /******/ })()
12564
12568
  ;
12565
12569
  });
12566
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUM7QUFBQyxDQUFDO0FBQUFwMEMsMklBQUEsQ0FMdlJ1dkMseUJBQXlCLGtDQU1XO0VBQ3JEMEQsSUFBSSxFQUFFLElBQUltQixVQUFVLENBQUMsQ0FDbkIsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0VBQUU7RUFDcEMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtFQUFFO0VBQ3hLLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7RUFBRTtFQUM1RDtFQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztFQUFFO0VBQ3hMbEIsR0FBRyxFQUFFLElBQUlrQixVQUFVLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztFQUN6U2pCLEdBQUcsRUFBRSxJQUFJaUIsVUFBVSxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQztBQUNwTSxDQUFDO0FBQUFwMEMsMklBQUEsQ0Fka0J1dkMseUJBQXlCLGtDQWVXO0VBQ3JEMEQsSUFBSSxFQUFFLElBQUltQixVQUFVLENBQUMsQ0FDbkIsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0VBQUU7RUFDcEMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0VBQUU7RUFDMUdsQixHQUFHLEVBQUUsSUFBSWtCLFVBQVUsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVB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QTtXQUNBO1dBQ0E7V0FDQSx1REFBdUQsaUJBQWlCO1dBQ3hFO1dBQ0EsZ0RBQWdELGFBQWE7V0FDN0Q7Ozs7O1dDTkE7Ozs7O1dDQUE7O1dBRUE7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBOztXQUVBOztXQUVBOztXQUVBOztXQUVBOztXQUVBOztXQUVBOztXQUVBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNyQkE7QUFDQTtBQUNBOztBQUV5QjtBQUNtQjtBQUNRO0FBQ0w7QUFDUTtBQU92QztBQUdoQiwrREFBZTtFQUNiendDLEdBQUcsRUFBSEEsNENBQUc7RUFDSHF4QixRQUFRLEVBQVJBLDBEQUFRO0VBQ1JuTSxZQUFZLEVBQVpBLDhEQUFZO0VBQ1o0VyxVQUFVLEVBQVZBLDJEQUFVO0VBQ1Z4QixjQUFjLEVBQWRBLCtEQUFjQTtBQUNoQixDQUFDLEUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9kb20vQXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2RvbS9Ccm93c2VyRGV0ZWN0b3IudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2RvbS9Db25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9kb20vR2FyYmFnZUNvbGxlY3Rvck1hbmFnZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2RvbS9OZXR3b3JrTW9uaXRvci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZG9tL1N0cmVhbVNldHVwTGlzdGVuZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2VkZ2VBdXRoL0VkZ2VBdXRoUGFyc2VyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9lZGdlQXV0aC9FZGdlVG9rZW4udHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2Vudmlyb25tZW50L0J1aWxkRmVhdHVyZXMudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2Vudmlyb25tZW50L0ZlYXR1cmVFbmFibGVtZW50LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9lbnZpcm9ubWVudC9QYXJhbWV0ZXJzLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sYW5nL0Rpc3Bvc2FibGUudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xhbmcvRGlzcG9zYWJsZUxpc3QudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xhbmcvTnVtYmVycy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbGFuZy9TdHJpbmdzLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sYW5nL2Fzc2VydFVucmVhY2hhYmxlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sb2dnZXIvQXBwZW5kZXJzLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sb2dnZXIvQ29uc29sZUFwcGVuZGVyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sb2dnZXIvTG9nZ2VyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sb2dnZXIvTG9nZ2VyRGVmYXVsdHMudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xvZ2dlci9Mb2dnZXJGYWN0b3J5LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sb2dnZXIvTG9nZ2luZ0xldmVsTWFwcGluZy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbG9nZ2VyL0xvZ2dpbmdUaHJlc2hvbGQudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL21ldHJpY3MvTWV0cmljVHlwZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbWV0cmljcy9NZXRyaWNzQ29uZmlndXJhdGlvbi50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbWV0cmljcy9NZXRyaWNzRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbWV0cmljcy9NZXRyaWNzU2VydmljZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbWV0cmljcy9NZXRyaWNzVHlwZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbWV0cmljcy9UZWxlbWV0cmljTGV2ZWxNYXBwaW5nLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9tZXRyaWNzL1RlbGVtZXRyeURlZmF1bHQudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Byb21pc2UvUHJvbWlzZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcHJvbWlzZS9Qcm9taXNlSGFuZGxlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcnRjL1BlZXJDb25uZWN0aW9uU2VydmljZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcnRjL1J0Y0NvbmZpZ3VyYXRpb25NYW5hZ2VyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9ydGMvUnRjQ29ubmVjdGlvbk1vbml0b3IudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3J0Yy9SdGNQdWJsaXNoTW9uaXRvci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcnRjL1NkcFBhcnNlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcnRjL1ZhbmlsbGFQZWVyQ29ubmVjdGlvbi50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcnRjL1ZhbmlsbGFQZWVyQ29ubmVjdGlvbkZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3J4L1JlYWRPbmx5U3ViamVjdC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcngvU3ViamVjdC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL0Vudmlyb25tZW50LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvU0RLLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvVGVsZW1ldHJ5VXJsLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvYXBpL1NldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvY2hhbm5lbHMvQ2hhbm5lbC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2NoYW5uZWxzL0NoYW5uZWxTdGF0ZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2NoYW5uZWxzL0NoYW5uZWxzLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvY29udGV4dC9DaGFubmVsQ29udGV4dC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2NvbnRleHQvUGVlckNvbm5lY3Rpb25Db250ZXh0LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvY29udGV4dC9TdGF0ZUNvbnRleHQudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9jb250ZXh0L1N0cmVhbVRyYW5zZm9ybUNvbnRleHQudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9jb250ZXh0L1Rva2VuQ29udGV4dC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2RlZmF1bHRzLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGlzY292ZXJ5L0JpdHJhdGVNb2RlTWFwcGluZy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2Rpc2NvdmVyeS9CaXRyYXRlU3RhdGVNYXBwaW5nLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGlzY292ZXJ5L0Rpc2NvdmVyeS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2Rpc2NvdmVyeS9EaXNjb3ZlcnlTZXJ2aWNlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGlzY292ZXJ5L0Rpc2NvdmVyeVVyaS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2Rpc2NvdmVyeS9FbmRQb2ludC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3B1Ymxpc2gvUHVibGlzaGVyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvcHVibGlzaC9QdWJsaXNoZXJDb250ZXh0LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvcHVibGlzaC9QdWJsaXNoZXJTdGF0ZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3B1Ymxpc2gvUHVibGlzaGVycy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3B1Ymxpc2gvUmVhbFRpbWVQdWJsaXNoZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9zdHJlYW1pbmcvQ2h1bmtlZFN0cmVhbS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3N0cmVhbWluZy9DaHVua2VkU3RyZWFtUGxheWJhY2tNb2RlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvc3RyZWFtaW5nL0NodW5rZWRTdHJlYW1pbmcudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9zdHJlYW1pbmcvSGxzUGxheWVyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvc3RyZWFtaW5nL05ldHdvcmtTdGF0ZXMudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9zdHJlYW1pbmcvUmVhbFRpbWVTdHJlYW0udHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9zdHJlYW1pbmcvU2hha2FQbGF5ZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9zdHJlYW1pbmcvU3RyZWFtRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3N0cmVhbWluZy9XZWJQbGF5ZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay90cmFuc2Zvcm1hdGlvbi9FbmNvZGVkU3RyZWFtU2luay50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3RyYW5zZm9ybWF0aW9uL0luc2VydGFibGVTdHJlYW1zLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvdHJhbnNmb3JtYXRpb24vU3RyZWFtVHJhY2tUcmFuc2Zvcm0udHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay90cmFuc2Zvcm1hdGlvbi9TdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvdmVyc2lvbi9WZXJzaW9uTWFuYWdlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvdGVsZW1ldHJ5L1RlbGVtZXRyeUFwZW5kZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3RlbGVtZXRyeS9UZWxlbWV0cnlDb25maWd1cmF0aW9uLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy90ZWxlbWV0cnkvVGVsZW1ldHJ5U2VydmljZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvdGltZS9EdXJhdGlvbi50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvdGltZS9FeHBvbmVudGlhbEJhY2tvZmYudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3ZpZGVvL0RpbWVuc2lvbi50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvdmlkZW8vU2Vzc2lvblRlbGVtZXRyeS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvdmlkZW8vVmlkZW9UZWxlbWV0cnkudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXJyYXlMaWtlVG9BcnJheS5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9hcnJheVdpdGhIb2xlcy5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9hcnJheVdpdGhvdXRIb2xlcy5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXN5bmNUb0dlbmVyYXRvci5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjay5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcy5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9kZWZpbmVQcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9nZXRQcm90b3R5cGVPZi5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pbmhlcml0cy5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pdGVyYWJsZVRvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaXRlcmFibGVUb0FycmF5TGltaXQuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvbm9uSXRlcmFibGVSZXN0LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL25vbkl0ZXJhYmxlU3ByZWFkLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4uanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvcmVnZW5lcmF0b3JSdW50aW1lLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3NldFByb3RvdHlwZU9mLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3NsaWNlZFRvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvdG9Db25zdW1hYmxlQXJyYXkuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvdG9QcmltaXRpdmUuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvdG9Qcm9wZXJ0eUtleS5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy90eXBlb2YuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL3JlZ2VuZXJhdG9yL2luZGV4LmpzIiwid2VicGFjazovL3BoZW5peC93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay9ydW50aW1lL2NvbXBhdCBnZXQgZGVmYXVsdCBleHBvcnQiLCJ3ZWJwYWNrOi8vcGhlbml4L3dlYnBhY2svcnVudGltZS9kZWZpbmUgcHJvcGVydHkgZ2V0dGVycyIsIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay9ydW50aW1lL2dldCBqYXZhc2NyaXB0IGNodW5rIGZpbGVuYW1lIiwid2VicGFjazovL3BoZW5peC93ZWJwYWNrL3J1bnRpbWUvaGFzT3duUHJvcGVydHkgc2hvcnRoYW5kIiwid2VicGFjazovL3BoZW5peC93ZWJwYWNrL3J1bnRpbWUvbWFrZSBuYW1lc3BhY2Ugb2JqZWN0Iiwid2VicGFjazovL3BoZW5peC93ZWJwYWNrL3J1bnRpbWUvcHVibGljUGF0aCIsIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay9ydW50aW1lL2pzb25wIGNodW5rIGxvYWRpbmciLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9mdWxsL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFtdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcInBoZW5peFwiXSA9IGZhY3RvcnkoKTtcblx0ZWxzZVxuXHRcdHJvb3RbXCJwaGVuaXhcIl0gPSBmYWN0b3J5KCk7XG59KShzZWxmLCAoKSA9PiB7XG5yZXR1cm4gIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0Rpc3Bvc2FibGUnO1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vcngvU3ViamVjdCc7XG5pbXBvcnQgUmVhZE9ubHlTdWJqZWN0IGZyb20gJy4uL3J4L1JlYWRPbmx5U3ViamVjdCc7XG5pbXBvcnQgRGlzcG9zYWJsZUxpc3QgZnJvbSAnLi4vbGFuZy9EaXNwb3NhYmxlTGlzdCc7XG5cbmNvbnN0IGRlZmF1bHREb2N1bWVudEZvY3VzSW50ZXJ2YWxUaW1lb3V0ID0gMzAwMDtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3Ige1xuICBwcml2YXRlIHJlYWRvbmx5IF9kaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3QgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlJc0ZvcmVncm91bmQ6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfaXNGb3JlZ3JvdW5kOiBTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIF90aW1lT2ZMYXN0VGFiRm9jdXNDaGFuZ2U6IG51bWJlciA9IERhdGUubm93KCk7XG4gIHByaXZhdGUgX2RvY3VtZW50Rm9jdXNJbnRlcnZhbDogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuX2lzRm9yZWdyb3VuZCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xuICAgIHRoaXMuX3JlYWRPbmx5SXNGb3JlZ3JvdW5kID0gbmV3IFJlYWRPbmx5U3ViamVjdCh0aGlzLl9pc0ZvcmVncm91bmQpO1xuICAgIHRoaXMuZGV0ZWN0VGFiRm9jdXNDaGFuZ2UoKTtcbiAgfVxuXG4gIGdldCBpc0ZvcmVncm91bmQoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlJc0ZvcmVncm91bmQ7XG4gIH1cblxuICBnZXRUaW1lU2luY2VMYXN0Q2hhbmdlKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIERhdGUubm93KCkgLSB0aGlzLl90aW1lT2ZMYXN0VGFiRm9jdXNDaGFuZ2U7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgZGV0ZWN0VGFiRm9jdXNDaGFuZ2UoKTogdm9pZCB7XG4gICAgbGV0IGhpZGRlbjtcbiAgICBsZXQgdmlzaWJpbGl0eUNoYW5nZTtcblxuICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgIT09ICdvYmplY3QnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gRHVlIHRvIHR5cGVzY3JpcHQgbm90IGhhdmluZyBhIGRlZmluaXRpb24gZm9yICdtc0hpZGRlbicgb3IgJ3dlYmtpdEhpZGRlbicgdHlwZXNcbiAgICAvLyBSZXF1aXJlZCB0byBAdHMtaWdub3JlIHRvIHByZXZlbnQgdHlwZXNjcmlwdCBlcnJvcnNcbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnQgKi9cbiAgICAvLyBAdHMtaWdub3JlXG4gICAgaWYgKHR5cGVvZiBkb2N1bWVudC5tc0hpZGRlbiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGhpZGRlbiA9ICdtc0hpZGRlbic7XG4gICAgICB2aXNpYmlsaXR5Q2hhbmdlID0gJ21zdmlzaWJpbGl0eWNoYW5nZSc7XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZG9jdW1lbnQud2Via2l0SGlkZGVuICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgaGlkZGVuID0gJ3dlYmtpdEhpZGRlbic7XG4gICAgICB2aXNpYmlsaXR5Q2hhbmdlID0gJ3dlYmtpdHZpc2liaWxpdHljaGFuZ2UnO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGRvY3VtZW50LmhpZGRlbiAhPT0gJ3VuZGVmaW5lZCcpIHsgLy8gT3BlcmEgMTIuMTAgYW5kIEZpcmVmb3ggMTggYW5kIGxhdGVyIHN1cHBvcnRcbiAgICAgIGhpZGRlbiA9ICdoaWRkZW4nO1xuICAgICAgdmlzaWJpbGl0eUNoYW5nZSA9ICd2aXNpYmlsaXR5Y2hhbmdlJztcbiAgICB9XG4gICAgLyogZXNsaW50LWVuYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnQgKi9cblxuICAgIGNvbnN0IGhhbmRsZVZpc2liaWxpdHlDaGFuZ2UgPSAoKTogdm9pZCA9PiB7XG4gICAgICBjb25zdCBpc0ZvcmVncm91bmQgPSAhZG9jdW1lbnRbaGlkZGVuXTtcblxuICAgICAgdGhpcy5zZXRGb2N1c1N0YXRlKGlzRm9yZWdyb3VuZCk7XG4gICAgfTtcblxuICAgIGlmICh0eXBlb2YgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lciAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGRvY3VtZW50W2hpZGRlbl0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKHZpc2liaWxpdHlDaGFuZ2UsIGhhbmRsZVZpc2liaWxpdHlDaGFuZ2UsIGZhbHNlKTtcblxuICAgICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKG5ldyBEaXNwb3NhYmxlKCgpID0+IHtcbiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih2aXNpYmlsaXR5Q2hhbmdlLCBoYW5kbGVWaXNpYmlsaXR5Q2hhbmdlLCBmYWxzZSk7XG4gICAgICB9KSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubGlzdGVuRm9yRG9jdW1lbnRGb2N1cy5jYWxsKHRoaXMpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbGlzdGVuRm9yRG9jdW1lbnRGb2N1cygpOiB2b2lkIHtcbiAgICB0aGlzLl9kb2N1bWVudEZvY3VzSW50ZXJ2YWwgPSB3aW5kb3cuc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgY29uc3QgaXNGb3JlZ3JvdW5kID0gZG9jdW1lbnQuaGFzRm9jdXMoKTtcblxuICAgICAgdGhpcy5zZXRGb2N1c1N0YXRlKGlzRm9yZWdyb3VuZCk7XG4gICAgfSwgZGVmYXVsdERvY3VtZW50Rm9jdXNJbnRlcnZhbFRpbWVvdXQpO1xuXG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKG5ldyBEaXNwb3NhYmxlKCgpID0+IHtcbiAgICAgIGlmICh0aGlzLl9kb2N1bWVudEZvY3VzSW50ZXJ2YWwpIHtcbiAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLl9kb2N1bWVudEZvY3VzSW50ZXJ2YWwpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9kb2N1bWVudEZvY3VzSW50ZXJ2YWwgPSBudWxsO1xuICAgIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0Rm9jdXNTdGF0ZShpc0ZvcmVncm91bmQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5faXNGb3JlZ3JvdW5kID09PSBpc0ZvcmVncm91bmQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9pc0ZvcmVncm91bmQudmFsdWUgPSBpc0ZvcmVncm91bmQ7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJyb3dzZXJEZXRlY3RvciB7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9icm93c2VyTmFtZUFuZFZlcnNpb25SZWdleCA9IC8oTVNJRXwoPyFHZWNrby4rKUZpcmVmb3h8KD8hQXBwbGVXZWJLaXQuK0Nocm9tZS4rKVNhZmFyaXwoPyFBcHBsZVdlYktpdC4rKUNocm9tZXxBcHBsZVdlYktpdCg/IS4rQ2hyb21lfC4rU2FmYXJpKXxHZWNrbyg/IS4rRmlyZWZveCkpKD86IHxcXC8pKFtcXGQuYXByZV0rKS9nO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfYnJvd3Nlck5hbWVBbmRWZXJzaW9uID0gQnJvd3NlckRldGVjdG9yLnBhcnNlQnJvd3Nlck5hbWVBbmRWZXJzaW9uKCk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9icm93c2VyTmFtZSA9IEJyb3dzZXJEZXRlY3Rvci5wYXJzZUJyb3dzZXJOYW1lKCk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9icm93c2VyTWFqb3JWZXJzaW9uID0gQnJvd3NlckRldGVjdG9yLnBhcnNlQnJvd3Nlck1ham9yVmVyc2lvbigpO1xuXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc01vYmlsZSA9ICgvQW5kcm9pZHxpUGhvbmV8aVBhZHxpUG9kfEJsYWNrQmVycnl8T3BlcmEgTWluaS9pKS50ZXN0KG5hdmlnYXRvcj8udXNlckFnZW50KTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzQW5kcm9pZCA9ICgvQW5kcm9pZC9pKS50ZXN0KG5hdmlnYXRvcj8udXNlckFnZW50KTtcblxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNDaHJvbWU2OSA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNjkuJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc0Nocm9tZTcwID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uaW5jbHVkZXMoJ0Nocm9tZS83MC4nKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzQ2hyb21lNzEgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5pbmNsdWRlcygnQ2hyb21lLzcxLicpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNDaHJvbWU3MiA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNzIuJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc0Nocm9tZTc0ID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uaW5jbHVkZXMoJ0Nocm9tZS83NC4nKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzQ2hyb21lNzUgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5pbmNsdWRlcygnQ2hyb21lLzc1LicpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNDaHJvbWU3NiA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNzYuJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc0Nocm9tZTc3ID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uaW5jbHVkZXMoJ0Nocm9tZS83Ny4nKTtcblxuICBzdGF0aWMgZ2V0IGJyb3dzZXJOYW1lQW5kVmVyc2lvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYnJvd3Nlck5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fYnJvd3Nlck5hbWU7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGJyb3dzZXJNYWpvclZlcnNpb24oKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fYnJvd3Nlck1ham9yVmVyc2lvbjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNBbmRyb2lkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQW5kcm9pZDtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNDaHJvbWU2OSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0Nocm9tZTY5O1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0Nocm9tZTcwKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzA7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzQ2hyb21lNzEoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNDaHJvbWU3MTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNDaHJvbWU3MigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0Nocm9tZTcyO1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0Nocm9tZTc0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzQ7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzQ2hyb21lNzUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNDaHJvbWU3NTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNDaHJvbWU3NigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0Nocm9tZTc2O1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0Nocm9tZTc3KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzc7XG4gIH1cblxuICBzdGF0aWMgaXNNb2JpbGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNNb2JpbGU7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBwYXJzZUJyb3dzZXJOYW1lQW5kVmVyc2lvbigpOiBzdHJpbmcge1xuICAgIGlmICghbmF2aWdhdG9yIHx8ICFuYXZpZ2F0b3IudXNlckFnZW50KSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgY29uc3QgYnJvd3Nlck5hbWVBbmRWZXJzaW9uID0gbmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaChCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvblJlZ2V4KTtcblxuICAgIGlmIChicm93c2VyTmFtZUFuZFZlcnNpb24gJiYgYnJvd3Nlck5hbWVBbmRWZXJzaW9uWzBdKSB7XG4gICAgICByZXR1cm4gYnJvd3Nlck5hbWVBbmRWZXJzaW9uWzBdO1xuICAgIH1cblxuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IucGFyc2VCcm93c2VyTmFtZUFuZFZlcnNpb25Gb3JJRSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcGFyc2VCcm93c2VyTmFtZSgpOiBzdHJpbmcge1xuICAgIGlmICghQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24pIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBjb25zdCBicm93c2VyTmFtZUxpc3QgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5zcGxpdCgnLycpO1xuXG4gICAgaWYgKCFicm93c2VyTmFtZUxpc3QgfHwgIWJyb3dzZXJOYW1lTGlzdFswXSkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIHJldHVybiBicm93c2VyTmFtZUxpc3RbMF07XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBwYXJzZUJyb3dzZXJNYWpvclZlcnNpb24oKTogbnVtYmVyIHtcbiAgICBpZiAoIUJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICBjb25zdCBicm93c2VyVmVyc2lvbkxpc3QgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5zcGxpdCgnLycpO1xuXG4gICAgaWYgKCFicm93c2VyVmVyc2lvbkxpc3QgfHwgIWJyb3dzZXJWZXJzaW9uTGlzdFsxXSkge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgY29uc3QgZnVsbFZlcnNpb24gPSBicm93c2VyVmVyc2lvbkxpc3RbMV07XG5cbiAgICBpZiAoIWZ1bGxWZXJzaW9uKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICByZXR1cm4gTnVtYmVyKGZ1bGxWZXJzaW9uLnNwbGl0KCcuJylbMF0pIHx8IDA7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBwYXJzZUJyb3dzZXJOYW1lQW5kVmVyc2lvbkZvcklFKCk6IHN0cmluZyB7XG4gICAgaWYgKCFuYXZpZ2F0b3IgfHwgIW5hdmlnYXRvci51c2VyQWdlbnQpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBjb25zdCB1c2VyQWdlbnQgPSBuYXZpZ2F0b3IudXNlckFnZW50O1xuICAgIGNvbnN0IG1zaWUgPSB1c2VyQWdlbnQuaW5kZXhPZignTVNJRSAnKTtcblxuICAgIGlmIChtc2llID4gMCkge1xuICAgICAgLy8gSUUgMTAgb3Igb2xkZXIgPT4gcmV0dXJuIHZlcnNpb24gbnVtYmVyXG4gICAgICByZXR1cm4gYElFLyR7cGFyc2VJbnQodXNlckFnZW50LnN1YnN0cmluZyhtc2llICsgNSwgdXNlckFnZW50LmluZGV4T2YoJy4nLCBtc2llKSksIDEwKX1gO1xuICAgIH1cblxuICAgIGNvbnN0IHRyaWRlbnQgPSB1c2VyQWdlbnQuaW5kZXhPZignVHJpZGVudC8nKTtcblxuICAgIGlmICh0cmlkZW50ID4gMCkge1xuICAgICAgLy8gSUUgMTEgPT4gcmV0dXJuIHZlcnNpb24gbnVtYmVyXG4gICAgICBjb25zdCB2ZXJzaW9uID0gdXNlckFnZW50LmluZGV4T2YoJ3J2OicpO1xuXG4gICAgICByZXR1cm4gYElFLyR7cGFyc2VJbnQodXNlckFnZW50LnN1YnN0cmluZyh2ZXJzaW9uICsgMywgdXNlckFnZW50LmluZGV4T2YoJy4nLCB2ZXJzaW9uKSksIDEwKX1gO1xuICAgIH1cblxuICAgIHJldHVybiAnJztcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFRlbGVtZXRyeURlZmF1bHQgZnJvbSAnLi4vbWV0cmljcy9UZWxlbWV0cnlEZWZhdWx0JztcbmltcG9ydCBUZWxlbWV0cnlMZXZlbE1hcHBpbmcgZnJvbSAnLi4vbWV0cmljcy9UZWxlbWV0cmljTGV2ZWxNYXBwaW5nJztcbmltcG9ydCBMb2dnaW5nTGV2ZWxNYXBwaW5nIGZyb20gJy4uL2xvZ2dlci9Mb2dnaW5nTGV2ZWxNYXBwaW5nJztcbmltcG9ydCBMb2dnZXJEZWZhdWx0cyBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyRGVmYXVsdHMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyIHtcbiAgZ2V0U3RyaW5nVmFsdWUobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkQ29uZmlndXJhdGlvblBhcmFtZXRlclZhbHVlKG5hbWUpIHx8XG4gICAgICB0aGlzLnJlYWRDb25maWd1cmF0aW9uUGFyYW1ldGVyVVJJVmFsdWUoYCR7bmFtZX0tdXJpLXBhcmFtZXRlci1uYW1lYCkgfHxcbiAgICAgIHRoaXMuZGVmYXVsdFN0cmluZ1ZhbHVlW25hbWVdO1xuICB9XG5cbiAgZ2V0Qm9vbGVhblZhbHVlKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5yZWFkQ29uZmlndXJhdGlvblBhcmFtZXRlclZhbHVlKG5hbWUpO1xuXG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICByZXR1cm4gdmFsdWUgPT09ICd0cnVlJyB8fCB2YWx1ZSA9PT0gJzEnIHx8IHZhbHVlID09PSAnT24nO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlRnJvbVVyaSA9IHRoaXMucmVhZENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJVUklWYWx1ZShgJHtuYW1lfS11cmktcGFyYW1ldGVyLW5hbWVgKTtcblxuICAgIGlmICh2YWx1ZUZyb21VcmkpIHtcbiAgICAgIHJldHVybiB2YWx1ZUZyb21VcmkgPT09ICd0cnVlJyB8fCB2YWx1ZUZyb21VcmkgPT09ICcxJyB8fCB2YWx1ZUZyb21VcmkgPT09ICdPbic7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZGVmYXVsdEJvb2xlYW5WYWx1ZVtuYW1lXSA9PT0gdHJ1ZTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGRlZmF1bHRTdHJpbmdWYWx1ZSgpOiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmd9IHtcbiAgICByZXR1cm4ge1xuICAgICAgJ3BoZW5peC1tZXRyaWNzLWxldmVsJzogVGVsZW1ldHJ5TGV2ZWxNYXBwaW5nLmNvbnZlcnRUZWxlbWV0cnlMZXZlbFRvVGVsZW1ldHJ5TGV2ZWxUeXBlKFRlbGVtZXRyeURlZmF1bHQuZGVmYXVsdFRlbGVtZXRyeUxldmVsKSxcbiAgICAgICdwaGVuaXgtbG9nZ2luZy1sZXZlbCc6IExvZ2dpbmdMZXZlbE1hcHBpbmcuY29udmVydExvZ2dpbmdMZXZlbFRvTG9nZ2luZ0xldmVsVHlwZShMb2dnZXJEZWZhdWx0cy5kZWZhdWx0TG9nZ2luZ0xldmVsKSxcbiAgICAgICdwaGVuaXgtY29uc29sZS1sb2dnaW5nLWxldmVsJzogTG9nZ2luZ0xldmVsTWFwcGluZy5jb252ZXJ0TG9nZ2luZ0xldmVsVG9Mb2dnaW5nTGV2ZWxUeXBlKExvZ2dlckRlZmF1bHRzLmRlZmF1bHRDb25zb2xlTG9nZ2luZ0xldmVsKSxcbiAgICAgICdwaGVuaXgtdGVsZW1ldHJ5LWxvZ2dpbmctbGV2ZWwnOiBMb2dnaW5nTGV2ZWxNYXBwaW5nLmNvbnZlcnRMb2dnaW5nTGV2ZWxUb0xvZ2dpbmdMZXZlbFR5cGUoTG9nZ2VyRGVmYXVsdHMuZGVmYXVsdFRlbGVtZXRyeUxvZ2dpbmdMZXZlbCksXG4gICAgICAncGhlbml4LWNoYW5uZWwtdG9rZW4nOiAnJyxcbiAgICAgICdwaGVuaXgtdXJpJzogJycsXG4gICAgICAncGhlbml4LWJhc2UtdXJpJzogJydcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgZGVmYXVsdEJvb2xlYW5WYWx1ZSgpOiB7IFtuYW1lOiBzdHJpbmddOiBib29sZWFuIH0ge1xuICAgIHJldHVybiB7XG4gICAgICAncGhlbml4LWF1dG9tYXRpY2FsbHktcmV0cnktb24tZmFpbHVyZSc6IHRydWUsXG4gICAgICAncGhlbml4LWF1dG9tYXRpY2FsbHktcmVjb25uZWN0LXBlZXItY29ubmVjdGlvbic6IHRydWUsXG4gICAgICAncGhlbml4LWZvcmNlLWdhcmJhZ2UtY29sbGVjdGlvbi1vbi1yZXN0YXJ0JzogdHJ1ZSxcbiAgICAgICdwaGVuaXgtc2tpcC1nYXJiYWdlLWNvbGxlY3Rpb24tb24tbW9iaWxlLWRldmljZXMnOiB0cnVlXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJWYWx1ZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IG1ldGFWYWx1ZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYG1ldGFbbmFtZT0nJHtuYW1lfSddYCk7XG5cbiAgICBpZiAoIW1ldGFWYWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlID0gbWV0YVZhbHVlLmdldEF0dHJpYnV0ZSgndmFsdWUnKTtcblxuICAgIGlmICghdmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBwcml2YXRlIHJlYWRDb25maWd1cmF0aW9uUGFyYW1ldGVyVVJJVmFsdWUobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCB2YWx1ZVVSSVBhcmFtZXRlck5hbWUgPSB0aGlzLnJlYWRDb25maWd1cmF0aW9uUGFyYW1ldGVyVmFsdWUobmFtZSk7XG5cbiAgICBpZiAoIXZhbHVlVVJJUGFyYW1ldGVyTmFtZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlID0gbmV3IFVSTFNlYXJjaFBhcmFtcyhsb2NhdGlvbi5zZWFyY2gpLmdldCh2YWx1ZVVSSVBhcmFtZXRlck5hbWUpIHx8IHVuZGVmaW5lZDtcblxuICAgIGlmICghdmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBGZWF0dXJlRW5hYmxlbWVudCBmcm9tICcuLi9lbnZpcm9ubWVudC9GZWF0dXJlRW5hYmxlbWVudCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEdhcmJhZ2VDb2xsZWN0b3JNYW5hZ2VyIHtcbiAgc3RhdGljIGZvcmNlR2FyYmFnZUNvbGxlY3Rpb24oKTogdm9pZCB7XG4gICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LmlzRm9yY2VDaHJvbWVHYXJiYWdlQ29sbGVjdGlvblN1cHBvcnRlZCkge1xuICAgICAgdGhpcy5mb3JjZUNocm9tZUdhcmJhZ2VDb2xsZWN0aW9uKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgZm9yY2VDaHJvbWVHYXJiYWdlQ29sbGVjdGlvbigpOiB2b2lkIHtcbiAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQuaXNRdWV1ZU1pY3JvdGFza1N1cHBvcnRlZCkge1xuICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICB0aGlzLm92ZXJsb2FkTWVtb3J5VG9JbnZva2VHYXJiYWdlQ29sbGVjdGlvbigpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLm92ZXJsb2FkTWVtb3J5VG9JbnZva2VHYXJiYWdlQ29sbGVjdGlvbigpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgb3ZlcmxvYWRNZW1vcnlUb0ludm9rZUdhcmJhZ2VDb2xsZWN0aW9uKCk6IHZvaWQge1xuICAgIGxldCBpbWcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbWcnKTtcblxuICAgIGltZy5zcmMgPSB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChuZXcgQmxvYihbbmV3IEFycmF5QnVmZmVyKDEwZSs3KV0pKTsgLy8gMTAwTWIgb3IgbGVzcyBvciBtb3JlIGRlcGVuZGluZyBvbiBhcyB5b3Ugd2lzaCB0byBmb3JjZS9pbnZva2UgR0MgY3ljbGUgcnVuXG4gICAgaW1nLm9uZXJyb3IgPSBmdW5jdGlvbigpIHtcbiAgICAgIHdpbmRvdy5VUkwucmV2b2tlT2JqZWN0VVJMKHRoaXMuc3JjKTtcblxuICAgICAgaW1nID0gbnVsbDtcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0dhcmJhZ2VDb2xsZWN0b3JNYW5hZ2VyIGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5pbXBvcnQgRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0Rpc3Bvc2FibGUnO1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vcngvU3ViamVjdCc7XG5pbXBvcnQgRGlzcG9zYWJsZUxpc3QgZnJvbSAnLi4vbGFuZy9EaXNwb3NhYmxlTGlzdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5ldHdvcmtNb25pdG9yIGltcGxlbWVudHMgSURpc3Bvc2FibGUge1xuICBwcml2YXRlIHJlYWRvbmx5IF9kaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3QgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfaXNTdXBwb3J0ZWQgPSBuYXZpZ2F0b3IgJiYgbmF2aWdhdG9yWydjb25uZWN0aW9uJ107XG4gIHByaXZhdGUgcmVhZG9ubHkgX3J0dDogU3ViamVjdDxudW1iZXI+ID0gbmV3IFN1YmplY3QodW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZWZmZWN0aXZlVHlwZTogU3ViamVjdDxzdHJpbmc+ID0gbmV3IFN1YmplY3QodW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHk6IFN1YmplY3Q8bnVtYmVyPiA9IG5ldyBTdWJqZWN0KHVuZGVmaW5lZCk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgaWYgKCF0aGlzLmlzU3VwcG9ydGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zZXR1cE5ldHdvcmtDaGFuZ2VMaXN0ZW5lcnMoKTtcbiAgICB0aGlzLnVwZGF0ZVN0YXRpc3RpY3MoKTtcbiAgfVxuXG4gIGdldCBpc1N1cHBvcnRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faXNTdXBwb3J0ZWQ7XG4gIH1cblxuICBnZXQgcnR0KCk6IFN1YmplY3Q8bnVtYmVyPiB7XG4gICAgcmV0dXJuIHRoaXMuX3J0dDtcbiAgfVxuXG4gIGdldCBlZmZlY3RpdmVUeXBlKCk6IFN1YmplY3Q8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuX2VmZmVjdGl2ZVR5cGU7XG4gIH1cblxuICBnZXQgZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkoKTogU3ViamVjdDxudW1iZXI+IHtcbiAgICByZXR1cm4gdGhpcy5fZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHk7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkoKTogbnVtYmVyIHtcbiAgICBpZiAoIXRoaXMuaXNTdXBwb3J0ZWQpIHtcbiAgICAgIHJldHVybiAtMTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmF2aWdhdG9yWydjb25uZWN0aW9uJ10uZG93bmxpbmsgfHwgbmF2aWdhdG9yWydjb25uZWN0aW9uJ10uZG93bmxpbmtNYXg7XG4gIH1cblxuICBwcml2YXRlIGdldEVmZmVjdGl2ZVR5cGUoKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMuaXNTdXBwb3J0ZWQpIHtcbiAgICAgIHJldHVybiAnVW5rbm93bic7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5hdmlnYXRvclsnY29ubmVjdGlvbiddLmVmZmVjdGl2ZVR5cGUgfHwgbmF2aWdhdG9yWydjb25uZWN0aW9uJ10udHlwZTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Um91bmRUcmlwVGltZSgpOiBudW1iZXIge1xuICAgIHJldHVybiBuYXZpZ2F0b3JbJ2Nvbm5lY3Rpb24nXS5ydHQ7XG4gIH1cblxuICBwcml2YXRlIHNldHVwTmV0d29ya0NoYW5nZUxpc3RlbmVycygpOiB2b2lkIHtcbiAgICBjb25zdCBsaXN0ZW5lciA9ICgpOiB2b2lkID0+IHtcbiAgICAgIHRoaXMudXBkYXRlU3RhdGlzdGljcygpO1xuICAgIH07XG5cbiAgICBuYXZpZ2F0b3JbJ2Nvbm5lY3Rpb24nXS5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBsaXN0ZW5lcik7XG5cbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4ge1xuICAgICAgbmF2aWdhdG9yWydjb25uZWN0aW9uJ10ucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgbGlzdGVuZXIpO1xuICAgIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU3RhdGlzdGljcygpOiB2b2lkIHtcbiAgICB0aGlzLl9ydHQudmFsdWUgPSB0aGlzLmdldFJvdW5kVHJpcFRpbWUoKTtcbiAgICB0aGlzLl9lZmZlY3RpdmVUeXBlLnZhbHVlID0gdGhpcy5nZXRFZmZlY3RpdmVUeXBlKCk7XG4gICAgdGhpcy5fZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkudmFsdWUgPSB0aGlzLmdldERvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5KCk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBNZXRyaWNzVHlwZSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NUeXBlJztcbmltcG9ydCBNZXRyaWNUeXBlIGZyb20gJy4uL21ldHJpY3MvTWV0cmljVHlwZSc7XG5pbXBvcnQgRHVyYXRpb25zIGZyb20gJy4uL3RpbWUvRHVyYXRpb24nO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBTREsgZnJvbSAnLi4vc2RrL1NESyc7XG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5cbmV4cG9ydCBjbGFzcyBTdHJlYW1TZXR1cExpc3RlbmVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1N0cmVhbVNldHVwTGlzdGVuZXInKTtcbiAgcHJpdmF0ZSByZWFkb25seSBtZXRyaWNzU2VydmljZSA9IFNESy5tZXRyaWNzU2VydmljZTtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGFnZUxvYWRUaW1lOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N0YXJ0VGltZTogbnVtYmVyO1xuICBwcml2YXRlIF9tZXRyaWNTdWJtaXR0ZWQgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihwYWdlTG9hZFRpbWU6IG51bWJlcikge1xuICAgIHRoaXMuX3N0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gICAgdGhpcy5fcGFnZUxvYWRUaW1lID0gcGFnZUxvYWRUaW1lO1xuICB9XG5cbiAgc3VjY2VzcyhzdHJlYW1JZCk6IHZvaWQge1xuICAgIHRoaXMucmVjb3JkU3RyZWFtTWV0cmljKE1ldHJpY3NUeXBlLlNldHVwQ29tcGxldGVkLCBzdHJlYW1JZCk7XG4gIH1cblxuICBmYWlsKCk6IHZvaWQge1xuICAgIHRoaXMucmVjb3JkU3RyZWFtTWV0cmljKE1ldHJpY3NUeXBlLlNldHVwRmFpbGVkKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVjb3JkU3RyZWFtTWV0cmljKG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLCBzdHJlYW1JZD86IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9tZXRyaWNTdWJtaXR0ZWQpIHtcbiAgICAgIHJldHVybiA7XG4gICAgfVxuXG4gICAgdGhpcy5fbWV0cmljU3VibWl0dGVkID0gdHJ1ZTtcblxuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc3Qgc2V0dXBUaW1lID0gbm93IC0gdGhpcy5fc3RhcnRUaW1lO1xuICAgIGNvbnN0IG1ldHJpY05hbWUgPSBuZXcgTWV0cmljVHlwZShtZXRyaWNUeXBlKS5nZXROYW1lKCk7XG5cbiAgICB0aGlzLm1ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZSxcbiAgICAgIHJ1bnRpbWU6IChub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHZhbHVlOiB7dWludDY0OiBzZXR1cFRpbWV9LFxuICAgICAgc3RyZWFtSWRcbiAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ1slc10gWyVzXSBTdHJlYW0gbWV0cmljIFslc10gaW4gWyVzXScsXG4gICAgICBuZXcgRHVyYXRpb25zKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkudG9Jc29TdHJpbmcoKSxcbiAgICAgIHN0cmVhbUlkLFxuICAgICAgbWV0cmljTmFtZSxcbiAgICAgIG5ldyBEdXJhdGlvbnMoc2V0dXBUaW1lKS50b0lzb1N0cmluZygpXG4gICAgKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBFZGdlVG9rZW4gZnJvbSAnLi9FZGdlVG9rZW4nO1xuaW1wb3J0IHtFbmNvZGVkRWRnZVRva2VufSBmcm9tICcuL0VuY29kZWRFZGdlVG9rZW4nO1xuXG5jb25zdCBlZGdlQXV0aFRva2VuUHJlZml4ID0gJ0RJR0VTVDonO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFZGdlQXV0aFBhcnNlciB7XG4gIHByaXZhdGUgc3RhdGljIF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignRWRnZUF1dGhQYXJzZXInKTtcblxuICBzdGF0aWMgcGFyc2VUb2tlbih0b2tlbjogRW5jb2RlZEVkZ2VUb2tlbik6IEVkZ2VUb2tlbiB7XG4gICAgaWYgKCF0aGlzLmlzRW5jb2RlZEVkZ2VUb2tlblZhbGlkKHRva2VuKSkge1xuICAgICAgRWRnZUF1dGhQYXJzZXIuX2xvZ2dlci5lcnJvcignVG9rZW4gaXMgbm90IHZhbGlkIFslc10nLCB0b2tlbik7XG5cbiAgICAgIHJldHVybiBuZXcgRWRnZVRva2VuKG51bGwpO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBkZWNvZGVkVG9rZW4gPSBhdG9iKHRva2VuLnN1YnN0cihlZGdlQXV0aFRva2VuUHJlZml4Lmxlbmd0aCkpO1xuICAgICAgY29uc3QgZWRnZVRva2VuID0gSlNPTi5wYXJzZShkZWNvZGVkVG9rZW4pO1xuXG4gICAgICBlZGdlVG9rZW4udG9rZW4gPSBKU09OLnBhcnNlKGVkZ2VUb2tlbi50b2tlbik7XG5cbiAgICAgIHJldHVybiBuZXcgRWRnZVRva2VuKGVkZ2VUb2tlbik7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgRWRnZUF1dGhQYXJzZXIuX2xvZ2dlci5lcnJvcignQ2Fubm90IHBhcnNlIHRva2VuIHZhbHVlJywgZSk7XG5cbiAgICAgIHJldHVybiBuZXcgRWRnZVRva2VuKG51bGwpO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBpc0VuY29kZWRFZGdlVG9rZW5WYWxpZCh0b2tlbjogRW5jb2RlZEVkZ2VUb2tlbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRva2VuICYmIHRva2VuLnN0YXJ0c1dpdGgoZWRnZUF1dGhUb2tlblByZWZpeCk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmludGVyZmFjZSBJVG9rZW4ge1xuICB1cmk6IFVSTCB8IG51bGw7XG4gIGNhcGFiaWxpdGllczogc3RyaW5nW107XG59XG5cbmludGVyZmFjZSBJRWRnZVRva2VuIHtcbiAgYXBwbGljYXRpb25JZDogc3RyaW5nO1xuICB0b2tlbjogSVRva2VuO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFZGdlVG9rZW4ge1xuICBwcml2YXRlIHJlYWRvbmx5IF9hcHBsaWNhdGlvbklkOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3Rva2VuOiBJVG9rZW47XG5cbiAgY29uc3RydWN0b3IoZWRnZVRva2VuOiBJRWRnZVRva2VuKSB7XG4gICAgdGhpcy5fYXBwbGljYXRpb25JZCA9IGVkZ2VUb2tlbj8uYXBwbGljYXRpb25JZCB8fCAnJztcbiAgICB0aGlzLl90b2tlbiA9IHtcbiAgICAgIHVyaTogZWRnZVRva2VuPy50b2tlbj8udXJpID8gbmV3IFVSTChlZGdlVG9rZW4udG9rZW4udXJpKSA6IG51bGwsXG4gICAgICBjYXBhYmlsaXRpZXM6IGVkZ2VUb2tlbj8udG9rZW4/LmNhcGFiaWxpdGllcyB8fCBbXVxuICAgIH07XG4gIH1cblxuICBnZXQgdXJpKCk6IFVSTCB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl90b2tlbi51cmk7XG4gIH1cblxuICBnZXQgY2FwYWJpbGl0aWVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5fdG9rZW4uY2FwYWJpbGl0aWVzO1xuICB9XG5cbiAgZ2V0IHRlbmFuY3koKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fYXBwbGljYXRpb25JZDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtMb2dnaW5nTGV2ZWxUeXBlfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyJztcbmltcG9ydCB7VGVsZW1ldHJ5TGV2ZWxUeXBlfSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NDb25maWd1cmF0aW9uJztcblxuZGVjbGFyZSBjb25zdCBfX0ZFQVRVUkVTX186IHtcbiAgc2VuZExvY2FsQ2FuZGlkYXRlczogYm9vbGVhbjtcbiAgc2VuZExvZ3M6IExvZ2dpbmdMZXZlbFR5cGU7XG4gIHNlbmRNZXRyaWNzOiBUZWxlbWV0cnlMZXZlbFR5cGU7XG4gIGxvZ1RvQ29uc29sZTogTG9nZ2luZ0xldmVsVHlwZTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJ1aWxkRmVhdHVyZXMge1xuICBwcml2YXRlIHN0YXRpYyBfc2VuZExvY2FsQ2FuZGlkYXRlczogYm9vbGVhbjtcbiAgcHJpdmF0ZSBzdGF0aWMgX3NlbmRMb2dzOiBMb2dnaW5nTGV2ZWxUeXBlO1xuICBwcml2YXRlIHN0YXRpYyBfc2VuZE1ldHJpY3M6IFRlbGVtZXRyeUxldmVsVHlwZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX2xvZ1RvQ29uc29sZTogTG9nZ2luZ0xldmVsVHlwZTtcblxuICBzdGF0aWMgZ2V0IHNlbmRMb2NhbENhbmRpZGF0ZXMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbmRMb2NhbENhbmRpZGF0ZXM7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHNlbmRMb2dzKCk6IExvZ2dpbmdMZXZlbFR5cGUge1xuICAgIHJldHVybiB0aGlzLl9zZW5kTG9ncztcbiAgfVxuXG4gIHN0YXRpYyBnZXQgc2VuZE1ldHJpY3MoKTogVGVsZW1ldHJ5TGV2ZWxUeXBlIHtcbiAgICByZXR1cm4gdGhpcy5fc2VuZE1ldHJpY3M7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGxvZ1RvQ29uc29sZSgpOiBMb2dnaW5nTGV2ZWxUeXBlIHtcbiAgICByZXR1cm4gdGhpcy5fbG9nVG9Db25zb2xlO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5RmVhdHVyZXMoKTogdm9pZCB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGZlYXR1cmVzID0gX19GRUFUVVJFU19fO1xuXG4gICAgICB0aGlzLl9zZW5kTG9jYWxDYW5kaWRhdGVzID0gJ3NlbmRMb2NhbENhbmRpZGF0ZXMnIGluIGZlYXR1cmVzID8gZmVhdHVyZXMuc2VuZExvY2FsQ2FuZGlkYXRlcyA6IHRydWU7XG4gICAgICB0aGlzLl9zZW5kTG9ncyA9ICdzZW5kTG9ncycgaW4gZmVhdHVyZXMgPyBmZWF0dXJlcy5zZW5kTG9ncyA6ICdBbGwnO1xuICAgICAgdGhpcy5fc2VuZE1ldHJpY3MgPSAnc2VuZE1ldHJpY3MnIGluIGZlYXR1cmVzID8gZmVhdHVyZXMuc2VuZE1ldHJpY3MgOiAnQWxsJztcbiAgICAgIHRoaXMuX2xvZ1RvQ29uc29sZSA9ICdsb2dUb0NvbnNvbGUnIGluIGZlYXR1cmVzID8gZmVhdHVyZXMubG9nVG9Db25zb2xlIDogJ0FsbCc7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5fc2VuZExvY2FsQ2FuZGlkYXRlcyA9IHRydWU7XG4gICAgICB0aGlzLl9zZW5kTG9ncyA9ICdBbGwnO1xuICAgICAgdGhpcy5fc2VuZE1ldHJpY3MgPSAnQWxsJztcbiAgICAgIHRoaXMuX2xvZ1RvQ29uc29sZSA9ICdBbGwnO1xuICAgIH1cbiAgfVxufVxuXG5CdWlsZEZlYXR1cmVzLmFwcGx5RmVhdHVyZXMoKTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBCcm93c2VyRGV0ZWN0b3IgZnJvbSAnLi4vZG9tL0Jyb3dzZXJEZXRlY3Rvcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZlYXR1cmVFbmFibGVtZW50IHtcbiAgc3RhdGljIGdldCBjbGllbnRPZmZlckRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIC8vIENsaWVudCBvZmZlciB3b3JrZmxvdyBkb2VzIG5vdCB3b3JrIGNvcnJlY3RseSBpbiB0aGUgZm9sbG93aW5nIGJyb3dzZXJzXG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5pc0Nocm9tZTc0IHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuaXNDaHJvbWU3NSB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmlzQ2hyb21lNzYgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5pc0Nocm9tZTc3O1xuICB9XG5cbiAgc3RhdGljIGdldCBhZGRUcmFuY2VpdmVyRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgLy8gQ2hyb21lIDY5LCA3MCwgNzEsIDcyIGV4cG9zZXMgYGFkZFRyYW5jZWl2ZXJgIGJ1dCBpdCBkb2VzIG5vdCB3b3JrIGNvcnJlY3RseVxuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuaXNDaHJvbWU2OSB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmlzQ2hyb21lNzAgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5pc0Nocm9tZTcxIHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuaXNDaHJvbWU3MjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgZ2V0U3RhdHNQcm9taXNlQmFzZWREaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnQ2hyb21lJyAmJiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck1ham9yVmVyc2lvbiA8PSA2NjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgZ2V0Q3VycmVudE9mZmVyRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0Nocm9tZScgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJNYWpvclZlcnNpb24gPD0gNjkgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0ZpcmVmb3gnICYmIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTWFqb3JWZXJzaW9uIDw9IDU2O1xuICB9XG5cbiAgc3RhdGljIGdldCBvblRyYWNrRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0Nocm9tZScgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJNYWpvclZlcnNpb24gPD0gNjMgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0ZpcmVmb3gnICYmIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTWFqb3JWZXJzaW9uIDw9IDUyO1xuICB9XG5cbiAgc3RhdGljIGdldCB3ZWJraXRSVENQZWVyQ29ubmVjdGlvbkVuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0Nocm9tZScgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJNYWpvclZlcnNpb24gPD0gNTU7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHByb21pc2VCYXNlZFBDTWV0aG9kc0Rpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdGaXJlZm94JyAmJiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck1ham9yVmVyc2lvbiA8PSA1MjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgc2hvdWxkVXNlTmF0aXZlSGxzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdTYWZhcmknIHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdTYW1zdW5nQnJvd3Nlcic7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzUHJlY2FjaGluZ0VuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSAhPT0gJ0lFJztcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNGb3JjZUNocm9tZUdhcmJhZ2VDb2xsZWN0aW9uU3VwcG9ydGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdDaHJvbWUnICYmIHR5cGVvZiBkb2N1bWVudD8uY3JlYXRlRWxlbWVudCA9PT0gJ2Z1bmN0aW9uJztcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNRdWV1ZU1pY3JvdGFza1N1cHBvcnRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnQ2hyb21lJyAmJiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck1ham9yVmVyc2lvbiA+PSA3MSB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnRmlyZWZveCcgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJNYWpvclZlcnNpb24gPj0gNjkgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ1NhZmFyaSc7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzTW9iaWxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuaXNNb2JpbGUoKTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNJbnNlcnRhYmxlU3RyZWFtc1N1cHBvcnRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISh0eXBlb2YgTWVkaWFTdHJlYW1UcmFja1Byb2Nlc3NvciA9PT0gJ3VuZGVmaW5lZCcgfHxcbiAgICAgIHR5cGVvZiBNZWRpYVN0cmVhbVRyYWNrR2VuZXJhdG9yID09PSAndW5kZWZpbmVkJyk7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzRW5jb2RlZEluc2VydGFibGVTdHJlYW1zU3VwcG9ydGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0eXBlb2YgUlRDUnRwUmVjZWl2ZXIgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBSVENSdHBSZWNlaXZlci5wcm90b3R5cGUuY3JlYXRlRW5jb2RlZFN0cmVhbXMgIT09ICd1bmRlZmluZWQnO1xuICB9XG5cbiAgc3RhdGljIGdldCBpc1JUQ1J0cFNjcmlwdFRyYW5zZm9ybVN1cHBvcnRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHlwZW9mIFJUQ1J0cFNjcmlwdFRyYW5zZm9ybSAhPT0gJ3VuZGVmaW5lZCc7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGVycm9yU3RhY2tBbHNvSGFzRXJyb3JNZXNzYWdlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgIT09ICdGaXJlZm94JyAmJiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgIT09ICdTYWZhcmknO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5kZWNsYXJlIGNvbnN0IF9fUEFSQU1FVEVSU19fOiB7XG4gIGRpc2NvdmVyeTogSURpc2NvdmVyeVBhcmFtZXRlcjtcbn07XG5cbmludGVyZmFjZSBJRGlzY292ZXJ5UGFyYW1ldGVye1xuICBpbnRlbnRpb25zOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBhcmFtZXRlcnMge1xuICBwcml2YXRlIHN0YXRpYyBfZGlzY292ZXJ5UGFyYW1ldGVyczogSURpc2NvdmVyeVBhcmFtZXRlciA7XG5cbiAgc3RhdGljIGdldCBkaXNjb3ZlcnlQYXJhbWV0ZXJzKCk6IElEaXNjb3ZlcnlQYXJhbWV0ZXIge1xuICAgIHJldHVybiB0aGlzLl9kaXNjb3ZlcnlQYXJhbWV0ZXJzO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5UGFyYW1ldGVycygpOiB2b2lkIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcGFyYW1ldGVycyA9IF9fUEFSQU1FVEVSU19fO1xuXG4gICAgICB0aGlzLl9kaXNjb3ZlcnlQYXJhbWV0ZXJzID0gJ2Rpc2NvdmVyeScgaW4gcGFyYW1ldGVycyA/IHBhcmFtZXRlcnMuZGlzY292ZXJ5IDoge2ludGVudGlvbnM6ICcnfTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLl9kaXNjb3ZlcnlQYXJhbWV0ZXJzID0ge2ludGVudGlvbnM6ICcnfTtcbiAgICB9XG4gIH1cbn1cblxuUGFyYW1ldGVycy5hcHBseVBhcmFtZXRlcnMoKTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuL0lEaXNwb3NhYmxlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGlzcG9zYWJsZSBpbXBsZW1lbnRzIElEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSBfZGlzcG9zZWQ6IGJvb2xlYW47XG4gIHByaXZhdGUgX2Rpc3Bvc2FibGU6ICgpID0+IHZvaWQ7XG5cbiAgY29uc3RydWN0b3IoZGlzcG9zYWJsZTogKCkgPT4gdm9pZCkge1xuICAgIHRoaXMuX2Rpc3Bvc2VkID0gZmFsc2U7XG4gICAgdGhpcy5fZGlzcG9zYWJsZSA9IGRpc3Bvc2FibGU7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9kaXNwb3NlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2Rpc3Bvc2VkID0gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzLl9kaXNwb3NhYmxlLmNhbGwodGhpcyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuL0lEaXNwb3NhYmxlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGlzcG9zYWJsZUxpc3Qge1xuICBwcml2YXRlIHJlYWRvbmx5IF9saXN0OiBJRGlzcG9zYWJsZVtdID0gW107XG5cbiAgYWRkKGRpc3Bvc2FibGU6IElEaXNwb3NhYmxlKTogdm9pZCB7XG4gICAgdGhpcy5fbGlzdC5wdXNoKGRpc3Bvc2FibGUpO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9saXN0LmZvckVhY2goZGlzcG9zYWJsZSA9PiBkaXNwb3NhYmxlLmRpc3Bvc2UoKSk7XG4gICAgdGhpcy5fbGlzdC5sZW5ndGggPSAwO1xuICB9XG5cbiAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYERpc3Bvc2FibGVMaXN0W2Rpc3Bvc2FibGVzPSR7dGhpcy5fbGlzdC5sZW5ndGh9XWA7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbi8vIEFzIGZsb2F0IGluIEVDTUFTY3JpcHQgdXNlIDY0LWJpdCBmb3JtYXQgaXQgY2Fubm90IGhhdmUvaGFuZGxlIG1vcmUgdGhhbiAxNSBzeW1ib2xzIGFmdGVyIGRvdC5cbmNvbnN0IG1heERpZ2l0c0luRmxvYXRBZnRlckRvdCA9IDE1O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOdW1iZXJzIHtcbiAgc3RhdGljIGNvdW50TnVtYmVyTGVuZ3RoKHZhbHVlOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGxldCBpbmNyZW1lbnRGb3JOZWdhdGl2ZVZhbHVlID0gMDtcbiAgICBsZXQgbnVtYmVyID0gdmFsdWU7XG5cbiAgICBpZiAobnVtYmVyIDwgMCkge1xuICAgICAgbnVtYmVyICo9IC0xO1xuICAgICAgaW5jcmVtZW50Rm9yTmVnYXRpdmVWYWx1ZSsrO1xuICAgIH1cblxuICAgIHJldHVybiBOdW1iZXJzLmNvdW50RGlnaXRzQmVmb3JlRGVjaW1hbChudW1iZXIpICsgaW5jcmVtZW50Rm9yTmVnYXRpdmVWYWx1ZSArIChudW1iZXIgIT09IE1hdGguZmxvb3IobnVtYmVyKSA/IE51bWJlcnMuY291bnREaWdpdHNBZnRlckRlY2ltYWwobnVtYmVyKSArIDEgOiAwKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGZpeFJvdW5kaW5nKHZhbHVlOiBudW1iZXIsIHByZWNpc2lvbjogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBjb25zdCBwb3dlciA9IE1hdGgucG93KDEwLCBwcmVjaXNpb24pO1xuXG4gICAgcmV0dXJuIE1hdGgucm91bmQodmFsdWUgKiBwb3dlcikgLyBwb3dlcjtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGNvdW50RGlnaXRzQmVmb3JlRGVjaW1hbCh2YWx1ZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBsZXQgZGlnaXRzQmVmb3JlRGVjaW1hbCA9IDE7XG4gICAgbGV0IG51bWJlciA9IHZhbHVlO1xuXG4gICAgd2hpbGUgKG51bWJlciA+PSAxMCkge1xuICAgICAgbnVtYmVyID0gbnVtYmVyIC8gMTA7XG4gICAgICBkaWdpdHNCZWZvcmVEZWNpbWFsKys7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRpZ2l0c0JlZm9yZURlY2ltYWw7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBjb3VudERpZ2l0c0FmdGVyRGVjaW1hbCh2YWx1ZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBjb25zdCBvcmlnaW5hbFZhbHVlID0gdmFsdWU7XG4gICAgbGV0IG1vZGlmaWVkVmFsdWUgPSBNYXRoLmZsb29yKHZhbHVlKTtcbiAgICBsZXQgY291bnQgPSAwO1xuXG4gICAgd2hpbGUgKG1vZGlmaWVkVmFsdWUgIT09IG9yaWdpbmFsVmFsdWUgJiYgY291bnQgPCBtYXhEaWdpdHNJbkZsb2F0QWZ0ZXJEb3QpIHtcbiAgICAgIGNvdW50Kys7XG4gICAgICBtb2RpZmllZFZhbHVlID0gTnVtYmVycy5maXhSb3VuZGluZyhvcmlnaW5hbFZhbHVlLCBjb3VudCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvdW50O1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ051bWJlcnMgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdHJpbmdzIHtcbiAgc3RhdGljIHJhbmRvbShsZW5ndGg6IG51bWJlcik6IHN0cmluZyB7XG4gICAgY29uc3QgcmFuZG9tMTNDaGFyYWN0ZXJzID0gKCk6IHN0cmluZyA9PiB7XG4gICAgICByZXR1cm4gTWF0aC5yYW5kb20oKS50b1N0cmluZygxNikuc3Vic3RyaW5nKDIsIDE1KTtcbiAgICB9O1xuXG4gICAgY29uc3QgbG9vcHM6IG51bWJlciA9IE1hdGguY2VpbChsZW5ndGggLyAxMyk7XG5cbiAgICByZXR1cm4gbmV3IEFycmF5KGxvb3BzKS5maWxsKHJhbmRvbTEzQ2hhcmFjdGVycykucmVkdWNlKChzdHJpbmcsIGZ1bmMpID0+IHtcbiAgICAgIHJldHVybiBzdHJpbmcgKyBmdW5jKCk7XG4gICAgfSwgJycpLnN1YnN0cmluZygwLCBsZW5ndGgpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1N0cmluZ3MgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0VW5yZWFjaGFibGUoeDogbmV2ZXIpOiBuZXZlciB7XG4gIHRocm93IG5ldyBFcnJvcihgVW5leHBlY3RlZCB2YWx1ZSBbJHt4fV0uIFRoaXMgc2hvdWxkIG5ldmVyIGJlIHJlYWNoZWRgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYXNzZXJ0VW5yZWFjaGFibGU7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0lBcHBlbmRlcn0gZnJvbSAnLi9JQXBwZW5kZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBcHBlbmRlcnMge1xuICBwcml2YXRlIF9hcHBlbmRlcnM6IEFycmF5PElBcHBlbmRlcj4gPSBbXTtcblxuICBnZXQgdmFsdWUoKTogQXJyYXk8SUFwcGVuZGVyPiB7XG4gICAgcmV0dXJuIHRoaXMuX2FwcGVuZGVycztcbiAgfVxuXG4gIGFkZChhcHBlbmRlcjogSUFwcGVuZGVyKTogdm9pZCB7XG4gICAgdGhpcy5fYXBwZW5kZXJzLnB1c2goYXBwZW5kZXIpO1xuICB9XG5cbiAgcmVtb3ZlKGFwcGVuZGVyKTogdm9pZCB7XG4gICAgdGhpcy5fYXBwZW5kZXJzID0gdGhpcy5fYXBwZW5kZXJzLnJlZHVjZSgoaXRlbXMsIGl0ZW0pID0+IHtcbiAgICAgIGlmICghKGl0ZW0gPT09IGFwcGVuZGVyKSkge1xuICAgICAgICBpdGVtcy5wdXNoKGl0ZW0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gaXRlbXM7XG4gICAgfSwgW10gYXMgQXJyYXk8SUFwcGVuZGVyPik7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7SUFwcGVuZGVyfSBmcm9tICcuL0lBcHBlbmRlcic7XG5pbXBvcnQge0xvZ2dpbmdMZXZlbH0gZnJvbSAnLi9Mb2dnZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb25zb2xlQXBwZW5kZXIgaW1wbGVtZW50cyBJQXBwZW5kZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF90aHJlc2hvbGQ6IExvZ2dpbmdMZXZlbDtcblxuICBsb2cobG9nTGV2ZWw6IExvZ2dpbmdMZXZlbCwgbWVzc2FnZTogc3RyaW5nLCBjYXRlZ29yeTogc3RyaW5nLCBkYXRlOiBEYXRlKTogdm9pZCB7XG4gICAgaWYgKGxvZ0xldmVsIDwgdGhpcy5fdGhyZXNob2xkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZnVsbE1lc3NhZ2UgPSBgJHtkYXRlLnRvSVNPU3RyaW5nKCl9IFske2NhdGVnb3J5fV0gWyR7TG9nZ2luZ0xldmVsW2xvZ0xldmVsXX1dICR7bWVzc2FnZX1gO1xuXG4gICAgaWYgKGxvZ0xldmVsIDwgTG9nZ2luZ0xldmVsLldhcm4pIHtcbiAgICAgIGNvbnNvbGUubG9nKGZ1bGxNZXNzYWdlKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnNvbGUuZXJyb3IoZnVsbE1lc3NhZ2UpO1xuICB9XG5cbiAgY29uc3RydWN0b3IodGhyZXNob2xkOiBMb2dnaW5nTGV2ZWwpIHtcbiAgICB0aGlzLl90aHJlc2hvbGQgPSB0aHJlc2hvbGQ7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCB7SUFwcGVuZGVyfSBmcm9tICcuL0lBcHBlbmRlcic7XG5pbXBvcnQgQXBwZW5kZXJzIGZyb20gJy4vQXBwZW5kZXJzJztcbmltcG9ydCBMb2dnaW5nVGhyZXNob2xkIGZyb20gJy4vTG9nZ2luZ1RocmVzaG9sZCc7XG5pbXBvcnQgRmVhdHVyZUVuYWJsZW1lbnQgZnJvbSAnLi4vZW52aXJvbm1lbnQvRmVhdHVyZUVuYWJsZW1lbnQnO1xuXG5leHBvcnQgZW51bSBMb2dnaW5nTGV2ZWwge1xuICBBbGwgPSAtMSxcbiAgVHJhY2UgPSAxMCxcbiAgRGVidWcgPSAyMCxcbiAgSW5mbyA9IDMwLFxuICBXYXJuID0gNDAsXG4gIEVycm9yID0gNTAsXG4gIEZhdGFsID0gNjAsXG4gIE9mZiA9IDEwMCxcbn1cblxuZXhwb3J0IHR5cGUgTG9nZ2luZ0xldmVsVHlwZSA9ICdPZmYnIHwgJ1RyYWNlJyB8ICdEZWJ1ZycgfCAnSW5mbycgfCAnV2FybicgfCAnRXJyb3InIHwgJ0ZhdGFsJyB8ICdBbGwnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMb2dnZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF9jYXRlZ29yeTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9hcHBlbmRlcnM6IEFwcGVuZGVycztcbiAgcHJpdmF0ZSByZWFkb25seSBfdGhyZXNob2xkOiBMb2dnaW5nVGhyZXNob2xkO1xuXG4gIGdldCBjYXRlZ29yeSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9jYXRlZ29yeTtcbiAgfVxuXG4gIGdldCBhcHBlbmRlcnMoKTogQXBwZW5kZXJzIHtcbiAgICByZXR1cm4gdGhpcy5fYXBwZW5kZXJzO1xuICB9XG5cbiAgZ2V0IHRocmVzaG9sZCgpOiBMb2dnaW5nVGhyZXNob2xkIHtcbiAgICByZXR1cm4gdGhpcy5fdGhyZXNob2xkO1xuICB9XG5cbiAgdHJhY2UoLi4uYXJnczogYW55KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl90aHJlc2hvbGQudmFsdWUgfHwgdGhpcy5fdGhyZXNob2xkLnZhbHVlID4gTG9nZ2luZ0xldmVsLlRyYWNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5sb2coTG9nZ2luZ0xldmVsLlRyYWNlLCBhcmdzKTtcbiAgfVxuXG4gIGRlYnVnKC4uLmFyZ3M6IGFueSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fdGhyZXNob2xkLnZhbHVlIHx8IHRoaXMuX3RocmVzaG9sZC52YWx1ZSA+IExvZ2dpbmdMZXZlbC5EZWJ1Zykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubG9nKExvZ2dpbmdMZXZlbC5EZWJ1ZywgYXJncyk7XG4gIH1cblxuICBpbmZvKC4uLmFyZ3M6IGFueSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fdGhyZXNob2xkLnZhbHVlIHx8IHRoaXMuX3RocmVzaG9sZC52YWx1ZSA+IExvZ2dpbmdMZXZlbC5JbmZvKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5sb2coTG9nZ2luZ0xldmVsLkluZm8sIGFyZ3MpO1xuICB9XG5cbiAgd2FybiguLi5hcmdzOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX3RocmVzaG9sZC52YWx1ZSB8fCB0aGlzLl90aHJlc2hvbGQudmFsdWUgPiBMb2dnaW5nTGV2ZWwuV2Fybikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubG9nKExvZ2dpbmdMZXZlbC5XYXJuLCBhcmdzKTtcbiAgfVxuXG4gIGVycm9yKC4uLmFyZ3M6IGFueSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fdGhyZXNob2xkLnZhbHVlIHx8IHRoaXMuX3RocmVzaG9sZC52YWx1ZSA+IExvZ2dpbmdMZXZlbC5FcnJvcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubG9nKExvZ2dpbmdMZXZlbC5FcnJvciwgYXJncyk7XG4gIH1cblxuICBmYXRhbCguLi5hcmdzOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX3RocmVzaG9sZC52YWx1ZSB8fCB0aGlzLl90aHJlc2hvbGQudmFsdWUgPiBMb2dnaW5nTGV2ZWwuRmF0YWwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmxvZyhMb2dnaW5nTGV2ZWwuRmF0YWwsIGFyZ3MpO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2cobGV2ZWw6IG51bWJlciwgYXJnczogYW55KTogdm9pZCB7XG4gICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKCk7XG4gICAgY29uc3QgbWVzc2FnZSA9IHRoaXMucmVwbGFjZVBsYWNlaG9sZGVycyhhcmdzKTtcblxuICAgIHRoaXMuX2FwcGVuZGVycy52YWx1ZS5mb3JFYWNoKChhcHBlbmRlcjogSUFwcGVuZGVyKSA9PiB7XG4gICAgICBhcHBlbmRlci5sb2cobGV2ZWwsIG1lc3NhZ2UsIHRoaXMuY2F0ZWdvcnksIGRhdGUpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSByZXBsYWNlUGxhY2Vob2xkZXJzKGFyZ3M6IGFueSk6IHN0cmluZyB7XG4gICAgbGV0IHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcgPSBhcmdzWzBdO1xuICAgIGxldCBpbmRleCA9IDA7XG5cbiAgICB3aGlsZSAocmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZy5pbmRleE9mICYmIGFyZ3MubGVuZ3RoID4gMSAmJiBpbmRleCA+PSAwKSB7XG4gICAgICBpbmRleCA9IHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcuaW5kZXhPZignJScsIGluZGV4KTtcblxuICAgICAgaWYgKGluZGV4ID4gMCkge1xuICAgICAgICBjb25zdCB0eXBlID0gcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZy5zdWJzdHJpbmcoaW5kZXggKyAxLCBpbmRleCArIDIpO1xuXG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgIGNhc2UgJyUnOlxuICAgICAgICAgICAgLy8gRXNjYXBlZCAnJSUnIHR1cm5zIGludG8gJyUnXG4gICAgICAgICAgICByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nID0gcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZy5zdWJzdHJpbmcoMCwgaW5kZXgpICsgcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZy5zdWJzdHJpbmcoaW5kZXggKyAxKTtcbiAgICAgICAgICAgIGluZGV4Kys7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ3MnOlxuICAgICAgICAgIGNhc2UgJ2QnOlxuICAgICAgICAgICAgLy8gUmVwbGFjZSAnJWQnIG9yICclcycgd2l0aCB0aGUgYXJndW1lbnRcbiAgICAgICAgICAgIGFyZ3NbMF0gPSByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nID0gdGhpcy5yZXBsYWNlQXJndW1lbnQoXG4gICAgICAgICAgICAgIHRoaXMudG9TdHJpbmcoYXJnc1sxXSksXG4gICAgICAgICAgICAgIHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcsXG4gICAgICAgICAgICAgIGluZGV4XG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgYXJncy5zcGxpY2UoMSwgMSk7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ2onOlxuICAgICAgICAgICAgLy8gUmVwbGFjZSAlaicgd2l0aCB0aGUgYXJndW1lbnRcbiAgICAgICAgICAgIGFyZ3NbMF0gPSByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nID0gdGhpcy5yZXBsYWNlQXJndW1lbnQoXG4gICAgICAgICAgICAgIHRoaXMuc3RyaW5naWZ5KGFyZ3NbMV0pLFxuICAgICAgICAgICAgICByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLFxuICAgICAgICAgICAgICBpbmRleFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgYXJncy5zcGxpY2UoMSwgMSk7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gYXJncy50b1N0cmluZygpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGFyZ3MubGVuZ3RoID4gMSkge1xuICAgICAgYXJncyA9IGFyZ3MucmVkdWNlKChhY2N1bXVsYXRvciwgY3VycmVudFZhbHVlLCBpbmRleCwgYXJyYXkpID0+IHtcbiAgICAgICAgaWYgKGluZGV4ICsgMSA9PT0gYXJyYXkubGVuZ3RoICYmIGN1cnJlbnRWYWx1ZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LmVycm9yU3RhY2tBbHNvSGFzRXJyb3JNZXNzYWdlKSB7XG4gICAgICAgICAgICByZXR1cm4gYWNjdW11bGF0b3IgKyAnXFxuJyArIHRoaXMudG9TdHJpbmcoY3VycmVudFZhbHVlLnN0YWNrKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gYWNjdW11bGF0b3IgKyAnXFxuJyArIHRoaXMudG9TdHJpbmcoY3VycmVudFZhbHVlLm1lc3NhZ2UpICsgJ1xcbicgKyB0aGlzLnRvU3RyaW5nKGN1cnJlbnRWYWx1ZS5zdGFjayk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYWNjdW11bGF0b3IgKyBgWyR7dGhpcy50b1N0cmluZyhjdXJyZW50VmFsdWUpfV1gO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFyZ3MudG9TdHJpbmcoKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RyaW5naWZ5KGFyZzogYW55KTogc3RyaW5nIHtcbiAgICBjb25zdCBjYWNoZSA9IFtdO1xuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShcbiAgICAgICAgYXJnIGluc3RhbmNlb2YgRXJyb3IgPyB0aGlzLnRvU3RyaW5nKGFyZykgOiBhcmcsXG4gICAgICAgIChrZXksIHZhbHVlKSA9PiB7XG4gICAgICAgICAgaWYgKCEhdmFsdWUgJiYgdmFsdWUgaW5zdGFuY2VvZiBPYmplY3QpIHtcbiAgICAgICAgICAgIGlmIChjYWNoZS5pbmNsdWRlcyh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuICc8cmVjdXJzaXZlPic7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNhY2hlLnB1c2godmFsdWUpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgMlxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gJ1tvYmplY3QgaW52YWxpZCBKU09OLnN0cmluZ2lmeV0nO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVwbGFjZUFyZ3VtZW50KGFyZ3VtZW50OiBhbnksIHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmc6IHN0cmluZywgaW5kZXg6IG51bWJlcik6IHN0cmluZyB7XG4gICAgcmV0dXJuIHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcuc3Vic3RyaW5nKDAsIGluZGV4KSArIHRoaXMudG9TdHJpbmcoYXJndW1lbnQpICsgcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZy5zdWJzdHJpbmcoaW5kZXggKyAyKTtcbiAgfVxuXG4gIHByaXZhdGUgdG9TdHJpbmcoZGF0YTogYW55KTogc3RyaW5nIHtcbiAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdib29sZWFuJykge1xuICAgICAgcmV0dXJuIGRhdGEgPyAndHJ1ZScgOiAnZmFsc2UnO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ251bWJlcicpIHtcbiAgICAgIHJldHVybiBkYXRhLnRvU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgbGV0IHRvU3RyaW5nU3RyID0gJyc7XG5cbiAgICBpZiAoZGF0YSkge1xuICAgICAgaWYgKHR5cGVvZiBkYXRhID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRvU3RyaW5nU3RyID0gZGF0YS50b1N0cmluZygpO1xuICAgICAgfSBlbHNlIGlmIChkYXRhIGluc3RhbmNlb2YgT2JqZWN0KSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdG9TdHJpbmdTdHIgPSBkYXRhLnRvU3RyaW5nKCk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICB0b1N0cmluZ1N0ciA9ICdbb2JqZWN0IGludmFsaWQgdG9TdHJpbmcoKV0nO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRvU3RyaW5nU3RyO1xuICB9XG5cbiAgY29uc3RydWN0b3IoY2F0ZWdvcnk6IHN0cmluZywgYXBwZW5kZXJzOiBBcHBlbmRlcnMsIHRocmVzaG9sZDogTG9nZ2luZ1RocmVzaG9sZCkge1xuICAgIHRoaXMuX2NhdGVnb3J5ID0gY2F0ZWdvcnk7XG4gICAgdGhpcy5fYXBwZW5kZXJzID0gYXBwZW5kZXJzO1xuICAgIHRoaXMuX3RocmVzaG9sZCA9IHRocmVzaG9sZDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IEJ1aWxkRmVhdHVyZXMgZnJvbSAnLi4vZW52aXJvbm1lbnQvQnVpbGRGZWF0dXJlcyc7XG5pbXBvcnQge0xvZ2dpbmdMZXZlbH0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExvZ2dlckRlZmF1bHRzIHtcbiAgc3RhdGljIGdldCBkZWZhdWx0TG9nZ2luZ0xldmVsKCk6IExvZ2dpbmdMZXZlbCB7XG4gICAgcmV0dXJuIExvZ2dpbmdMZXZlbFtCdWlsZEZlYXR1cmVzLnNlbmRMb2dzXTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgZGVmYXVsdENvbnNvbGVMb2dnaW5nTGV2ZWwoKTogTG9nZ2luZ0xldmVsIHtcbiAgICByZXR1cm4gTG9nZ2luZ0xldmVsW0J1aWxkRmVhdHVyZXMubG9nVG9Db25zb2xlXTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgZGVmYXVsdFRlbGVtZXRyeUxvZ2dpbmdMZXZlbCgpOiBMb2dnaW5nTGV2ZWwge1xuICAgIHJldHVybiBMb2dnaW5nTGV2ZWwuSW5mbztcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgTG9nZ2VyLCB7TG9nZ2luZ0xldmVsfSBmcm9tICcuL0xvZ2dlcic7XG5pbXBvcnQgQXBwZW5kZXJzIGZyb20gJy4vQXBwZW5kZXJzJztcbmltcG9ydCBMb2dnaW5nVGhyZXNob2xkIGZyb20gJy4vTG9nZ2luZ1RocmVzaG9sZCc7XG5pbXBvcnQgQ29uc29sZUFwcGVuZGVyIGZyb20gJy4vQ29uc29sZUFwcGVuZGVyJztcbmltcG9ydCBUZWxlbWV0cnlBcHBlbmRlciBmcm9tICcuLi90ZWxlbWV0cnkvVGVsZW1ldHJ5QXBlbmRlcic7XG5pbXBvcnQgVGVsZW1ldHJ5Q29uZmlndXJhdGlvbiBmcm9tICcuLi90ZWxlbWV0cnkvVGVsZW1ldHJ5Q29uZmlndXJhdGlvbic7XG5pbXBvcnQgQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlciBmcm9tICcuLi9kb20vQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlcic7XG5pbXBvcnQge0lDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyfSBmcm9tICcuLi9kb20vSUNvbmZpZ3VyYXRpb25QYXJhbWF0ZXJSZWFkZXInO1xuaW1wb3J0IExvZ2dlckRlZmF1bHRzIGZyb20gJy4vTG9nZ2VyRGVmYXVsdHMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMb2dnZXJGYWN0b3J5IHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXI6IElDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyID0gbmV3IENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIoKTtcbiAgcHJpdmF0ZSBzdGF0aWMgX2xvZ2dlcnM6IHtbY2F0ZWdvcnk6IHN0cmluZ106IElMb2dnZXJ9ID0ge307XG4gIHByaXZhdGUgc3RhdGljIF9hcHBlbmRlcnM6IEFwcGVuZGVycyA9IG5ldyBBcHBlbmRlcnMoKTtcbiAgcHJpdmF0ZSBzdGF0aWMgX3RocmVzaG9sZDogTG9nZ2luZ1RocmVzaG9sZCA9IG5ldyBMb2dnaW5nVGhyZXNob2xkKCk7XG4gIHByaXZhdGUgc3RhdGljIF90ZWxlbWV0cnlDb25maWd1cmF0aW9uOiBUZWxlbWV0cnlDb25maWd1cmF0aW9uID0gbmV3IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24oKTtcblxuICBzdGF0aWMgZ2V0IHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24oKTogVGVsZW1ldHJ5Q29uZmlndXJhdGlvbiB7XG4gICAgcmV0dXJuIExvZ2dlckZhY3RvcnkuX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb247XG4gIH1cblxuICBzdGF0aWMgZ2V0TG9nZ2VyKGNhdGVnb3J5OiBzdHJpbmcpOiBJTG9nZ2VyIHtcbiAgICBpZiAodHlwZW9mIGNhdGVnb3J5ICE9PSAnc3RyaW5nJykge1xuICAgICAgY2F0ZWdvcnkgPSAnU0RLJztcbiAgICB9XG5cbiAgICBjb25zdCBsb2dnZXIgPSBMb2dnZXJGYWN0b3J5Ll9sb2dnZXJzW2NhdGVnb3J5XTtcblxuICAgIGlmIChsb2dnZXIpIHtcbiAgICAgIHJldHVybiBsb2dnZXI7XG4gICAgfVxuXG4gICAgcmV0dXJuIExvZ2dlckZhY3RvcnkuX2xvZ2dlcnNbY2F0ZWdvcnldID0gbmV3IExvZ2dlcihjYXRlZ29yeSwgdGhpcy5fYXBwZW5kZXJzLCB0aGlzLl90aHJlc2hvbGQpO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5TG9nZ2VyQ29uZmlnRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTogdm9pZCB7XG4gICAgTG9nZ2VyRmFjdG9yeS5hcHBseUxvZ2dpbmdMZXZlbCgpO1xuICAgIExvZ2dlckZhY3RvcnkuYXBwbHlBcHBlbmRlckxvZ2dpbmdMZXZlbCgnY29uc29sZScsIExvZ2dlckZhY3RvcnkuYXBwbHlDb25zb2xlTG9nZ2VyLmJpbmQodGhpcykpO1xuICAgIExvZ2dlckZhY3RvcnkuYXBwbHlBcHBlbmRlckxvZ2dpbmdMZXZlbCgndGVsZW1ldHJ5JywgTG9nZ2VyRmFjdG9yeS5hcHBseVRlbGVtZXRyeUxvZ2dlci5iaW5kKHRoaXMpKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGFwcGx5TG9nZ2luZ0xldmVsKCk6IHZvaWQge1xuICAgIGNvbnN0IHBhcmFtZXRlclZhbHVlID0gdGhpcy5fY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRTdHJpbmdWYWx1ZSgncGhlbml4LWxvZ2dpbmctbGV2ZWwnKTtcblxuICAgIGlmIChMb2dnaW5nTGV2ZWxbcGFyYW1ldGVyVmFsdWVdKSB7XG4gICAgICB0aGlzLl90aHJlc2hvbGQuc2V0VGhyZXNob2xkKExvZ2dpbmdMZXZlbFtwYXJhbWV0ZXJWYWx1ZV0pO1xuICAgIH1cblxuICAgIHJldHVybjtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGFwcGx5QXBwZW5kZXJMb2dnaW5nTGV2ZWwobmFtZTogc3RyaW5nLCBhcHBseUFwcGVuZGVyOiAobGV2ZWw6IExvZ2dpbmdMZXZlbCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIGNvbnN0IHBhcmFtZXRlclZhbHVlID0gdGhpcy5fY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRTdHJpbmdWYWx1ZShgcGhlbml4LSR7bmFtZX0tbG9nZ2luZy1sZXZlbGApO1xuXG4gICAgaWYgKHBhcmFtZXRlclZhbHVlID09PSAnT2ZmJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGFwcGx5QXBwZW5kZXIoTG9nZ2luZ0xldmVsW3BhcmFtZXRlclZhbHVlXSk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBhcHBseUNvbnNvbGVMb2dnZXIobGV2ZWw6IExvZ2dpbmdMZXZlbCk6IHZvaWQge1xuICAgIHRoaXMuX2FwcGVuZGVycy5hZGQobmV3IENvbnNvbGVBcHBlbmRlcihsZXZlbCB8fCBMb2dnZXJEZWZhdWx0cy5kZWZhdWx0Q29uc29sZUxvZ2dpbmdMZXZlbCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgYXBwbHlUZWxlbWV0cnlMb2dnZXIobGV2ZWw6IExvZ2dpbmdMZXZlbCk6IHZvaWQge1xuICAgIHRoaXMuX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb24udGhyZXNob2xkID0gbGV2ZWwgfHwgTG9nZ2VyRGVmYXVsdHMuZGVmYXVsdFRlbGVtZXRyeUxvZ2dpbmdMZXZlbDtcblxuICAgIHRoaXMuX2FwcGVuZGVycy5hZGQobmV3IFRlbGVtZXRyeUFwcGVuZGVyKHRoaXMuX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb24pKTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdMb2dnZXJGYWN0b3J5IGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufVxuXG5Mb2dnZXJGYWN0b3J5LmFwcGx5TG9nZ2VyQ29uZmlnRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBhc3NlcnRVbnJlYWNoYWJsZSBmcm9tICcuLi9sYW5nL2Fzc2VydFVucmVhY2hhYmxlJztcbmltcG9ydCB7TG9nZ2luZ0xldmVsLCBMb2dnaW5nTGV2ZWxUeXBlfSBmcm9tICcuL0xvZ2dlcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExvZ2dpbmdMZXZlbE1hcHBpbmcge1xuICBzdGF0aWMgY29udmVydExvZ2dpbmdMZXZlbFRvTG9nZ2luZ0xldmVsVHlwZShsb2dnaW5nTGV2ZWw6IExvZ2dpbmdMZXZlbCk6IExvZ2dpbmdMZXZlbFR5cGUge1xuICAgIHN3aXRjaCAobG9nZ2luZ0xldmVsKSB7XG4gICAgICBjYXNlIExvZ2dpbmdMZXZlbC5PZmY6XG4gICAgICAgIHJldHVybiAnT2ZmJztcbiAgICAgIGNhc2UgTG9nZ2luZ0xldmVsLlRyYWNlOlxuICAgICAgICByZXR1cm4gJ1RyYWNlJztcbiAgICAgIGNhc2UgTG9nZ2luZ0xldmVsLkRlYnVnOlxuICAgICAgICByZXR1cm4gJ0RlYnVnJztcbiAgICAgIGNhc2UgTG9nZ2luZ0xldmVsLkluZm86XG4gICAgICAgIHJldHVybiAnVHJhY2UnO1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuV2FybjpcbiAgICAgICAgcmV0dXJuICdXYXJuJztcbiAgICAgIGNhc2UgTG9nZ2luZ0xldmVsLkVycm9yOlxuICAgICAgICByZXR1cm4gJ0Vycm9yJztcbiAgICAgIGNhc2UgTG9nZ2luZ0xldmVsLkZhdGFsOlxuICAgICAgICByZXR1cm4gJ0ZhdGFsJztcbiAgICAgIGNhc2UgTG9nZ2luZ0xldmVsLkFsbDpcbiAgICAgICAgcmV0dXJuICdBbGwnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUobG9nZ2luZ0xldmVsKTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgY29udmVydExvZ2dpbmdMZXZlbFR5cGVUb0xvZ2dpbmdMZXZlbChsb2dnaW5nTGV2ZWxUeXBlOiBMb2dnaW5nTGV2ZWxUeXBlKTogTG9nZ2luZ0xldmVsIHtcbiAgICBzd2l0Y2ggKGxvZ2dpbmdMZXZlbFR5cGUpIHtcbiAgICAgIGNhc2UgJ09mZic6XG4gICAgICAgIHJldHVybiBMb2dnaW5nTGV2ZWwuT2ZmO1xuICAgICAgY2FzZSAnVHJhY2UnOlxuICAgICAgICByZXR1cm4gTG9nZ2luZ0xldmVsLlRyYWNlO1xuICAgICAgY2FzZSAnRGVidWcnOlxuICAgICAgICByZXR1cm4gTG9nZ2luZ0xldmVsLkRlYnVnO1xuICAgICAgY2FzZSAnSW5mbyc6XG4gICAgICAgIHJldHVybiBMb2dnaW5nTGV2ZWwuSW5mbztcbiAgICAgIGNhc2UgJ1dhcm4nOlxuICAgICAgICByZXR1cm4gTG9nZ2luZ0xldmVsLldhcm47XG4gICAgICBjYXNlICdFcnJvcic6XG4gICAgICAgIHJldHVybiBMb2dnaW5nTGV2ZWwuRXJyb3I7XG4gICAgICBjYXNlICdGYXRhbCc6XG4gICAgICAgIHJldHVybiBMb2dnaW5nTGV2ZWwuRmF0YWw7XG4gICAgICBjYXNlICdBbGwnOlxuICAgICAgICByZXR1cm4gTG9nZ2luZ0xldmVsLkFsbDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKGxvZ2dpbmdMZXZlbFR5cGUpO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IExvZ2dlckRlZmF1bHRzIGZyb20gJy4vTG9nZ2VyRGVmYXVsdHMnO1xuaW1wb3J0IHtMb2dnaW5nTGV2ZWx9IGZyb20gJy4vTG9nZ2VyJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTG9nZ2luZ1RocmVzaG9sZCB7XG4gIHByaXZhdGUgX3RocmVzaG9sZDogTG9nZ2luZ0xldmVsID0gTG9nZ2VyRGVmYXVsdHMuZGVmYXVsdExvZ2dpbmdMZXZlbDtcblxuICBnZXQgdmFsdWUoKTogTG9nZ2luZ0xldmVsIHtcbiAgICByZXR1cm4gdGhpcy5fdGhyZXNob2xkO1xuICB9XG5cbiAgc2V0VGhyZXNob2xkKHRocmVzaG9sZDogTG9nZ2luZ0xldmVsKTogdm9pZCB7XG4gICAgdGhpcy5fdGhyZXNob2xkID0gdGhyZXNob2xkO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge1RlbGVtZXRyeUxldmVsfSBmcm9tICcuL01ldHJpY3NDb25maWd1cmF0aW9uJztcbmltcG9ydCBhc3NlcnRVbnJlYWNoYWJsZSBmcm9tICcuLi9sYW5nL2Fzc2VydFVucmVhY2hhYmxlJztcbmltcG9ydCBNZXRyaWNzVHlwZSBmcm9tICcuL01ldHJpY3NUeXBlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWV0cmljVHlwZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21ldHJpY3M6IE1ldHJpY3NUeXBlO1xuXG4gIGNvbnN0cnVjdG9yKG1ldHJpY3M6IE1ldHJpY3NUeXBlKSB7XG4gICAgdGhpcy5fbWV0cmljcyA9IG1ldHJpY3M7XG4gIH1cblxuICBnZXROYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIE1ldHJpY3NUeXBlW3RoaXMuX21ldHJpY3NdO1xuICB9XG5cbiAgZ2V0VGVsZW1ldHJ5TGV2ZWwoKTogVGVsZW1ldHJ5TGV2ZWwge1xuICAgIHN3aXRjaCAodGhpcy5fbWV0cmljcykge1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5UaW1lVG9GaXJzdEZyYW1lOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuRXNzZW50aWFsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5DaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuRXNzZW50aWFsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5TdGFsbGVkOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5CdWZmZXJpbmc6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLlNldHVwQ29tcGxldGVkOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5TZXR1cEZhaWxlZDpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuUm91bmRUcmlwVGltZTpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuRG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHk6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLk5ldHdvcmtUeXBlOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5SZXNvbHV0aW9uQ2hhbmdlZDpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuQXBwbGljYXRpb25Gb3JlZ3JvdW5kOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5BcHBsaWNhdGlvbkJhY2tncm91bmQ6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZSh0aGlzLl9tZXRyaWNzKTtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBUZWxlbWV0cnlEZWZhdWx0IGZyb20gJy4vVGVsZW1ldHJ5RGVmYXVsdCc7XG5cbmV4cG9ydCBlbnVtIFRlbGVtZXRyeUxldmVsIHtcbiAgT2ZmID0gMTAwLFxuICBFc3NlbnRpYWwgPSAxMCxcbiAgQWxsID0gLTFcbn1cblxuZXhwb3J0IHR5cGUgVGVsZW1ldHJ5TGV2ZWxUeXBlID0gJ09mZicgfCAnRXNzZW50aWFsJyB8ICdBbGwnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNZXRyaWNzQ29uZmlndXJhdGlvbiB7XG4gIHByaXZhdGUgX3VybCA9ICdodHRwczovL3RlbGVtZXRyeS5waGVuaXhydHMuY29tL3RlbGVtZXRyeS9tZXRyaWNzJztcbiAgcHJpdmF0ZSBfdGVuYW5jeTogc3RyaW5nO1xuICBwcml2YXRlIF9zZXNzaW9uSWQ6IHN0cmluZztcbiAgcHJpdmF0ZSBfZW52aXJvbm1lbnQ6IHN0cmluZztcbiAgcHJpdmF0ZSBfdGhyZXNob2xkOiBUZWxlbWV0cnlMZXZlbCA9IFRlbGVtZXRyeURlZmF1bHQuZGVmYXVsdFRlbGVtZXRyeUxldmVsO1xuXG4gIGdldCB1cmwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdXJsO1xuICB9XG5cbiAgc2V0IHVybCh1cmw6IHN0cmluZykge1xuICAgIGNvbnN0IG1ldHJpY3NVcmwgPSBuZXcgVVJMKHVybCk7XG5cbiAgICBtZXRyaWNzVXJsLnBhdGhuYW1lID0gbWV0cmljc1VybC5wYXRobmFtZSArICcvbWV0cmljcyc7XG5cbiAgICB0aGlzLl91cmwgPSBtZXRyaWNzVXJsLnRvU3RyaW5nKCk7XG4gIH1cblxuICBnZXQgZW52aXJvbm1lbnQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fZW52aXJvbm1lbnQ7XG4gIH1cblxuICBzZXQgZW52aXJvbm1lbnQoZW52aXJvbm1lbnQ6IHN0cmluZykge1xuICAgIHRoaXMuX2Vudmlyb25tZW50ID0gZW52aXJvbm1lbnQ7XG4gIH1cblxuICBnZXQgdGVuYW5jeSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl90ZW5hbmN5O1xuICB9XG5cbiAgc2V0IHRlbmFuY3kodGVuYW5jeTogc3RyaW5nKSB7XG4gICAgdGhpcy5fdGVuYW5jeSA9IHRlbmFuY3k7XG4gIH1cblxuICBnZXQgc2Vzc2lvbklkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3Nlc3Npb25JZDtcbiAgfVxuXG4gIHNldCBzZXNzaW9uSWQoc2Vzc2lvbklkOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9zZXNzaW9uSWQgPSBzZXNzaW9uSWQ7XG4gIH1cblxuICBnZXQgdGhyZXNob2xkKCk6IFRlbGVtZXRyeUxldmVsIHtcbiAgICByZXR1cm4gdGhpcy5fdGhyZXNob2xkO1xuICB9XG5cbiAgc2V0IHRocmVzaG9sZCh0aHJlc2hvbGQ6IFRlbGVtZXRyeUxldmVsKSB7XG4gICAgdGhpcy5fdGhyZXNob2xkID0gdGhyZXNob2xkO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBNZXRyaWNzU2VydmljZSBmcm9tICcuL01ldHJpY3NTZXJ2aWNlJztcbmltcG9ydCBNZXRyaWNzQ29uZmlndXJhdGlvbiwge1RlbGVtZXRyeUxldmVsfSBmcm9tICcuL01ldHJpY3NDb25maWd1cmF0aW9uJztcbmltcG9ydCBTREsgZnJvbSAnLi4vc2RrL1NESyc7XG5pbXBvcnQgVGVsZW1ldHJ5VXJsIGZyb20gJy4uL3Nkay9UZWxlbWV0cnlVcmwnO1xuaW1wb3J0IEVudmlyb25tZW50IGZyb20gJy4uL3Nkay9FbnZpcm9ubWVudCc7XG5pbXBvcnQgVGVsZW1ldHJ5TGV2ZWxNYXBwaW5nIGZyb20gJy4vVGVsZW1ldHJpY0xldmVsTWFwcGluZyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1ldHJpY3NGYWN0b3J5IHtcbiAgcHJpdmF0ZSBzdGF0aWMgX21ldHJpY3NTZXJ2aWNlczoge1tjYXRlZ29yeTogc3RyaW5nXTogTWV0cmljc1NlcnZpY2V9ID0ge307XG5cbiAgc3RhdGljIGdldE1ldHJpY3NTZXJ2aWNlKHVybDogc3RyaW5nKTogTWV0cmljc1NlcnZpY2Uge1xuICAgIGlmICh0eXBlb2YgdXJsICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd1cicpO1xuICAgIH1cblxuICAgIGNvbnN0IG1ldHJpY3NTZXJ2aWNlcyA9IE1ldHJpY3NGYWN0b3J5Ll9tZXRyaWNzU2VydmljZXNbdXJsXTtcblxuICAgIGlmIChtZXRyaWNzU2VydmljZXMpIHtcbiAgICAgIHJldHVybiBtZXRyaWNzU2VydmljZXM7XG4gICAgfVxuXG4gICAgY29uc3QgbWV0cmljc0NvbmZpZ3VyYXRpb24gPSBuZXcgTWV0cmljc0NvbmZpZ3VyYXRpb24oKTtcblxuICAgIG1ldHJpY3NDb25maWd1cmF0aW9uLnNlc3Npb25JZCA9IFNESy5jbGllbnRTZXNzaW9uSWQ7XG4gICAgbWV0cmljc0NvbmZpZ3VyYXRpb24udGVuYW5jeSA9IFNESy50ZW5hbmN5LnZhbHVlO1xuICAgIG1ldHJpY3NDb25maWd1cmF0aW9uLnVybCA9IFRlbGVtZXRyeVVybC5nZXRUZWxlbWV0cnlVcmwodXJsKTtcbiAgICBtZXRyaWNzQ29uZmlndXJhdGlvbi5lbnZpcm9ubWVudCA9IEVudmlyb25tZW50LmdldEVudmlyb25tZW50RnJvbVVybCh1cmwpO1xuXG4gICAgbWV0cmljc0NvbmZpZ3VyYXRpb24udGhyZXNob2xkID0gVGVsZW1ldHJ5TGV2ZWxNYXBwaW5nLmNvbnZlcnRUZWxlbWV0cnlMZXZlbFR5cGVUb1RlbGVtZXRyeUxldmVsKFNESy50ZWxlbWV0cnlMZXZlbCk7XG5cbiAgICByZXR1cm4gTWV0cmljc0ZhY3RvcnkuX21ldHJpY3NTZXJ2aWNlc1t1cmxdID0gbmV3IE1ldHJpY3NTZXJ2aWNlKG1ldHJpY3NDb25maWd1cmF0aW9uKTtcbiAgfVxuXG4gIHN0YXRpYyBzZXRUZWxlbWV0cnlMZXZlbCh0ZWxlbWV0cnlMZXZlbDogVGVsZW1ldHJ5TGV2ZWwpOiB2b2lkIHtcbiAgICBjb25zdCBtZXRyaWNzU2VydmljZXMgPSBPYmplY3QudmFsdWVzKE1ldHJpY3NGYWN0b3J5Ll9tZXRyaWNzU2VydmljZXMpO1xuXG4gICAgaWYgKG1ldHJpY3NTZXJ2aWNlcyAmJiBtZXRyaWNzU2VydmljZXMubGVuZ3RoKSB7XG4gICAgICBtZXRyaWNzU2VydmljZXMuZm9yRWFjaChtZXRyaWNzU2VydmljZSA9PiB7XG4gICAgICAgIGNvbnN0IG1ldHJpY3NDb25maWd1cmF0aW9uID0gbWV0cmljc1NlcnZpY2UubWV0cmljc0NvbmZpZ3VyYXRpb247XG5cbiAgICAgICAgbWV0cmljc0NvbmZpZ3VyYXRpb24udGhyZXNob2xkID0gdGVsZW1ldHJ5TGV2ZWw7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignTG9nZ2VyRmFjdG9yeSBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQgRXhwb25lbnRpYWxCYWNrb2ZmIGZyb20gJy4uL3RpbWUvRXhwb25lbnRpYWxCYWNrb2ZmJztcbmltcG9ydCBWZXJzaW9uTWFuYWdlciBmcm9tICcuLi9zZGsvdmVyc2lvbi9WZXJzaW9uTWFuYWdlcic7XG5pbXBvcnQgTWV0cmljc0NvbmZpZ3VyYXRpb24gZnJvbSAnLi9NZXRyaWNzQ29uZmlndXJhdGlvbic7XG5pbXBvcnQgTWV0cmljVHlwZSBmcm9tICcuL01ldHJpY1R5cGUnO1xuaW1wb3J0IE1ldHJpY3NUeXBlIGZyb20gJy4vTWV0cmljc1R5cGUnO1xuXG5jb25zdCByZXF1ZXN0U2l6ZUxpbWl0ID0gMTAyNDtcbmNvbnN0IG1heEJ1ZmZlcmVkUmVjb3JkcyA9IDIwNDg7XG5cbmludGVyZmFjZSBJVmFsdWUge1xuICBzdHJpbmc/OiBzdHJpbmc7XG4gIHVpbnQ2ND86IG51bWJlcjtcbiAgZmxvYXQ/OiBudW1iZXI7XG59XG5cbmludGVyZmFjZSBJTWV0cmljUmVjb3JkIHtcbiAgdGltZXN0YW1wOiBzdHJpbmc7XG4gIHRlbmFuY3k6IHN0cmluZztcbiAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHN0cmVhbUlkOiBzdHJpbmc7XG4gIG1ldHJpYzogc3RyaW5nO1xuICB2YWx1ZTogSVZhbHVlO1xuICBwcmV2aW91c1ZhbHVlOiBJVmFsdWU7XG4gIGZ1bGxRdWFsaWZpZWROYW1lOiBzdHJpbmc7XG4gIGVudmlyb25tZW50OiBzdHJpbmc7XG4gIHZlcnNpb246IHN0cmluZztcbiAgcnVudGltZTogbnVtYmVyO1xuICByZXNvdXJjZT86IHN0cmluZztcbiAga2luZD86IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIElNZXRyaWMge1xuICBzdHJlYW1JZD86IHN0cmluZztcbiAgbWV0cmljVHlwZTogTWV0cmljc1R5cGU7XG4gIHZhbHVlPzogSVZhbHVlO1xuICBwcmV2aW91c1ZhbHVlPzogSVZhbHVlO1xuICBydW50aW1lOiBudW1iZXI7XG4gIHJlc291cmNlPzogc3RyaW5nO1xuICBraW5kPzogc3RyaW5nO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNZXRyaWNzU2VydmljZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdNZXRyaWNzU2VydmljZScpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9tZXRyaWNzQ29uZmlndXJhdGlvbjogTWV0cmljc0NvbmZpZ3VyYXRpb247XG4gIHByaXZhdGUgcmVhZG9ubHkgX2V4cG9uZW50aWFsQmFja29mZjogRXhwb25lbnRpYWxCYWNrb2ZmO1xuICBwcml2YXRlIF9tZXRyaWNzOiBBcnJheTxJTWV0cmljUmVjb3JkPiA9IFtdO1xuICBwcml2YXRlIF9pc1NlbmRpbmc6IGJvb2xlYW47XG4gIHByaXZhdGUgX2ZhaWx1cmVDb3VudCA9IDA7XG4gIHByaXZhdGUgX2RvbWFpbiA9IGxvY2F0aW9uLmhvc3RuYW1lO1xuXG4gIGNvbnN0cnVjdG9yKG1ldHJpY3NDb25maWd1cmF0aW9uOiBNZXRyaWNzQ29uZmlndXJhdGlvbikge1xuICAgIHRoaXMuX21ldHJpY3NDb25maWd1cmF0aW9uID0gbWV0cmljc0NvbmZpZ3VyYXRpb247XG4gICAgdGhpcy5fZXhwb25lbnRpYWxCYWNrb2ZmID0gbmV3IEV4cG9uZW50aWFsQmFja29mZigpO1xuICB9XG5cbiAgZ2V0IG1ldHJpY3NDb25maWd1cmF0aW9uKCk6IE1ldHJpY3NDb25maWd1cmF0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5fbWV0cmljc0NvbmZpZ3VyYXRpb247XG4gIH1cblxuICBwdXNoKG1ldHJpYzogSU1ldHJpYyk6IHZvaWQge1xuICAgIGNvbnN0IHtzdHJlYW1JZCwgdmFsdWUsIHByZXZpb3VzVmFsdWUsIHJ1bnRpbWUsIHJlc291cmNlLCBraW5kfSA9IG1ldHJpYztcbiAgICBjb25zdCBtZXRyaWNUeXBlID0gbmV3IE1ldHJpY1R5cGUobWV0cmljLm1ldHJpY1R5cGUpO1xuXG4gICAgaWYgKHRoaXMuX21ldHJpY3NDb25maWd1cmF0aW9uLnRocmVzaG9sZCA+IG1ldHJpY1R5cGUuZ2V0VGVsZW1ldHJ5TGV2ZWwoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG1ldHJpY1JlY29yZCA9IHtcbiAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgdGVuYW5jeTogdGhpcy5fbWV0cmljc0NvbmZpZ3VyYXRpb24udGVuYW5jeSxcbiAgICAgIHNlc3Npb25JZDogdGhpcy5fbWV0cmljc0NvbmZpZ3VyYXRpb24uc2Vzc2lvbklkLFxuICAgICAgc3RyZWFtSWQsXG4gICAgICBtZXRyaWM6IG1ldHJpY1R5cGUuZ2V0TmFtZSgpLFxuICAgICAgdmFsdWUsXG4gICAgICBwcmV2aW91c1ZhbHVlLFxuICAgICAgZnVsbFF1YWxpZmllZE5hbWU6IHRoaXMuX2RvbWFpbixcbiAgICAgIGVudmlyb25tZW50OiB0aGlzLl9tZXRyaWNzQ29uZmlndXJhdGlvbi5lbnZpcm9ubWVudCxcbiAgICAgIHZlcnNpb246IFZlcnNpb25NYW5hZ2VyLnNka1ZlcnNpb24sXG4gICAgICBydW50aW1lLFxuICAgICAgcmVzb3VyY2UsXG4gICAgICBraW5kXG4gICAgfTtcblxuICAgIHRoaXMuX21ldHJpY3MucHVzaChtZXRyaWNSZWNvcmQpO1xuXG4gICAgY29uc3QgaWdub3JlZCA9IHRoaXMuc2VuZE1ldHJpY3NJZkFibGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2VuZE1ldHJpY3MobWV0cmljc01lc3NhZ2VzOiBBcnJheTxJTWV0cmljUmVjb3JkPik6IFByb21pc2U8UmVzcG9uc2U+IHtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuXG4gICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KHtyZWNvcmRzOiBtZXRyaWNzTWVzc2FnZXN9KSk7XG5cbiAgICByZXR1cm4gYXdhaXQgZmV0Y2godGhpcy5fbWV0cmljc0NvbmZpZ3VyYXRpb24udXJsLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGJvZHk6IGZvcm1EYXRhXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNlbmRNZXRyaWNzSWZBYmxlKCk6IFByb21pc2U8UmVzcG9uc2UgfCB2b2lkPiB7XG4gICAgaWYgKHRoaXMuX21ldHJpY3MubGVuZ3RoIDw9IDAgfHwgdGhpcy5faXNTZW5kaW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5faXNTZW5kaW5nID0gdHJ1ZTtcblxuICAgIGNvbnN0IG1ldHJpY3NNZXNzYWdlcyA9IHRoaXMuX21ldHJpY3Muc2xpY2UoMCwgcmVxdWVzdFNpemVMaW1pdCk7XG5cbiAgICB0aGlzLl9tZXRyaWNzID0gdGhpcy5fbWV0cmljcy5zbGljZShyZXF1ZXN0U2l6ZUxpbWl0KTtcblxuICAgIHJldHVybiB0aGlzLnNlbmRNZXRyaWNzKG1ldHJpY3NNZXNzYWdlcykudGhlbihyZXNwb25zZSA9PiB7XG4gICAgICBpZiAodGhpcy5pc1Jlc3BvbnNlU3RhdHVzQ29kZVJldHJ5YWJsZShyZXNwb25zZSkpIHtcbiAgICAgICAgaWYgKHRoaXMuX21ldHJpY3MubGVuZ3RoIDw9IG1heEJ1ZmZlcmVkUmVjb3Jkcykge1xuICAgICAgICAgIHRoaXMuX2ZhaWx1cmVDb3VudCsrO1xuXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9tZXRyaWNzID0gWy4uLm1ldHJpY3NNZXNzYWdlcywgLi4udGhpcy5fbWV0cmljc107XG5cbiAgICAgICAgICAgIHRoaXMuX2lzU2VuZGluZyA9IGZhbHNlO1xuXG4gICAgICAgICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5zZW5kTWV0cmljc0lmQWJsZSgpO1xuICAgICAgICAgIH0sIHRoaXMuX2V4cG9uZW50aWFsQmFja29mZi5nZXRFeHBvbmVudGlhbEJhY2tvZmZJbnRlcnZhbEJ5RmFpbHVyZUNvdW50KHRoaXMuX2ZhaWx1cmVDb3VudCkpO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdUb28gbWFueSBjYWNoZWQgbWV0cmljIHJlY29yZHMgWyVzXSwgZHJvcHBpbmcgWyVzXSByZWNvcmRzJywgdGhpcy5fbWV0cmljcy5sZW5ndGgsIG1ldHJpY3NNZXNzYWdlcy5sZW5ndGgpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9pc1NlbmRpbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2ZhaWx1cmVDb3VudCA9IDA7XG5cbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLnNlbmRNZXRyaWNzSWZBYmxlKCk7XG5cbiAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9KS5jYXRjaCgoKSA9PiB7XG4gICAgICB0aGlzLl9pc1NlbmRpbmcgPSBmYWxzZTtcblxuICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuc2VuZE1ldHJpY3NJZkFibGUoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgaXNSZXNwb25zZVN0YXR1c0NvZGVSZXRyeWFibGUoe3N0YXR1c306IFJlc3BvbnNlKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIC9eNVxcZHsyfSQvLnRlc3Qoc3RhdHVzLnRvU3RyaW5nKCkpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5lbnVtIE1ldHJpY3NUeXBlIHtcbiAgVGltZVRvRmlyc3RGcmFtZSxcbiAgQ2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZSxcbiAgU3RhbGxlZCxcbiAgQnVmZmVyaW5nLFxuICBTZXR1cENvbXBsZXRlZCxcbiAgU2V0dXBGYWlsZWQsXG4gIFJvdW5kVHJpcFRpbWUsXG4gIERvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5LFxuICBOZXR3b3JrVHlwZSxcbiAgUmVzb2x1dGlvbkNoYW5nZWQsXG4gIEFwcGxpY2F0aW9uRm9yZWdyb3VuZCxcbiAgQXBwbGljYXRpb25CYWNrZ3JvdW5kXG59XG5cbmV4cG9ydCBkZWZhdWx0IE1ldHJpY3NUeXBlOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtUZWxlbWV0cnlMZXZlbCwgVGVsZW1ldHJ5TGV2ZWxUeXBlfSBmcm9tICcuL01ldHJpY3NDb25maWd1cmF0aW9uJztcbmltcG9ydCBhc3NlcnRVbnJlYWNoYWJsZSBmcm9tICcuLi9sYW5nL2Fzc2VydFVucmVhY2hhYmxlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVsZW1ldHJ5TGV2ZWxNYXBwaW5nIHtcbiAgc3RhdGljIGNvbnZlcnRUZWxlbWV0cnlMZXZlbFRvVGVsZW1ldHJ5TGV2ZWxUeXBlKHRlbGVtZXRyeUxldmVsOiBUZWxlbWV0cnlMZXZlbCk6IFRlbGVtZXRyeUxldmVsVHlwZSB7XG4gICAgc3dpdGNoICh0ZWxlbWV0cnlMZXZlbCkge1xuICAgICAgY2FzZSBUZWxlbWV0cnlMZXZlbC5PZmY6XG4gICAgICAgIHJldHVybiAnT2ZmJztcbiAgICAgIGNhc2UgVGVsZW1ldHJ5TGV2ZWwuRXNzZW50aWFsOlxuICAgICAgICByZXR1cm4gJ0Vzc2VudGlhbCc7XG4gICAgICBjYXNlIFRlbGVtZXRyeUxldmVsLkFsbDpcbiAgICAgICAgcmV0dXJuICdBbGwnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUodGVsZW1ldHJ5TGV2ZWwpO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBjb252ZXJ0VGVsZW1ldHJ5TGV2ZWxUeXBlVG9UZWxlbWV0cnlMZXZlbCh0ZWxlbWV0cnlMZXZlbFR5cGU6IFRlbGVtZXRyeUxldmVsVHlwZSk6IFRlbGVtZXRyeUxldmVsIHtcbiAgICBzd2l0Y2ggKHRlbGVtZXRyeUxldmVsVHlwZSkge1xuICAgICAgY2FzZSAnT2ZmJzpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLk9mZjtcbiAgICAgIGNhc2UgJ0Vzc2VudGlhbCc6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5Fc3NlbnRpYWw7XG4gICAgICBjYXNlICdBbGwnOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUodGVsZW1ldHJ5TGV2ZWxUeXBlKTtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBCdWlsZEZlYXR1cmVzIGZyb20gJy4uL2Vudmlyb25tZW50L0J1aWxkRmVhdHVyZXMnO1xuaW1wb3J0IHtUZWxlbWV0cnlMZXZlbH0gZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzQ29uZmlndXJhdGlvbic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlbGVtZXRyeURlZmF1bHQge1xuICBzdGF0aWMgZ2V0IGRlZmF1bHRUZWxlbWV0cnlMZXZlbCgpOiBUZWxlbWV0cnlMZXZlbCB7XG4gICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsW0J1aWxkRmVhdHVyZXMuc2VuZE1ldHJpY3NdO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgUHJvbWlzZUhhbmRsZXIgZnJvbSAnLi9Qcm9taXNlSGFuZGxlcic7XG5cbmNsYXNzIFByb21pc2Uge1xuICBfc3RhdGU6IG51bWJlcjtcbiAgX2hhbmRsZWQ6IGJvb2xlYW47XG4gIF92YWx1ZTogUHJvbWlzZTtcbiAgX2RlZmVycmVkczogQXJyYXk8UHJvbWlzZUhhbmRsZXI+O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gIC8vIEB0cy1pZ25vcmVcbiAgdGhlbihvbkZ1bGZpbGxlZDogRnVuY3Rpb24sIG9uUmVqZWN0ZWQ6IEZ1bmN0aW9uKTogUHJvbWlzZSB8IHZvaWQ7XG5cbiAgY29uc3RydWN0b3IoY2FsbGJhY2spIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUHJvbWlzZSkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Byb21pc2VzIG11c3QgYmUgY29uc3RydWN0ZWQgdmlhIG5ldycpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ25vdCBhIGZ1bmN0aW9uJyk7XG4gICAgfVxuXG4gICAgdGhpcy5fc3RhdGUgPSAwO1xuICAgIHRoaXMuX2hhbmRsZWQgPSBmYWxzZTtcbiAgICB0aGlzLl92YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLl9kZWZlcnJlZHMgPSBbXTtcblxuICAgIHRoaXMuZG9SZXNvbHZlKGNhbGxiYWNrKTtcbiAgfVxuXG4gIGRvUmVzb2x2ZShjYWxsYmFjazogRnVuY3Rpb24pOiB2b2lkIHtcbiAgICBsZXQgZG9uZSA9IGZhbHNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNhbGxiYWNrKFxuICAgICAgICB2YWx1ZSA9PiB7XG4gICAgICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLnByb21pc2VSZXNvbHZlKHZhbHVlKTtcbiAgICAgICAgfSxcbiAgICAgICAgcmVhc29uID0+IHtcbiAgICAgICAgICBpZiAoZG9uZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgICAgIHRoaXMucHJvbWlzZVJlamVjdChyZWFzb24pO1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoZG9uZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgdGhpcy5wcm9taXNlUmVqZWN0KGVycm9yKTtcbiAgICB9XG4gIH1cblxuICBwcm9taXNlUmVzb2x2ZShuZXdWYWx1ZTogUHJvbWlzZSB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICAgIGNvbnN0IHByb21pc2UgPSB0aGlzIGFzIFByb21pc2U7XG5cbiAgICB0cnkge1xuICAgICAgLy8gUHJvbWlzZSBSZXNvbHV0aW9uIFByb2NlZHVyZTogaHR0cHM6Ly9naXRodWIuY29tL1Byb21pc2VzLWFwbHVzL1Byb21pc2VzLXNwZWMjdGhlLVByb21pc2UtcmVzb2x1dGlvbi1wcm9jZWR1cmVcbiAgICAgIGlmIChuZXdWYWx1ZSA9PT0gcHJvbWlzZSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBIFByb21pc2UgY2Fubm90IGJlIHJlc29sdmVkIHdpdGggaXQgc2VsZi4nKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG5ld1ZhbHVlICYmICh0eXBlb2YgbmV3VmFsdWUgPT09ICdvYmplY3QnIHx8IHR5cGVvZiBuZXdWYWx1ZSA9PT0gJ2Z1bmN0aW9uJykpIHtcbiAgICAgICAgY29uc3QgdGhlbiA9IG5ld1ZhbHVlLnRoZW47XG5cbiAgICAgICAgaWYgKG5ld1ZhbHVlIGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgIHByb21pc2UuX3N0YXRlID0gMztcbiAgICAgICAgICBwcm9taXNlLl92YWx1ZSA9IG5ld1ZhbHVlO1xuICAgICAgICAgIHByb21pc2UuZmluYWxlKCk7XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHRoZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBwcm9taXNlLmRvUmVzb2x2ZShmdW5jdGlvbigpOiB2b2lkIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItcmVzdC1wYXJhbXNcbiAgICAgICAgICAgIHRoZW4uYXBwbHkobmV3VmFsdWUsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcHJvbWlzZS5fc3RhdGUgPSAxO1xuICAgICAgcHJvbWlzZS5fdmFsdWUgPSBuZXdWYWx1ZTtcbiAgICAgIHByb21pc2UuZmluYWxlKCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcHJvbWlzZS5wcm9taXNlUmVqZWN0KGUpO1xuICAgIH1cbiAgfVxuXG4gIHByb21pc2VSZWplY3QobmV3VmFsdWU6IFByb21pc2UgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICB0aGlzLl9zdGF0ZSA9IDI7XG4gICAgdGhpcy5fdmFsdWUgPSBuZXdWYWx1ZTtcbiAgICB0aGlzLmZpbmFsZSgpO1xuICB9XG5cbiAgZmluYWxlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9zdGF0ZSA9PT0gMiAmJiB0aGlzLl9kZWZlcnJlZHMubGVuZ3RoID09PSAwKSB7XG4gICAgICBQcm9taXNlLl9pbW1lZGlhdGUoKCkgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuX2hhbmRsZWQpIHtcbiAgICAgICAgICBQcm9taXNlLl91bmhhbmRsZWRSZWplY3Rpb24odGhpcy5fdmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gdGhpcy5fZGVmZXJyZWRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICB0aGlzLmhhbmRsZSh0aGlzLl9kZWZlcnJlZHNbaV0pO1xuICAgIH1cblxuICAgIHRoaXMuX2RlZmVycmVkcyA9IG51bGw7XG4gIH1cblxuICBoYW5kbGUoZGVmZXJyZWQ6IFByb21pc2VIYW5kbGVyKTogdm9pZCB7XG4gICAgbGV0IHByb21pc2UgPSB0aGlzIGFzIFByb21pc2U7XG5cbiAgICB3aGlsZSAocHJvbWlzZS5fc3RhdGUgPT09IDMpIHtcbiAgICAgIHByb21pc2UgPSBwcm9taXNlLl92YWx1ZTtcbiAgICB9XG5cbiAgICBpZiAocHJvbWlzZS5fc3RhdGUgPT09IDApIHtcbiAgICAgIHByb21pc2UuX2RlZmVycmVkcy5wdXNoKGRlZmVycmVkKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHByb21pc2UuX2hhbmRsZWQgPSB0cnVlO1xuICAgIFByb21pc2UuX2ltbWVkaWF0ZSgoKSA9PiB7XG4gICAgICBjb25zdCBjYWxsYmFjayA9IHByb21pc2UuX3N0YXRlID09PSAxID8gZGVmZXJyZWQub25GdWxmaWxsZWQgOiBkZWZlcnJlZC5vblJlamVjdGVkO1xuXG4gICAgICBpZiAoY2FsbGJhY2sgPT09IG51bGwpIHtcbiAgICAgICAgaWYgKHByb21pc2UuX3N0YXRlID09PSAxKSB7XG4gICAgICAgICAgZGVmZXJyZWQucHJvbWlzZS5wcm9taXNlUmVzb2x2ZShwcm9taXNlLl92YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGVmZXJyZWQucHJvbWlzZS5wcm9taXNlUmVqZWN0KHByb21pc2UuX3ZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgbGV0IHJlc3VsdDtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmVzdWx0ID0gY2FsbGJhY2socHJvbWlzZS5fdmFsdWUpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBkZWZlcnJlZC5wcm9taXNlLnByb21pc2VSZWplY3QoZSk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBkZWZlcnJlZC5wcm9taXNlLnByb21pc2VSZXNvbHZlKHJlc3VsdCk7XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgYWxsKGFycjogQXJyYXk8UHJvbWlzZT4pOiBQcm9taXNlIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGFycikpIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgVHlwZUVycm9yKCdQcm9taXNlLmFsbCBhY2NlcHRzIGFuIGFycmF5JykpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJyKTtcblxuICAgICAgaWYgKGFyZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiByZXNvbHZlKFtdKTtcbiAgICAgIH1cblxuICAgICAgbGV0IHJlbWFpbmluZyA9IGFyZ3MubGVuZ3RoO1xuICAgICAgY29uc3QgbWFuYWdlUmVzcG9uc2UgPSAoaSwgdmFsdWUpOiB2b2lkID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAodmFsdWUgJiYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSkge1xuICAgICAgICAgICAgY29uc3QgdGhlbiA9IHZhbHVlLnRoZW47XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgdGhlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICB0aGVuLmNhbGwoXG4gICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgdmFsdWUgPT4gbWFuYWdlUmVzcG9uc2UoaSwgdmFsdWUpLFxuICAgICAgICAgICAgICAgIHJlamVjdFxuICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBhcmdzW2ldID0gdmFsdWU7XG5cbiAgICAgICAgICBpZiAoLS1yZW1haW5pbmcgPT09IDApIHtcbiAgICAgICAgICAgIHJlc29sdmUoYXJncyk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xuICAgICAgICBtYW5hZ2VSZXNwb25zZShpLCBhcmdzW2ldKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyByZXNvbHZlKHZhbHVlKTogUHJvbWlzZSB7XG4gICAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUuY29uc3RydWN0b3IgPT09IFByb21pc2UpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiByZXNvbHZlKHZhbHVlKSk7XG4gIH1cblxuICBzdGF0aWMgcmVqZWN0KHZhbHVlKTogUHJvbWlzZSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChfLCByZWplY3QpID0+IHJlamVjdCh2YWx1ZSkpO1xuICB9XG5cbiAgc3RhdGljIHJhY2UoYXJyOiBBcnJheTxQcm9taXNlPik6IFByb21pc2Uge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkoYXJyKSkge1xuICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBUeXBlRXJyb3IoJ1Byb21pc2UucmFjZSBhY2NlcHRzIGFuIGFycmF5JykpO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gYXJyLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIFByb21pc2UucmVzb2x2ZShhcnJbaV0pLnRoZW4ocmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBfaW1tZWRpYXRlKGNhbGxiYWNrOiBGdW5jdGlvbik6IHZvaWQge1xuICAgIGNvbnN0IGlnbm9yZWQgPSBzZXRUaW1lb3V0KGNhbGxiYWNrLCAwKTtcbiAgfVxuXG4gIHN0YXRpYyBfdW5oYW5kbGVkUmVqZWN0aW9uKGVycm9yKTogdm9pZCB7XG4gICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJiBjb25zb2xlKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1Bvc3NpYmxlIFVuaGFuZGxlZCBQcm9taXNlIFJlamVjdGlvbjonLCBlcnJvcik7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tY29uc29sZVxuICAgIH1cbiAgfVxufVxuXG5Qcm9taXNlLnByb3RvdHlwZVsnY2F0Y2gnXSA9IGZ1bmN0aW9uKG9uUmVqZWN0ZWQ6IEZ1bmN0aW9uKTogUHJvbWlzZSB8IHZvaWQge1xuICByZXR1cm4gdGhpcy50aGVuKG51bGwsIG9uUmVqZWN0ZWQpO1xufTtcblxuUHJvbWlzZS5wcm90b3R5cGVbJ3RoZW4nXSA9IGZ1bmN0aW9uKG9uRnVsZmlsbGVkOiBGdW5jdGlvbiwgb25SZWplY3RlZDogRnVuY3Rpb24pOiBQcm9taXNlIHwgdm9pZCB7XG4gIGNvbnN0IHByb21pc2UgPSBuZXcgdGhpcy5jb25zdHJ1Y3RvcigoKSA9PiBudWxsKTtcblxuICB0aGlzLmhhbmRsZShuZXcgUHJvbWlzZUhhbmRsZXIob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQsIHByb21pc2UpKTtcblxuICByZXR1cm4gcHJvbWlzZTtcbn07XG5cblByb21pc2UucHJvdG90eXBlWydmaW5hbGx5J10gPSBmdW5jdGlvbihjYWxsYmFjazogRnVuY3Rpb24pOiBQcm9taXNlIHwgdm9pZCB7XG4gIGNvbnN0IGNvbnN0cnVjdG9yID0gdGhpcy5jb25zdHJ1Y3RvcjtcblxuICByZXR1cm4gdGhpcy50aGVuKFxuICAgIHZhbHVlID0+IGNvbnN0cnVjdG9yLnJlc29sdmUoY2FsbGJhY2soKSkudGhlbigoKSA9PiB2YWx1ZSksXG4gICAgcmVhc29uID0+IGNvbnN0cnVjdG9yLnJlc29sdmUoY2FsbGJhY2soKSkudGhlbigoKSA9PiBjb25zdHJ1Y3Rvci5yZWplY3QocmVhc29uKSlcbiAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFByb21pc2U7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgUHJvbWlzZSBmcm9tICcuL1Byb21pc2UnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQcm9taXNlSGFuZGxlciB7XG4gIG9uRnVsZmlsbGVkOiBGdW5jdGlvbjtcbiAgb25SZWplY3RlZDogRnVuY3Rpb247XG4gIHByb21pc2U6IFByb21pc2U7XG5cbiAgY29uc3RydWN0b3Iob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQsIHByb21pc2UpIHtcbiAgICB0aGlzLm9uRnVsZmlsbGVkID0gdHlwZW9mIG9uRnVsZmlsbGVkID09PSAnZnVuY3Rpb24nID8gb25GdWxmaWxsZWQgOiBudWxsO1xuICAgIHRoaXMub25SZWplY3RlZCA9IHR5cGVvZiBvblJlamVjdGVkID09PSAnZnVuY3Rpb24nID8gb25SZWplY3RlZCA6IG51bGw7XG4gICAgdGhpcy5wcm9taXNlID0gcHJvbWlzZTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uL3J4L1N1YmplY3QnO1xuaW1wb3J0IEZlYXR1cmVFbmFibGVtZW50IGZyb20gJy4uL2Vudmlyb25tZW50L0ZlYXR1cmVFbmFibGVtZW50JztcbmltcG9ydCBJUGVlckNvbm5lY3Rpb24gZnJvbSAnLi9JUGVlckNvbm5lY3Rpb24nO1xuaW1wb3J0IElQZWVyQ29ubmVjdGlvbkZhY3RvcnkgZnJvbSAnLi9JUGVlckNvbm5lY3Rpb25GYWN0b3J5JztcbmltcG9ydCBWYW5pbGxhUGVlckNvbm5lY3Rpb25GYWN0b3J5IGZyb20gJy4vVmFuaWxsYVBlZXJDb25uZWN0aW9uRmFjdG9yeSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVBlZXJDb25uZWN0aW9uT2ZmZXJJbml0IHtcbiAgYXVkaW9UcmFuc2NlaXZlcj86IFJUQ1J0cFRyYW5zY2VpdmVyO1xuICB2aWRlb1RyYW5zY2VpdmVyPzogUlRDUnRwVHJhbnNjZWl2ZXI7XG4gIHBlZXJDb25uZWN0aW9uOiBJUGVlckNvbm5lY3Rpb247XG4gIGxvY2FsT2ZmZXI6IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBlZXJDb25uZWN0aW9uU2VydmljZSB7XG4gIHByaXZhdGUgc3RhdGljIF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignUGVlckNvbm5lY3Rpb25TZXJ2aWNlJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9wZWVyQ29ubmVjdGlvbkZhY3Rvcnk6IFN1YmplY3Q8SVBlZXJDb25uZWN0aW9uRmFjdG9yeT4gPSBuZXcgU3ViamVjdDxJUGVlckNvbm5lY3Rpb25GYWN0b3J5PihuZXcgVmFuaWxsYVBlZXJDb25uZWN0aW9uRmFjdG9yeSgpKTtcbiAgcHJpdmF0ZSBzdGF0aWMgX2NhY2hlZDoge1xuICAgIGRpcmVjdGlvbj86IFJUQ1J0cFRyYW5zY2VpdmVyRGlyZWN0aW9uO1xuICAgIHBlZXJDb25uZWN0aW9uOiBQcm9taXNlPElQZWVyQ29ubmVjdGlvbk9mZmVySW5pdD47XG4gIH07XG5cbiAgc3RhdGljIGdldCBwZWVyQ29ubmVjdGlvbkZhY3RvcnkoKTogU3ViamVjdDxJUGVlckNvbm5lY3Rpb25GYWN0b3J5PiB7XG4gICAgcmV0dXJuIFBlZXJDb25uZWN0aW9uU2VydmljZS5fcGVlckNvbm5lY3Rpb25GYWN0b3J5O1xuICB9XG5cbiAgc3RhdGljIGluaXRpYXRlSW5pdGlhbFByZWNhY2hpbmcoKTogdm9pZCB7XG4gICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LmlzUHJlY2FjaGluZ0VuYWJsZWQpIHtcbiAgICAgIGNvbnN0IGlnbm9yZWQgPSBQZWVyQ29ubmVjdGlvblNlcnZpY2UucHJlY2FjaGVDcmVhdGVQZWVyQ29ubmVjdGlvbk9mZmVyKClcbiAgICAgICAgLmNhdGNoKGUgPT4gUGVlckNvbm5lY3Rpb25TZXJ2aWNlLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBwcmUtY2FjaGUgcGVlciBjb25uZWN0aW9uIG9mZmVyJywgZSkpO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBwcmVjYWNoZUNyZWF0ZVBlZXJDb25uZWN0aW9uT2ZmZXIoKTogUHJvbWlzZTx7IHBlZXJDb25uZWN0aW9uOiBQcm9taXNlPElQZWVyQ29ubmVjdGlvbk9mZmVySW5pdCB8IHZvaWQ+OyBkaXJlY3Rpb246IFJUQ1J0cFRyYW5zY2VpdmVyRGlyZWN0aW9uIH0+IHtcbiAgICByZXR1cm4gUGVlckNvbm5lY3Rpb25TZXJ2aWNlLl9jYWNoZWQgPSB7XG4gICAgICBkaXJlY3Rpb246ICdyZWN2b25seScsXG4gICAgICBwZWVyQ29ubmVjdGlvbjogUGVlckNvbm5lY3Rpb25TZXJ2aWNlLmNyZWF0ZVBlZXJDb25uZWN0aW9uT2ZmZXIoKVxuICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgUGVlckNvbm5lY3Rpb25TZXJ2aWNlLl9jYWNoZWQgPSBudWxsO1xuXG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfSlcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIGNyZWF0ZVBlZXJDb25uZWN0aW9uT2ZmZXIoZGlyZWN0aW9uOiBSVENSdHBUcmFuc2NlaXZlckRpcmVjdGlvbiA9ICdyZWN2b25seScsIGVuY29kZWRJbnNlcnRhYmxlU3RyZWFtcyA9IGZhbHNlKTogUHJvbWlzZTxJUGVlckNvbm5lY3Rpb25PZmZlckluaXQ+IHtcbiAgICBpZiAoUGVlckNvbm5lY3Rpb25TZXJ2aWNlLl9jYWNoZWQgJiYgUGVlckNvbm5lY3Rpb25TZXJ2aWNlLl9jYWNoZWQuZGlyZWN0aW9uID09PSBkaXJlY3Rpb24gJiYgIWVuY29kZWRJbnNlcnRhYmxlU3RyZWFtcykge1xuICAgICAgY29uc3QgdmFsdWUgPSBQZWVyQ29ubmVjdGlvblNlcnZpY2UuX2NhY2hlZC5wZWVyQ29ubmVjdGlvbjtcblxuICAgICAgUGVlckNvbm5lY3Rpb25TZXJ2aWNlLl9jYWNoZWQgPSBudWxsO1xuXG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgY29uc3QgY29uZmlndXJhdGlvbjogUlRDQ29uZmlndXJhdGlvbiA9IEZlYXR1cmVFbmFibGVtZW50LmlzRW5jb2RlZEluc2VydGFibGVTdHJlYW1zU3VwcG9ydGVkID8ge2VuY29kZWRJbnNlcnRhYmxlU3RyZWFtc30gOiB1bmRlZmluZWQ7XG5cbiAgICByZXR1cm4gUGVlckNvbm5lY3Rpb25TZXJ2aWNlLl9wZWVyQ29ubmVjdGlvbkZhY3RvcnkudmFsdWUuY3JlYXRlUGVlckNvbm5lY3Rpb24oY29uZmlndXJhdGlvbilcbiAgICAgIC50aGVuKGFzeW5jIHBlZXJDb25uZWN0aW9uID0+IHtcbiAgICAgICAgY29uc3Qgc3VwcG9ydHNBZGRUcmFuc2NlaXZlciA9IHBlZXJDb25uZWN0aW9uLnN1cHBvcnRzQWRkVHJhbnNjZWl2ZXI7XG4gICAgICAgIGxldCB2aWRlb1RyYW5zY2VpdmVyLCBhdWRpb1RyYW5zY2VpdmVyO1xuXG4gICAgICAgIGlmIChzdXBwb3J0c0FkZFRyYW5zY2VpdmVyKSB7XG4gICAgICAgICAgYXVkaW9UcmFuc2NlaXZlciA9IHBlZXJDb25uZWN0aW9uLmFkZFRyYW5zY2VpdmVyKCdhdWRpbycsIHtkaXJlY3Rpb259KTtcbiAgICAgICAgICB2aWRlb1RyYW5zY2VpdmVyID0gcGVlckNvbm5lY3Rpb24uYWRkVHJhbnNjZWl2ZXIoJ3ZpZGVvJywge2RpcmVjdGlvbn0pO1xuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGF1ZGlvVHJhbnNjZWl2ZXIsXG4gICAgICAgICAgICB2aWRlb1RyYW5zY2VpdmVyLFxuICAgICAgICAgICAgcGVlckNvbm5lY3Rpb246IHBlZXJDb25uZWN0aW9uLFxuICAgICAgICAgICAgbG9jYWxPZmZlcjogYXdhaXQgcGVlckNvbm5lY3Rpb24uY3JlYXRlT2ZmZXIodW5kZWZpbmVkKVxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBvcHRpb25zID0gZGlyZWN0aW9uID09PSAncmVjdm9ubHknID8ge1xuICAgICAgICAgIG9mZmVyVG9SZWNlaXZlQXVkaW86IHRydWUsXG4gICAgICAgICAgb2ZmZXJUb1JlY2VpdmVWaWRlbzogdHJ1ZVxuICAgICAgICB9IDoge307XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBwZWVyQ29ubmVjdGlvbjogcGVlckNvbm5lY3Rpb24sXG4gICAgICAgICAgbG9jYWxPZmZlcjogYXdhaXQgcGVlckNvbm5lY3Rpb24uY3JlYXRlT2ZmZXIob3B0aW9ucylcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1BlZXJDb25uZWN0aW9uU2VydmljZSBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn1cblxuUGVlckNvbm5lY3Rpb25TZXJ2aWNlLmluaXRpYXRlSW5pdGlhbFByZWNhY2hpbmcoKTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ0Y0NvbmZpZ3VyYXRpb25NYW5hZ2VyIHtcbiAgc3RhdGljIHRydW5jYXRlSWNlU2VydmVycyhjb25maWd1cmF0aW9uOiBSVENDb25maWd1cmF0aW9uKTogUlRDQ29uZmlndXJhdGlvbiB7XG4gICAgY29uc3QgaWNlU2VydmVyczogUlRDSWNlU2VydmVyW10gPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCB1cmxzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgMjsgaW5kZXgrKykge1xuICAgICAgICBjb25zdCB1cmwgPSBjb25maWd1cmF0aW9uLmljZVNlcnZlcnNbaV0udXJsc1tpbmRleF07XG5cbiAgICAgICAgaWYgKHVybCkge1xuICAgICAgICAgIHVybHMucHVzaChjb25maWd1cmF0aW9uLmljZVNlcnZlcnNbaV0udXJsc1tpbmRleF0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGljZVNlcnZlcnMucHVzaCh7XG4gICAgICAgIHVybHM6IHVybHMsXG4gICAgICAgIHVzZXJuYW1lOiBjb25maWd1cmF0aW9uLmljZVNlcnZlcnNbaV0udXNlcm5hbWUsXG4gICAgICAgIGNyZWRlbnRpYWw6IGNvbmZpZ3VyYXRpb24uaWNlU2VydmVyc1tpXS5jcmVkZW50aWFsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25maWd1cmF0aW9uLmljZVNlcnZlcnMgPSBpY2VTZXJ2ZXJzO1xuXG4gICAgcmV0dXJuIGNvbmZpZ3VyYXRpb247XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignUnRjQ29uZmlndXJhdGlvbk1hbmFnZXIgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uIGZyb20gJy4vSVBlZXJDb25uZWN0aW9uJztcbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uL3J4L1N1YmplY3QnO1xuaW1wb3J0IEZlYXR1cmVFbmFibGVtZW50IGZyb20gJy4uL2Vudmlyb25tZW50L0ZlYXR1cmVFbmFibGVtZW50JztcbmltcG9ydCBTZHBQYXJzZXIgZnJvbSAnLi9TZHBQYXJzZXInO1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElSdGNNb25pdG9yU3RhdGlzdGljIHtcbiAgW2tpbmQ6IHN0cmluZ106IElSdGNTdGF0aXN0aWM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUxlZ2FjeVJUQ1N0YXRzUmVwb3J0IHtcbiAgcmVzdWx0OiAoKSA9PiBJTGVnYWN5UlRDU3RhdHNSZXBvcnRJdGVtW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUxlZ2FjeVJUQ1N0YXRzUmVwb3J0SXRlbSBleHRlbmRzIFJUQ1N0YXRzUmVwb3J0IHtcbiAgdHlwZTogc3RyaW5nO1xuICBuYW1lczogKCkgPT4gc3RyaW5nW107XG4gIHN0YXQ6IChuYW1lKSA9PiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVJ0Y1N0YXRpc3RpYyB7XG4gIHNzcmM/OiBzdHJpbmc7XG4gIG1lZGlhVHlwZT86IHN0cmluZztcbiAgdGltZXN0YW1wOiBudW1iZXI7XG4gIGJpdHJhdGU/OiBudW1iZXI7XG4gIGJ5dGVzUmVjZWl2ZWQ/OiBudW1iZXI7XG4gIGZyYW1lc0RlY29kZWQ/OiBudW1iZXI7XG4gIHBhY2tldHNMb3N0PzogbnVtYmVyO1xuICBwYWNrZXRzUmVjZWl2ZWQ/OiBudW1iZXI7XG4gIGNvZGVjPzogc3RyaW5nO1xuICBmcHM/OiBudW1iZXI7XG4gIHJvdW5kVHJpcFRpbWU/OiBudW1iZXI7XG4gIGxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcD86IG51bWJlcjtcbn1cblxuY29uc3QgdXBkYXRlU3RhdGlzdGljVGltZW91dCA9IDEwMDA7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ0Y0Nvbm5lY3Rpb25Nb25pdG9yIGltcGxlbWVudHMgSURpc3Bvc2FibGUge1xuICBwcml2YXRlIHJlYWRvbmx5IF9lc3RpbWF0ZWRSb3VuZFRyaXBUaW1lOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2VzdGltYXRlZFZpZGVvQ29kZWM6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfZXN0aW1hdGVkQXVkaW9Db2RlYzogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9ydGNTdGF0aXN0aWM6IFN1YmplY3Q8SVJ0Y01vbml0b3JTdGF0aXN0aWM+ID0gbmV3IFN1YmplY3Q8SVJ0Y01vbml0b3JTdGF0aXN0aWM+KHt9KTtcbiAgcHJpdmF0ZSBfcGVlckNvbm5lY3Rpb246IElQZWVyQ29ubmVjdGlvbjtcbiAgcHJpdmF0ZSBfaXNNb25pdG9yUnVubmluZyA9IHRydWU7XG4gIHByaXZhdGUgX3VwZGF0ZVRpbWVvdXQ6IG51bWJlcjtcbiAgcHJpdmF0ZSBfdHJhY2tzVG9Nb25pdG9yOiBzdHJpbmdbXTtcblxuICBjb25zdHJ1Y3RvcihwZWVyQ29ubmVjdGlvbjogSVBlZXJDb25uZWN0aW9uLCBtZWRpYVN0cmVhbTogTWVkaWFTdHJlYW0sIGVzdGltYXRlZFJvdW5kVHJpcFRpbWU6IG51bWJlcikge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uID0gcGVlckNvbm5lY3Rpb247XG4gICAgdGhpcy5fZXN0aW1hdGVkUm91bmRUcmlwVGltZSA9IGVzdGltYXRlZFJvdW5kVHJpcFRpbWU7XG4gICAgdGhpcy5fdHJhY2tzVG9Nb25pdG9yID0gbWVkaWFTdHJlYW0uZ2V0VHJhY2tzKCkubWFwKHRyYWNrID0+IHRyYWNrLmtpbmQpIHx8IFtdO1xuXG4gICAgaWYgKHRoaXMuX3BlZXJDb25uZWN0aW9uKSB7XG4gICAgICBpZiAoIUZlYXR1cmVFbmFibGVtZW50LmdldEN1cnJlbnRPZmZlckRpc2FibGVkKSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZFNEUCA9IG5ldyBTZHBQYXJzZXIodGhpcy5fcGVlckNvbm5lY3Rpb24uY3VycmVudFJlbW90ZURlc2NyaXB0aW9uLnNkcCk7XG5cbiAgICAgICAgdGhpcy5fZXN0aW1hdGVkQXVkaW9Db2RlYyA9IHBhcnNlZFNEUC5hdWRpb0NvZGVjO1xuICAgICAgICB0aGlzLl9lc3RpbWF0ZWRWaWRlb0NvZGVjID0gcGFyc2VkU0RQLnZpZGVvQ29kZWM7XG4gICAgICB9XG5cbiAgICAgIHRoaXMudXBkYXRlU3RhdGlzdGljKCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHJ0Y1N0YXRpc3RpYygpOiBTdWJqZWN0PElSdGNNb25pdG9yU3RhdGlzdGljPiB7XG4gICAgcmV0dXJuIHRoaXMuX3J0Y1N0YXRpc3RpYztcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5faXNNb25pdG9yUnVubmluZyA9IGZhbHNlO1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uID0gbnVsbDtcblxuICAgIGlmICh0aGlzLl91cGRhdGVUaW1lb3V0KSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5fdXBkYXRlVGltZW91dCk7XG4gICAgICB0aGlzLl91cGRhdGVUaW1lb3V0ID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHVwZGF0ZVN0YXRpc3RpYygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQuZ2V0U3RhdHNQcm9taXNlQmFzZWREaXNhYmxlZCkge1xuICAgICAgY29uc3QgaWdub3JlZCA9IGF3YWl0IHRoaXMudXBkYXRlU3RhdGlzdGljTGVnYWN5KCk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBTYWZhcmkgMTEgZG9lc250IGhhdmUga2luZCBvciBtZWRpYVR5cGUgc28gd2UgbmVlZCB0byB0YWtlIGl0IGZyb20gdGhlIGluYm91bmQtcnRwIG9iamVjdCBpZFxuICAgIGNvbnN0IGdldEtpbmRGb3JTYWZhcmkxMSA9IChpdGVtKTogc3RyaW5nID0+IGl0ZW0uaWQuaW5jbHVkZXMoJ0F1ZGlvJykgPyAnYXVkaW8nIDogaXRlbS5pZC5pbmNsdWRlcygnVmlkZW8nKSA/ICd2aWRlbycgOiAnJztcbiAgICBjb25zdCBpZ25vcmVkID0gYXdhaXQgdGhpcy5fcGVlckNvbm5lY3Rpb24uZ2V0U3RhdHMobnVsbClcbiAgICAgIC50aGVuKHN0YXRzID0+IHtcbiAgICAgICAgY29uc3QgcnRjU3RhdGlzdGljczogSVJ0Y01vbml0b3JTdGF0aXN0aWMgPSB7fTtcblxuICAgICAgICBpZiAoc3RhdHMpIHtcbiAgICAgICAgICBsZXQgcm91bmRUcmlwVGltZSA9IHRoaXMuX2VzdGltYXRlZFJvdW5kVHJpcFRpbWU7XG4gICAgICAgICAgbGV0IGxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcDtcblxuICAgICAgICAgIHN0YXRzLmZvckVhY2gocmVwb3J0ID0+IHtcbiAgICAgICAgICAgIGlmIChyZXBvcnQudHlwZSA9PT0gJ2NhbmRpZGF0ZS1wYWlyJyAmJiByZXBvcnQuY3VycmVudFJvdW5kVHJpcFRpbWUpIHtcbiAgICAgICAgICAgICAgcm91bmRUcmlwVGltZSA9IHJlcG9ydC5jdXJyZW50Um91bmRUcmlwVGltZSAqIDEwMDA7XG5cbiAgICAgICAgICAgICAgaWYgKHJ0Y1N0YXRpc3RpY3NbJ2F1ZGlvJ10pIHtcbiAgICAgICAgICAgICAgICBydGNTdGF0aXN0aWNzWydhdWRpbyddLnJvdW5kVHJpcFRpbWUgPSByb3VuZFRyaXBUaW1lO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKHJ0Y1N0YXRpc3RpY3NbJ3ZpZGVvJ10pIHtcbiAgICAgICAgICAgICAgICBydGNTdGF0aXN0aWNzWyd2aWRlbyddLnJvdW5kVHJpcFRpbWUgPSByb3VuZFRyaXBUaW1lO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChyZXBvcnQudHlwZSA9PT0gJ2NhbmRpZGF0ZS1wYWlyJyAmJiByZXBvcnQubGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wKSB7XG4gICAgICAgICAgICAgIGxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcCA9IHJlcG9ydC5sYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXA7XG5cbiAgICAgICAgICAgICAgaWYgKHJ0Y1N0YXRpc3RpY3NbJ2F1ZGlvJ10pIHtcbiAgICAgICAgICAgICAgICBydGNTdGF0aXN0aWNzWydhdWRpbyddLmxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcCA9IGxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcDtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChydGNTdGF0aXN0aWNzWyd2aWRlbyddKSB7XG4gICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1sndmlkZW8nXS5sYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXAgPSBsYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXA7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHJlcG9ydC50eXBlID09PSAnaW5ib3VuZC1ydHAnKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGtpbmQgPSByZXBvcnQua2luZCB8fCByZXBvcnQubWVkaWFUeXBlIHx8IGdldEtpbmRGb3JTYWZhcmkxMShyZXBvcnQpO1xuICAgICAgICAgICAgICBsZXQgY29kZWMgPSAnJztcblxuICAgICAgICAgICAgICBzdGF0cy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgIGlmIChpdGVtLmlkID09PSByZXBvcnQuY29kZWNJZCkge1xuICAgICAgICAgICAgICAgICAgY29kZWMgPSBpdGVtLm1pbWVUeXBlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgaWYgKGtpbmQgJiYgdGhpcy5fdHJhY2tzVG9Nb25pdG9yLmluY2x1ZGVzKGtpbmQpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYnl0ZXMgPSByZXBvcnQuYnl0ZXNSZWNlaXZlZCB8fCAwO1xuICAgICAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzQnl0ZXNSZWNlaXZlZCA9IHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZT8uW2tpbmRdPy5ieXRlc1JlY2VpdmVkID8/IDA7XG4gICAgICAgICAgICAgICAgY29uc3QgYnl0ZXNEZWx0YSA9IGJ5dGVzIC0gcHJldmlvdXNCeXRlc1JlY2VpdmVkO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRpbWVEZWx0YSA9IHJlcG9ydC50aW1lc3RhbXAgLSB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWU/LltraW5kXT8udGltZXN0YW1wO1xuICAgICAgICAgICAgICAgIGNvbnN0IGJpdHJhdGUgPSBieXRlc0RlbHRhICYmIHRpbWVEZWx0YSA/IE1hdGguZmxvb3IoOCAqIGJ5dGVzRGVsdGEgL1xuICAgICAgICAgICAgICAgICAgdGltZURlbHRhICogMTAwMCkgOiAwO1xuXG4gICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1traW5kXSA9IHtcbiAgICAgICAgICAgICAgICAgIHNzcmM6IHJlcG9ydC5zc3JjLFxuICAgICAgICAgICAgICAgICAgbWVkaWFUeXBlOiBraW5kLFxuICAgICAgICAgICAgICAgICAgdGltZXN0YW1wOiByZXBvcnQudGltZXN0YW1wLFxuICAgICAgICAgICAgICAgICAgYml0cmF0ZSxcbiAgICAgICAgICAgICAgICAgIGJ5dGVzUmVjZWl2ZWQ6IHJlcG9ydC5ieXRlc1JlY2VpdmVkLFxuICAgICAgICAgICAgICAgICAgcGFja2V0c0xvc3Q6IHJlcG9ydC5wYWNrZXRzTG9zdCxcbiAgICAgICAgICAgICAgICAgIHBhY2tldHNSZWNlaXZlZDogcmVwb3J0LnBhY2tldHNSZWNlaXZlZCxcbiAgICAgICAgICAgICAgICAgIGNvZGVjOiBjb2RlYyB8fCB0aGlzLmdldENvZGVjQnlUeXBlKGtpbmQpLFxuICAgICAgICAgICAgICAgICAgcm91bmRUcmlwVGltZVxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBpZiAocmVwb3J0Lmxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcCB8fCBsYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXApIHtcbiAgICAgICAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3Nba2luZF0ubGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wID0gcmVwb3J0Lmxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcCB8fCBsYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXA7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGtpbmQgPT09ICd2aWRlbycgJiYgdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlICYmIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZS52aWRlbykge1xuICAgICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1traW5kXVsnZnJhbWVzRGVjb2RlZCddID0gcmVwb3J0LmZyYW1lc0RlY29kZWQ7XG5cbiAgICAgICAgICAgICAgICAgIGNvbnN0IGZwcyA9IChyZXBvcnQuZnJhbWVzRGVjb2RlZCAtIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZS52aWRlby5mcmFtZXNEZWNvZGVkKSAvXG4gICAgICAgICAgICAgICAgICAgIChydGNTdGF0aXN0aWNzW2tpbmRdLnRpbWVzdGFtcCAtIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZS52aWRlby50aW1lc3RhbXApICpcbiAgICAgICAgICAgICAgICAgICAgMTAwMDtcblxuICAgICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1traW5kXVsnZnBzJ10gPSBmcHMgPyBNYXRoLnJvdW5kKGZwcyAqIDEwMCkgLyAxMDAgOiAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlID0gcnRjU3RhdGlzdGljcztcbiAgICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5faXNNb25pdG9yUnVubmluZykge1xuICAgICAgICAgIHRoaXMuX3VwZGF0ZVRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB0aGlzLnVwZGF0ZVN0YXRpc3RpYygpLCB1cGRhdGVTdGF0aXN0aWNUaW1lb3V0KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHVwZGF0ZVN0YXRpc3RpY0xlZ2FjeSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBpZ25vcmVkID0gYXdhaXQgdGhpcy5fcGVlckNvbm5lY3Rpb24uZ2V0U3RhdHNMZWdhY3koKS50aGVuKHN0YXRzID0+IHtcbiAgICAgIGNvbnN0IHJ0Y1N0YXRpc3RpY3M6IElSdGNNb25pdG9yU3RhdGlzdGljID0ge307XG4gICAgICBsZXQgcm91bmRUcmlwVGltZSA9IHRoaXMuX2VzdGltYXRlZFJvdW5kVHJpcFRpbWU7XG5cbiAgICAgIHN0YXRzLnJlc3VsdCgpLmZvckVhY2gocmVwb3J0ID0+IHtcbiAgICAgICAgcmVwb3J0Lm5hbWVzKCkuZm9yRWFjaChuYW1lID0+IHtcbiAgICAgICAgICBpZiAobmFtZSA9PT0gJ2dvb2dSVFQnKSB7XG4gICAgICAgICAgICByb3VuZFRyaXBUaW1lID0gcmVwb3J0LnN0YXQobmFtZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAocmVwb3J0LnR5cGUgPT09ICdzc3JjJykge1xuICAgICAgICAgIGNvbnN0IG1lZGlhVHlwZSA9IHJlcG9ydC5zdGF0KCdtZWRpYVR5cGUnKS50b1N0cmluZygpO1xuXG4gICAgICAgICAgcnRjU3RhdGlzdGljc1ttZWRpYVR5cGVdID0ge3RpbWVzdGFtcDogRGF0ZS5ub3coKX07XG4gICAgICAgICAgcnRjU3RhdGlzdGljc1ttZWRpYVR5cGVdWydzc3JjJ10gPSByZXBvcnQuc3RhdCgnc3NyYycpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgcnRjU3RhdGlzdGljc1ttZWRpYVR5cGVdWydtZWRpYVR5cGUnXSA9IG1lZGlhVHlwZTtcbiAgICAgICAgICBydGNTdGF0aXN0aWNzW21lZGlhVHlwZV1bJ2J5dGVzUmVjZWl2ZWQnXSA9IHJlcG9ydC5zdGF0KCdieXRlc1JlY2VpdmVkJyk7XG4gICAgICAgICAgcnRjU3RhdGlzdGljc1ttZWRpYVR5cGVdWydwYWNrZXRzTG9zdCddID0gcmVwb3J0LnN0YXQoJ3BhY2tldHNMb3N0Jyk7XG4gICAgICAgICAgcnRjU3RhdGlzdGljc1ttZWRpYVR5cGVdWydwYWNrZXRzUmVjZWl2ZWQnXSA9IHJlcG9ydC5zdGF0KCdwYWNrZXRzUmVjZWl2ZWQnKTtcbiAgICAgICAgICBydGNTdGF0aXN0aWNzW21lZGlhVHlwZV1bJ2NvZGVjJ10gPSByZXBvcnQuc3RhdCgnZ29vZ0NvZGVjTmFtZScpLnRvU3RyaW5nKCkgfHwgdGhpcy5nZXRDb2RlY0J5VHlwZShtZWRpYVR5cGUpO1xuICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbbWVkaWFUeXBlXVsncm91bmRUcmlwVGltZSddID0gcm91bmRUcmlwVGltZTtcblxuICAgICAgICAgIGlmIChtZWRpYVR5cGUgPT09ICd2aWRlbycgJiYgdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlICYmIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZS52aWRlbykge1xuICAgICAgICAgICAgcnRjU3RhdGlzdGljc1ttZWRpYVR5cGVdWydmcmFtZXNEZWNvZGVkJ10gPSByZXBvcnQuc3RhdCgnZnJhbWVzRGVjb2RlZCcpO1xuICAgICAgICAgICAgcnRjU3RhdGlzdGljc1ttZWRpYVR5cGVdWydmcHMnXSA9IChydGNTdGF0aXN0aWNzW21lZGlhVHlwZV0uZnJhbWVzRGVjb2RlZCAtIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZS52aWRlby5mcmFtZXNEZWNvZGVkKSAvXG4gICAgICAgICAgICAgIChydGNTdGF0aXN0aWNzW21lZGlhVHlwZV0udGltZXN0YW1wIC0gdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlLnZpZGVvLnRpbWVzdGFtcCkgKlxuICAgICAgICAgICAgMTAwMCB8fCAwO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUgPSBydGNTdGF0aXN0aWNzO1xuICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2lzTW9uaXRvclJ1bm5pbmcpIHtcbiAgICAgICAgdGhpcy5fdXBkYXRlVGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHRoaXMudXBkYXRlU3RhdGlzdGljKCksIHVwZGF0ZVN0YXRpc3RpY1RpbWVvdXQpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDb2RlY0J5VHlwZSh0eXBlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSAnYXVkaW8nOlxuICAgICAgICByZXR1cm4gdGhpcy5fZXN0aW1hdGVkQXVkaW9Db2RlYztcbiAgICAgIGNhc2UgJ3ZpZGVvJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VzdGltYXRlZFZpZGVvQ29kZWM7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ3Vua25vd24nO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IElQZWVyQ29ubmVjdGlvbiBmcm9tICcuL0lQZWVyQ29ubmVjdGlvbic7XG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi9yeC9TdWJqZWN0JztcbmltcG9ydCBGZWF0dXJlRW5hYmxlbWVudCBmcm9tICcuLi9lbnZpcm9ubWVudC9GZWF0dXJlRW5hYmxlbWVudCc7XG5pbXBvcnQgU2RwUGFyc2VyIGZyb20gJy4vU2RwUGFyc2VyJztcbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0lEaXNwb3NhYmxlJztcblxuZXhwb3J0IGludGVyZmFjZSBJUnRjUHVibGlzaE1vbml0b3JTdGF0aXN0aWMge1xuICBba2luZDogc3RyaW5nXTogSVJ0Y1B1Ymxpc2hTdGF0aXN0aWM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUxlZ2FjeVJUQ1N0YXRzUmVwb3J0IHtcbiAgcmVzdWx0OiAoKSA9PiBJTGVnYWN5UlRDU3RhdHNSZXBvcnRJdGVtW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUxlZ2FjeVJUQ1N0YXRzUmVwb3J0SXRlbSBleHRlbmRzIFJUQ1N0YXRzUmVwb3J0IHtcbiAgdHlwZTogc3RyaW5nO1xuICBuYW1lczogKCkgPT4gc3RyaW5nW107XG4gIHN0YXQ6IChuYW1lKSA9PiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVJ0Y1B1Ymxpc2hTdGF0aXN0aWMge1xuICBsYXN0UGFja2V0U2VudFRpbWVzdGFtcD86IG51bWJlcjtcbiAgc3NyYzogc3RyaW5nO1xuICBtZWRpYVR5cGU6IHN0cmluZztcbiAgdGltZXN0YW1wOiBudW1iZXI7XG4gIGJpdHJhdGU/OiBudW1iZXI7XG4gIGJ5dGVzU2VudDogbnVtYmVyO1xuICBwYWNrZXRzU2VudDogbnVtYmVyO1xuICByZXRyYW5zbWl0dGVkQnl0ZXNTZW50PzogbnVtYmVyO1xuICBmaXJDb3VudD86IG51bWJlcjtcbiAgZnJhbWVIZWlnaHQ/OiBudW1iZXI7XG4gIGZyYW1lV2lkdGg/OiBudW1iZXI7XG4gIGZyYW1lc0VuY29kZWQ/OiBudW1iZXI7XG4gIGZyYW1lc1NlbnQ/OiBudW1iZXI7XG4gIGhlYWRlckJ5dGVzU2VudD86IG51bWJlcjtcbiAgaHVnZUZyYW1lc1NlbnQ/OiBudW1iZXI7XG4gIHBsaUNvdW50PzogbnVtYmVyO1xuICBxcFN1bT86IG51bWJlcjtcbiAgdG90YWxFbmNvZGVUaW1lPzogbnVtYmVyO1xuICB0b3RhbEVuY29kZWRCeXRlc1RhcmdldD86IG51bWJlcjtcbiAgY29kZWM6IHN0cmluZztcbiAgZnBzPzogbnVtYmVyO1xuICByb3VuZFRyaXBUaW1lOiBudW1iZXI7XG59XG5cbmNvbnN0IHVwZGF0ZVN0YXRpc3RpY1RpbWVvdXQgPSAxMDAwO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSdGNQdWJsaXNoTW9uaXRvciBpbXBsZW1lbnRzIElEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfZXN0aW1hdGVkUm91bmRUcmlwVGltZTogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9lc3RpbWF0ZWRWaWRlb0NvZGVjOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2VzdGltYXRlZEF1ZGlvQ29kZWM6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfcnRjU3RhdGlzdGljOiBTdWJqZWN0PElSdGNQdWJsaXNoTW9uaXRvclN0YXRpc3RpYz4gPSBuZXcgU3ViamVjdDxJUnRjUHVibGlzaE1vbml0b3JTdGF0aXN0aWM+KHt9KTtcbiAgcHJpdmF0ZSBfcGVlckNvbm5lY3Rpb246IElQZWVyQ29ubmVjdGlvbjtcbiAgcHJpdmF0ZSBfaXNNb25pdG9yUnVubmluZyA9IHRydWU7XG4gIHByaXZhdGUgX3VwZGF0ZVRpbWVvdXQ6IG51bWJlcjtcbiAgcHJpdmF0ZSBfYXZhaWxhYmxlVHJhY2tzOiB7XG4gICAgYXVkaW86IGJvb2xlYW47XG4gICAgdmlkZW86IGJvb2xlYW47XG4gIH07XG5cbiAgY29uc3RydWN0b3IocGVlckNvbm5lY3Rpb246IElQZWVyQ29ubmVjdGlvbiwgbWVkaWFTdHJlYW06IE1lZGlhU3RyZWFtLCBlc3RpbWF0ZWRSb3VuZFRyaXBUaW1lOiBudW1iZXIpIHtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbiA9IHBlZXJDb25uZWN0aW9uO1xuICAgIHRoaXMuX2VzdGltYXRlZFJvdW5kVHJpcFRpbWUgPSBlc3RpbWF0ZWRSb3VuZFRyaXBUaW1lO1xuXG4gICAgaWYgKHRoaXMuX3BlZXJDb25uZWN0aW9uKSB7XG4gICAgICBjb25zdCBwYXJzZWRMb2NhbERlc2NyaXB0aW9uID0gbmV3IFNkcFBhcnNlcih0aGlzLl9wZWVyQ29ubmVjdGlvbi5jdXJyZW50TG9jYWxEZXNjcmlwdGlvbi5zZHApO1xuICAgICAgY29uc3QgcGFyc2VkUmVtb3RlRGVzY3JpcHRpb24gPSBuZXcgU2RwUGFyc2VyKHRoaXMuX3BlZXJDb25uZWN0aW9uLmN1cnJlbnRSZW1vdGVEZXNjcmlwdGlvbi5zZHApO1xuXG4gICAgICB0aGlzLl9lc3RpbWF0ZWRBdWRpb0NvZGVjID0gcGFyc2VkUmVtb3RlRGVzY3JpcHRpb24uYXVkaW9Db2RlYztcbiAgICAgIHRoaXMuX2VzdGltYXRlZFZpZGVvQ29kZWMgPSBwYXJzZWRSZW1vdGVEZXNjcmlwdGlvbi52aWRlb0NvZGVjO1xuXG4gICAgICB0aGlzLl9hdmFpbGFibGVUcmFja3MgPSB7XG4gICAgICAgIGF1ZGlvOiBwYXJzZWRMb2NhbERlc2NyaXB0aW9uLmlzQXVkaW9UcmFja0VuYWJsZWQgJiYgcGFyc2VkUmVtb3RlRGVzY3JpcHRpb24uaXNBdWRpb1RyYWNrRW5hYmxlZCxcbiAgICAgICAgdmlkZW86IHBhcnNlZExvY2FsRGVzY3JpcHRpb24uaXNWaWRlb1RyYWNrRW5hYmxlZCAmJiBwYXJzZWRSZW1vdGVEZXNjcmlwdGlvbi5pc1ZpZGVvVHJhY2tFbmFibGVkXG4gICAgICB9O1xuXG4gICAgICB0aGlzLnVwZGF0ZVN0YXRpc3RpYygpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBydGNTdGF0aXN0aWMoKTogU3ViamVjdDxJUnRjUHVibGlzaE1vbml0b3JTdGF0aXN0aWM+IHtcbiAgICByZXR1cm4gdGhpcy5fcnRjU3RhdGlzdGljO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9pc01vbml0b3JSdW5uaW5nID0gZmFsc2U7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24gPSBudWxsO1xuXG4gICAgaWYgKHRoaXMuX3VwZGF0ZVRpbWVvdXQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLl91cGRhdGVUaW1lb3V0KTtcbiAgICAgIHRoaXMuX3VwZGF0ZVRpbWVvdXQgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgdXBkYXRlU3RhdGlzdGljKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmIChGZWF0dXJlRW5hYmxlbWVudC5nZXRTdGF0c1Byb21pc2VCYXNlZERpc2FibGVkKSB7XG4gICAgICBjb25zdCBpZ25vcmVkID0ge1xuICAgICAgICBhdWRpbzogMCxcbiAgICAgICAgdmlkZW86IDBcbiAgICAgIH07XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBTYWZhcmkgMTEgZG9lc250IGhhdmUga2luZCBvciBtZWRpYVR5cGUgc28gd2UgbmVlZCB0byB0YWtlIGl0IGZyb20gdGhlIGluYm91bmQtcnRwIG9iamVjdCBpZFxuICAgIGNvbnN0IGdldEtpbmRGb3JTYWZhcmkxMSA9IChpdGVtKTogc3RyaW5nID0+IGl0ZW0uaWQuaW5jbHVkZXMoJ0F1ZGlvJykgPyAnYXVkaW8nIDogaXRlbS5pZC5pbmNsdWRlcygnVmlkZW8nKSA/ICd2aWRlbycgOiAnJztcbiAgICBjb25zdCBpZ25vcmVkID0gYXdhaXQgdGhpcy5fcGVlckNvbm5lY3Rpb24uZ2V0U3RhdHMobnVsbClcbiAgICAgIC50aGVuKHN0YXRzID0+IHtcbiAgICAgICAgY29uc3QgcnRjU3RhdGlzdGljczogSVJ0Y1B1Ymxpc2hNb25pdG9yU3RhdGlzdGljID0ge307XG5cbiAgICAgICAgaWYgKHN0YXRzKSB7XG4gICAgICAgICAgbGV0IHJvdW5kVHJpcFRpbWUgPSB0aGlzLl9lc3RpbWF0ZWRSb3VuZFRyaXBUaW1lO1xuICAgICAgICAgIGxldCBsYXN0UGFja2V0U2VudFRpbWVzdGFtcDtcblxuICAgICAgICAgIHN0YXRzLmZvckVhY2gocmVwb3J0ID0+IHtcbiAgICAgICAgICAgIGlmIChyZXBvcnQudHlwZSA9PT0gJ2NhbmRpZGF0ZS1wYWlyJyAmJiByZXBvcnQuY3VycmVudFJvdW5kVHJpcFRpbWUpIHtcbiAgICAgICAgICAgICAgcm91bmRUcmlwVGltZSA9IHJlcG9ydC5jdXJyZW50Um91bmRUcmlwVGltZSAqIDEwMDA7XG5cbiAgICAgICAgICAgICAgaWYgKHJ0Y1N0YXRpc3RpY3NbJ2F1ZGlvJ10pIHtcbiAgICAgICAgICAgICAgICBydGNTdGF0aXN0aWNzWydhdWRpbyddLnJvdW5kVHJpcFRpbWUgPSByb3VuZFRyaXBUaW1lO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKHJ0Y1N0YXRpc3RpY3NbJ3ZpZGVvJ10pIHtcbiAgICAgICAgICAgICAgICBydGNTdGF0aXN0aWNzWyd2aWRlbyddLnJvdW5kVHJpcFRpbWUgPSByb3VuZFRyaXBUaW1lO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChyZXBvcnQudHlwZSA9PT0gJ2NhbmRpZGF0ZS1wYWlyJyAmJiByZXBvcnQubGFzdFBhY2tldFNlbnRUaW1lc3RhbXApIHtcbiAgICAgICAgICAgICAgbGFzdFBhY2tldFNlbnRUaW1lc3RhbXAgPSByZXBvcnQubGFzdFBhY2tldFNlbnRUaW1lc3RhbXA7XG5cbiAgICAgICAgICAgICAgaWYgKHJ0Y1N0YXRpc3RpY3NbJ2F1ZGlvJ10pIHtcbiAgICAgICAgICAgICAgICBydGNTdGF0aXN0aWNzWydhdWRpbyddLmxhc3RQYWNrZXRTZW50VGltZXN0YW1wID0gbGFzdFBhY2tldFNlbnRUaW1lc3RhbXA7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAocnRjU3RhdGlzdGljc1sndmlkZW8nXSkge1xuICAgICAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbJ3ZpZGVvJ10ubGFzdFBhY2tldFNlbnRUaW1lc3RhbXAgPSBsYXN0UGFja2V0U2VudFRpbWVzdGFtcDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocmVwb3J0LnR5cGUgPT09ICdvdXRib3VuZC1ydHAnKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGtpbmQgPSByZXBvcnQua2luZCB8fCByZXBvcnQubWVkaWFUeXBlIHx8IGdldEtpbmRGb3JTYWZhcmkxMShyZXBvcnQpO1xuICAgICAgICAgICAgICBsZXQgY29kZWMgPSAnJztcblxuICAgICAgICAgICAgICBzdGF0cy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgIGlmIChpdGVtLmlkID09PSByZXBvcnQuY29kZWNJZCkge1xuICAgICAgICAgICAgICAgICAgY29kZWMgPSBpdGVtLm1pbWVUeXBlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgaWYgKGtpbmQgJiYgdGhpcy5fYXZhaWxhYmxlVHJhY2tzW2tpbmRdKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYnl0ZXMgPSByZXBvcnQuYnl0ZXNTZW50IHx8IDA7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJldmlvdXNCeXRlc1NlbnQgPSB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWU/LltraW5kXT8uYnl0ZXNTZW50ID8/IDA7XG4gICAgICAgICAgICAgICAgY29uc3QgYnl0ZXNEZWx0YSA9IGJ5dGVzIC0gcHJldmlvdXNCeXRlc1NlbnQ7XG4gICAgICAgICAgICAgICAgY29uc3QgdGltZURlbHRhID0gcmVwb3J0LnRpbWVzdGFtcCAtIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZT8uW2tpbmRdPy50aW1lc3RhbXA7XG4gICAgICAgICAgICAgICAgY29uc3QgYml0cmF0ZSA9IGJ5dGVzRGVsdGEgJiYgdGltZURlbHRhID8gTWF0aC5mbG9vcig4ICogYnl0ZXNEZWx0YSAvXG4gICAgICAgICAgICAgICAgICB0aW1lRGVsdGEgKiAxMDAwKSA6IDA7XG5cbiAgICAgICAgICAgICAgICBydGNTdGF0aXN0aWNzW2tpbmRdID0ge1xuICAgICAgICAgICAgICAgICAgc3NyYzogcmVwb3J0LnNzcmMsXG4gICAgICAgICAgICAgICAgICBtZWRpYVR5cGU6IGtpbmQsXG4gICAgICAgICAgICAgICAgICB0aW1lc3RhbXA6IHJlcG9ydC50aW1lc3RhbXAsXG4gICAgICAgICAgICAgICAgICBiaXRyYXRlLFxuICAgICAgICAgICAgICAgICAgYnl0ZXNTZW50OiByZXBvcnQuYnl0ZXNTZW50LFxuICAgICAgICAgICAgICAgICAgcGFja2V0c1NlbnQ6IHJlcG9ydC5wYWNrZXRzU2VudCxcbiAgICAgICAgICAgICAgICAgIHJldHJhbnNtaXR0ZWRCeXRlc1NlbnQ6IHJlcG9ydC5yZXRyYW5zbWl0dGVkQnl0ZXNTZW50LFxuICAgICAgICAgICAgICAgICAgY29kZWM6IGNvZGVjIHx8IHRoaXMuZ2V0Q29kZWNCeVR5cGUoa2luZCksXG4gICAgICAgICAgICAgICAgICByb3VuZFRyaXBUaW1lXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGlmIChyZXBvcnQubGFzdFBhY2tldFNlbnRUaW1lc3RhbXAgfHwgbGFzdFBhY2tldFNlbnRUaW1lc3RhbXApIHtcbiAgICAgICAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3Nba2luZF0ubGFzdFBhY2tldFNlbnRUaW1lc3RhbXAgPSByZXBvcnQubGFzdFBhY2tldFNlbnRUaW1lc3RhbXAgfHwgbGFzdFBhY2tldFNlbnRUaW1lc3RhbXA7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGtpbmQgPT09ICd2aWRlbycgJiYgdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlICYmIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZS52aWRlbykge1xuICAgICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1traW5kXVsnZmlyQ291bnQnXSA9IHJlcG9ydC5maXJDb3VudDtcbiAgICAgICAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3Nba2luZF1bJ2ZyYW1lSGVpZ2h0J10gPSByZXBvcnQuZnJhbWVIZWlnaHQ7XG4gICAgICAgICAgICAgICAgICBydGNTdGF0aXN0aWNzW2tpbmRdWydmcmFtZVdpZHRoJ10gPSByZXBvcnQuZnJhbWVXaWR0aDtcbiAgICAgICAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3Nba2luZF1bJ2ZyYW1lc0VuY29kZWQnXSA9IHJlcG9ydC5mcmFtZXNFbmNvZGVkO1xuICAgICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1traW5kXVsnZnJhbWVzU2VudCddID0gcmVwb3J0LmZyYW1lc1NlbnQ7XG4gICAgICAgICAgICAgICAgICBydGNTdGF0aXN0aWNzW2tpbmRdWydoZWFkZXJCeXRlc1NlbnQnXSA9IHJlcG9ydC5oZWFkZXJCeXRlc1NlbnQ7XG4gICAgICAgICAgICAgICAgICBydGNTdGF0aXN0aWNzW2tpbmRdWydodWdlRnJhbWVzU2VudCddID0gcmVwb3J0Lmh1Z2VGcmFtZXNTZW50O1xuICAgICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1traW5kXVsncGxpQ291bnQnXSA9IHJlcG9ydC5wbGlDb3VudDtcbiAgICAgICAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3Nba2luZF1bJ3FwU3VtJ10gPSByZXBvcnQucXBTdW07XG4gICAgICAgICAgICAgICAgICBydGNTdGF0aXN0aWNzW2tpbmRdWyd0b3RhbEVuY29kZVRpbWUnXSA9IHJlcG9ydC50b3RhbEVuY29kZVRpbWU7XG4gICAgICAgICAgICAgICAgICBydGNTdGF0aXN0aWNzW2tpbmRdWyd0b3RhbEVuY29kZWRCeXRlc1RhcmdldCddID0gcmVwb3J0LnRvdGFsRW5jb2RlZEJ5dGVzVGFyZ2V0O1xuXG4gICAgICAgICAgICAgICAgICBjb25zdCBmcHMgPSAocmVwb3J0LmZyYW1lc0VuY29kZWQgLSB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUudmlkZW8uZnJhbWVzRW5jb2RlZCkgL1xuICAgICAgICAgICAgICAgICAgICAocnRjU3RhdGlzdGljc1traW5kXS50aW1lc3RhbXAgLSB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUudmlkZW8udGltZXN0YW1wKSAqXG4gICAgICAgICAgICAgICAgICAgIDEwMDA7XG5cbiAgICAgICAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3Nba2luZF1bJ2ZwcyddID0gZnBzID8gTWF0aC5yb3VuZChmcHMgKiAxMDApIC8gMTAwIDogMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZSA9IHJ0Y1N0YXRpc3RpY3M7XG4gICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX2lzTW9uaXRvclJ1bm5pbmcpIHtcbiAgICAgICAgICB0aGlzLl91cGRhdGVUaW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4gdGhpcy51cGRhdGVTdGF0aXN0aWMoKSwgdXBkYXRlU3RhdGlzdGljVGltZW91dCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDb2RlY0J5VHlwZSh0eXBlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSAnYXVkaW8nOlxuICAgICAgICByZXR1cm4gdGhpcy5fZXN0aW1hdGVkQXVkaW9Db2RlYztcbiAgICAgIGNhc2UgJ3ZpZGVvJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VzdGltYXRlZFZpZGVvQ29kZWM7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ3Vua25vd24nO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTZHBQYXJzZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF9zZHA6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfYXVkaW9Db2RlYzogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF92aWRlb0NvZGVjOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2lzQXVkaW9UcmFja0VuYWJsZWQ6IGJvb2xlYW47XG4gIHByaXZhdGUgcmVhZG9ubHkgX2lzVmlkZW9UcmFja0VuYWJsZWQ6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3Ioc2RwOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9zZHAgPSBzZHA7XG5cbiAgICBjb25zdCBzZHBTcGxpdEJ5TGluZXMgPSB0aGlzLl9zZHAuc3BsaXQoLyhcXHJcXG58XFxyfFxcbikvKTtcbiAgICBjb25zdCBzZHBTcGxpdEJ5VHJhY2tzID0gdGhpcy5fc2RwLnNwbGl0KC8oPzpefFtcXHJcXG5dKW09Lyk7XG5cbiAgICB0aGlzLl9hdWRpb0NvZGVjID0gdGhpcy5hcHBseUNvZGVjKCdhdWRpbycsIHNkcFNwbGl0QnlMaW5lcyk7XG4gICAgdGhpcy5fdmlkZW9Db2RlYyA9IHRoaXMuYXBwbHlDb2RlYygndmlkZW8nLCBzZHBTcGxpdEJ5TGluZXMpO1xuICAgIHRoaXMuX2lzQXVkaW9UcmFja0VuYWJsZWQgPSB0aGlzLmlzVHJhY2tCeVR5cGVFbmFibGVkKCdhdWRpbycsIHNkcFNwbGl0QnlUcmFja3MpO1xuICAgIHRoaXMuX2lzVmlkZW9UcmFja0VuYWJsZWQgPSB0aGlzLmlzVHJhY2tCeVR5cGVFbmFibGVkKCd2aWRlbycsIHNkcFNwbGl0QnlUcmFja3MpO1xuICB9XG5cbiAgZ2V0IGF1ZGlvQ29kZWMoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fYXVkaW9Db2RlYztcbiAgfVxuXG4gIGdldCB2aWRlb0NvZGVjKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3ZpZGVvQ29kZWM7XG4gIH1cblxuICBnZXQgaXNBdWRpb1RyYWNrRW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faXNBdWRpb1RyYWNrRW5hYmxlZDtcbiAgfVxuXG4gIGdldCBpc1ZpZGVvVHJhY2tFbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pc1ZpZGVvVHJhY2tFbmFibGVkO1xuICB9XG5cbiAgcHJpdmF0ZSBpc1RyYWNrQnlUeXBlRW5hYmxlZCh0eXBlOiBzdHJpbmcsIHNkcFNwbGl0QnlUcmFja3M6IHN0cmluZ1tdKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgc2RwU2VjdGlvbkZvclR5cGUgPSBzZHBTcGxpdEJ5VHJhY2tzLmZpbmQoc2RwVHJhY2sgPT4gc2RwVHJhY2suc3RhcnRzV2l0aCh0eXBlKSk7XG5cbiAgICBpZiAoIXNkcFNlY3Rpb25Gb3JUeXBlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuICFzZHBTZWN0aW9uRm9yVHlwZS5pbmNsdWRlcyhgYT1pbmFjdGl2ZWApO1xuICB9XG5cbiAgcHJpdmF0ZSBhcHBseUNvZGVjKHR5cGU6IHN0cmluZywgc2RwU3BsaXRCeUxpbmVzOiBzdHJpbmcgW10pOiBzdHJpbmcge1xuICAgIGNvbnN0IHVzZWRDb2RlY0xpbmUgPSBzZHBTcGxpdEJ5TGluZXMuZmluZChzZHBMaW5lID0+IHNkcExpbmUuaW5jbHVkZXMoYGE9cnRwbWFwOiR7c2RwU3BsaXRCeUxpbmVzLmZpbmQoaSA9PiBpLmluY2x1ZGVzKGBtPSR7dHlwZX1gKSkuc3BsaXQoJyAnKVszXX1gKSk7XG4gICAgY29uc3QgdXNlZENvZGVjID0gdXNlZENvZGVjTGluZS5zcGxpdCgnICcpWzFdO1xuICAgIGNvbnN0IGNvZGVjTmFtZSA9IHVzZWRDb2RlYy5zcGxpdCgnLycpWzBdO1xuXG4gICAgcmV0dXJuIGNvZGVjTmFtZTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IElQZWVyQ29ubmVjdGlvbiwge1BlZXJDb25uZWN0aW9uRXZlbnRzfSBmcm9tICcuL0lQZWVyQ29ubmVjdGlvbic7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IEZlYXR1cmVFbmFibGVtZW50IGZyb20gJy4uL2Vudmlyb25tZW50L0ZlYXR1cmVFbmFibGVtZW50JztcbmltcG9ydCB7SUxlZ2FjeVJUQ1N0YXRzUmVwb3J0fSBmcm9tICcuL1J0Y0Nvbm5lY3Rpb25Nb25pdG9yJztcblxuY2xhc3MgVmFuaWxsYVBlZXJDb25uZWN0aW9uIGltcGxlbWVudHMgSVBlZXJDb25uZWN0aW9uIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1ZhbmlsbGFQZWVyQ29ubmVjdGlvbicpO1xuICBwcml2YXRlIF9wZWVyQ29ubmVjdGlvbjogUlRDUGVlckNvbm5lY3Rpb247XG5cbiAgY29uc3RydWN0b3IoY29uZmlndXJhdGlvbj86IFJUQ0NvbmZpZ3VyYXRpb24pIHtcbiAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQud2Via2l0UlRDUGVlckNvbm5lY3Rpb25FbmFibGVkKSB7XG4gICAgICAvLyBJZ25vcmVkIGFzIGxlZ2FjeSB3ZWJraXRSVENQZWVyQ29ubmVjdGlvbiBjbGFzcyBpcyBkZXByZWNhdGVkXG4gICAgICAvLyBUaGlzIHdhcyBhIENocm9tZSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvblxuICAgICAgLy8gUmVxdWlyZXMgYSB0cy1pZ25vcmUgZGlyZWN0aXZlIHRvIHByZXZlbnQgdHlwZXNjcmlwdCBlcnJvcnNcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uID0gbmV3IHdlYmtpdFJUQ1BlZXJDb25uZWN0aW9uKGNvbmZpZ3VyYXRpb24pO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24gPSBuZXcgUlRDUGVlckNvbm5lY3Rpb24oY29uZmlndXJhdGlvbik7XG4gIH1cblxuICBnZXQgbmF0aXZlKCk6IFJUQ1BlZXJDb25uZWN0aW9uIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uO1xuICB9XG5cbiAgZ2V0IGN1cnJlbnRMb2NhbERlc2NyaXB0aW9uKCk6IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbiB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5jdXJyZW50TG9jYWxEZXNjcmlwdGlvbjtcbiAgfVxuXG4gIGdldCBjdXJyZW50UmVtb3RlRGVzY3JpcHRpb24oKTogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmN1cnJlbnRSZW1vdGVEZXNjcmlwdGlvbjtcbiAgfVxuXG4gIGdldCBjb25uZWN0aW9uU3RhdGUoKTogUlRDUGVlckNvbm5lY3Rpb25TdGF0ZSB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmNvbm5lY3Rpb25TdGF0ZTtcbiAgfVxuXG4gIGdldCBpY2VDb25uZWN0aW9uU3RhdGUoKTogUlRDSWNlQ29ubmVjdGlvblN0YXRlIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlO1xuICB9XG5cbiAgZ2V0IHN1cHBvcnRzR2V0Q29uZmlndXJhdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHlwZW9mIHRoaXMuX3BlZXJDb25uZWN0aW9uLmdldENvbmZpZ3VyYXRpb24gPT09ICdmdW5jdGlvbic7XG4gIH1cblxuICBnZXQgc3VwcG9ydHNTZXRDb25maWd1cmF0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0eXBlb2YgdGhpcy5fcGVlckNvbm5lY3Rpb24uc2V0Q29uZmlndXJhdGlvbiA9PT0gJ2Z1bmN0aW9uJztcbiAgfVxuXG4gIGdldCBzdXBwb3J0c0FkZFRyYW5zY2VpdmVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhRmVhdHVyZUVuYWJsZW1lbnQuYWRkVHJhbmNlaXZlckRpc2FibGVkICYmIHR5cGVvZiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5hZGRUcmFuc2NlaXZlciA9PT0gJ2Z1bmN0aW9uJztcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZU9mZmVyKG9wdGlvbnM/OiBSVENPZmZlck9wdGlvbnMpOiBQcm9taXNlPFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ+IHtcbiAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQucHJvbWlzZUJhc2VkUENNZXRob2RzRGlzYWJsZWQpIHtcbiAgICAgIC8vIElnbm9yZWQgYXMgbGVnYWN5IGNyZWF0ZU9mZmVyIG1ldGhvZCB3aXRoIGNhbGxiYWNrcyBpcyBkZXByZWNhdGVkXG4gICAgICAvLyBSZXF1aXJlcyBhIHRzLWlnbm9yZSBkaXJlY3RpdmUgdG8gcHJldmVudCB0eXBlc2NyaXB0IGVycm9yc1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHRoaXMuX3BlZXJDb25uZWN0aW9uLmNyZWF0ZU9mZmVyKHJlc29sdmUsIHJlamVjdCwgb3B0aW9ucykpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5jcmVhdGVPZmZlcihvcHRpb25zKTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZUFuc3dlcihvcHRpb25zPzogUlRDQW5zd2VyT3B0aW9ucyk6IFByb21pc2U8UlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdD4ge1xuICAgIGlmIChGZWF0dXJlRW5hYmxlbWVudC5wcm9taXNlQmFzZWRQQ01ldGhvZHNEaXNhYmxlZCkge1xuICAgICAgLy8gSWdub3JlZCBhcyBsZWdhY3kgY3JlYXRlQW5zd2VyIG1ldGhvZCB3aXRoIGNhbGxiYWNrcyBpcyBkZXByZWNhdGVkXG4gICAgICAvLyBSZXF1aXJlcyBhIHRzLWlnbm9yZSBkaXJlY3RpdmUgdG8gcHJldmVudCB0eXBlc2NyaXB0IGVycm9yc1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHRoaXMuX3BlZXJDb25uZWN0aW9uLmNyZWF0ZUFuc3dlcihyZXNvbHZlLCByZWplY3QsIG9wdGlvbnMpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uY3JlYXRlQW5zd2VyKG9wdGlvbnMpO1xuICB9XG5cbiAgYXN5bmMgc2V0TG9jYWxEZXNjcmlwdGlvbihkZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5zZXRMb2NhbERlc2NyaXB0aW9uKEZlYXR1cmVFbmFibGVtZW50LnByb21pc2VCYXNlZFBDTWV0aG9kc0Rpc2FibGVkID9cbiAgICAgIG5ldyBSVENTZXNzaW9uRGVzY3JpcHRpb24oZGVzY3JpcHRpb24pIDogZGVzY3JpcHRpb24pO1xuICB9XG5cbiAgYXN5bmMgc2V0UmVtb3RlRGVzY3JpcHRpb24oZGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBoYXNDcnlwdG8gPSBkZXNjcmlwdGlvbi5zZHA/Lm1hdGNoKC9hPWNyeXB0bzovaSk7XG5cbiAgICBpZiAoaGFzQ3J5cHRvKSB7XG4gICAgICB0aGlzLl9sb2dnZXIud2FybignU0RQIGE9Y3J5cHRvIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uc2V0UmVtb3RlRGVzY3JpcHRpb24oRmVhdHVyZUVuYWJsZW1lbnQucHJvbWlzZUJhc2VkUENNZXRob2RzRGlzYWJsZWQgP1xuICAgICAgbmV3IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbihkZXNjcmlwdGlvbikgOiBkZXNjcmlwdGlvbik7XG4gIH1cblxuICBnZXRTZW5kZXJzKCk6IFJUQ1J0cFNlbmRlcltdIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uZ2V0U2VuZGVycygpO1xuICB9XG5cbiAgZ2V0UmVjZWl2ZXJzKCk6IFJUQ1J0cFJlY2VpdmVyW10ge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5nZXRSZWNlaXZlcnMoKTtcbiAgfVxuXG4gIGdldFN0YXRzKHNlbGVjdG9yPzogTWVkaWFTdHJlYW1UcmFjayB8IG51bGwpOiBQcm9taXNlPFJUQ1N0YXRzUmVwb3J0PiB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmdldFN0YXRzKHNlbGVjdG9yKTtcbiAgfVxuXG4gIGdldFN0YXRzTGVnYWN5KCk6IFByb21pc2U8SUxlZ2FjeVJUQ1N0YXRzUmVwb3J0PiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgLy8gSWdub3JlZCBkdWUgdG8gdHlwZXNjcmlwdCBub3QgaGF2aW5nIGxlZ2FjeSAnZ2V0U3RhdHMnIG1ldGhvZCB0eXBlIGRlZmluaXRpb25cbiAgICAgIC8vIFRoaXMgd2FzIGEgQ2hyb21lIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIG9mIHRoZSAnZ2V0U3RhdHMnIG1ldGhvZCBmb3JcbiAgICAgIC8vIENocm9tZUA8PSA2NiBkZXRhaWxlZCBoZXJlOiBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD02Mjc4MTZcbiAgICAgIC8vIFJlcXVpcmVzIGEgdHMtaWdub3JlIGRpcmVjdGl2ZSB0byBwcmV2ZW50IHR5cGVzY3JpcHQgZXJyb3JzXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5fcGVlckNvbm5lY3Rpb24uZ2V0U3RhdHMocmVzb2x2ZSk7XG4gICAgfSk7XG4gIH1cblxuICBhZGRFdmVudExpc3RlbmVyKHR5cGU6IFBlZXJDb25uZWN0aW9uRXZlbnRzLCBsaXN0ZW5lcjogRXZlbnRMaXN0ZW5lck9yRXZlbnRMaXN0ZW5lck9iamVjdCwgb3B0aW9ucz86IGJvb2xlYW4gfCBBZGRFdmVudExpc3RlbmVyT3B0aW9ucyk6IHZvaWQge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uLmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgbGlzdGVuZXIsIG9wdGlvbnMpO1xuICB9XG5cbiAgcmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlOiBQZWVyQ29ubmVjdGlvbkV2ZW50cywgbGlzdGVuZXI6IEV2ZW50TGlzdGVuZXJPckV2ZW50TGlzdGVuZXJPYmplY3QsIG9wdGlvbnM/OiBib29sZWFuIHwgRXZlbnRMaXN0ZW5lck9wdGlvbnMpOiB2b2lkIHtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbi5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyLCBvcHRpb25zKTtcbiAgfVxuXG4gIGFkZFRyYW5zY2VpdmVyKG5hbWU6IHN0cmluZywgb3B0aW9uczogUlRDUnRwVHJhbnNjZWl2ZXJJbml0KTogUlRDUnRwVHJhbnNjZWl2ZXIge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5hZGRUcmFuc2NlaXZlcihuYW1lLCBvcHRpb25zKTtcbiAgfVxuXG4gIGFkZFN0cmVhbShtZWRpYVN0cmVhbTogTWVkaWFTdHJlYW0pOiB2b2lkIHtcbiAgICBtZWRpYVN0cmVhbS5nZXRUcmFja3MoKS5mb3JFYWNoKHRyYWNrID0+IHtcbiAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uLmFkZFRyYWNrKHRyYWNrKTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldENvbmZpZ3VyYXRpb24oKTogUlRDQ29uZmlndXJhdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmdldENvbmZpZ3VyYXRpb24oKTtcbiAgfVxuXG4gIHNldENvbmZpZ3VyYXRpb24oY29uZmlndXJhdGlvbjogUlRDQ29uZmlndXJhdGlvbik6IHZvaWQge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uLnNldENvbmZpZ3VyYXRpb24oY29uZmlndXJhdGlvbik7XG4gIH1cblxuICBzZXQgb250cmFjayhoYW5kbGVyOiAoKHRoaXM6IFJUQ1BlZXJDb25uZWN0aW9uLCBldjogUlRDVHJhY2tFdmVudCkgPT4gdW5rbm93bikgfCBudWxsKSB7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24ub250cmFjayA9IGhhbmRsZXI7XG4gIH1cblxuICBnZXQgb250cmFjaygpOiAoKHRoaXM6IFJUQ1BlZXJDb25uZWN0aW9uLCBldjogUlRDVHJhY2tFdmVudCkgPT4gdW5rbm93bikgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24ub250cmFjaztcbiAgfVxuXG4gIHNldCBvbmljZWNhbmRpZGF0ZShoYW5kbGVyOiAoKHRoaXM6IFJUQ1BlZXJDb25uZWN0aW9uLCBldjogUlRDUGVlckNvbm5lY3Rpb25JY2VFdmVudCkgPT4gdW5rbm93bikgfCBudWxsKSB7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24ub25pY2VjYW5kaWRhdGUgPSBoYW5kbGVyO1xuICB9XG5cbiAgZ2V0IG9uaWNlY2FuZGlkYXRlKCk6ICgodGhpczogUlRDUGVlckNvbm5lY3Rpb24sIGV2OiBSVENQZWVyQ29ubmVjdGlvbkljZUV2ZW50KSA9PiB1bmtub3duKSB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5vbmljZWNhbmRpZGF0ZTtcbiAgfVxuXG4gIHNldCBvbmNvbm5lY3Rpb25zdGF0ZWNoYW5nZShoYW5kbGVyOiAoKHRoaXM6IFJUQ1BlZXJDb25uZWN0aW9uLCBldjogUlRDUGVlckNvbm5lY3Rpb25JY2VFdmVudCkgPT4gdW5rbm93bikgfCBudWxsKSB7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24ub25jb25uZWN0aW9uc3RhdGVjaGFuZ2UgPSBoYW5kbGVyO1xuICB9XG5cbiAgZ2V0IG9uY29ubmVjdGlvbnN0YXRlY2hhbmdlKCk6ICgodGhpczogUlRDUGVlckNvbm5lY3Rpb24sIGV2OiBSVENQZWVyQ29ubmVjdGlvbkljZUV2ZW50KSA9PiB1bmtub3duKSB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5vbmNvbm5lY3Rpb25zdGF0ZWNoYW5nZTtcbiAgfVxuXG4gIHNldCBvbmljZWNvbm5lY3Rpb25zdGF0ZWNoYW5nZShoYW5kbGVyOiAoKHRoaXM6IFJUQ1BlZXJDb25uZWN0aW9uLCBldjogRXZlbnQpID0+IHVua25vd24pIHwgbnVsbCkge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uLm9uaWNlY29ubmVjdGlvbnN0YXRlY2hhbmdlID0gaGFuZGxlcjtcbiAgfVxuXG4gIGdldCBvbmljZWNvbm5lY3Rpb25zdGF0ZWNoYW5nZSgpOiAoKHRoaXM6IFJUQ1BlZXJDb25uZWN0aW9uLCBldjogRXZlbnQpID0+IHVua25vd24pIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLm9uaWNlY29ubmVjdGlvbnN0YXRlY2hhbmdlO1xuICB9XG5cbiAgY2xvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24uY2xvc2UoKTtcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24gPSBudWxsO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFZhbmlsbGFQZWVyQ29ubmVjdGlvbjsiLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IElQZWVyQ29ubmVjdGlvbkZhY3RvcnkgZnJvbSAnLi9JUGVlckNvbm5lY3Rpb25GYWN0b3J5JztcbmltcG9ydCBJUGVlckNvbm5lY3Rpb24gZnJvbSAnLi9JUGVlckNvbm5lY3Rpb24nO1xuaW1wb3J0IFZhbmlsbGFQZWVyQ29ubmVjdGlvbiBmcm9tICcuL1ZhbmlsbGFQZWVyQ29ubmVjdGlvbic7XG5cbmNsYXNzIFZhbmlsbGFQZWVyQ29ubmVjdGlvbkZhY3RvcnkgaW1wbGVtZW50cyBJUGVlckNvbm5lY3Rpb25GYWN0b3J5IHtcbiAgYXN5bmMgY3JlYXRlUGVlckNvbm5lY3Rpb24oY29uZmlndXJhdGlvbj86IFJUQ0NvbmZpZ3VyYXRpb24pOiBQcm9taXNlPElQZWVyQ29ubmVjdGlvbj4ge1xuICAgIHJldHVybiBuZXcgVmFuaWxsYVBlZXJDb25uZWN0aW9uKGNvbmZpZ3VyYXRpb24pO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFZhbmlsbGFQZWVyQ29ubmVjdGlvbkZhY3Rvcnk7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBTdWJqZWN0IGZyb20gJy4vU3ViamVjdCc7XG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlYWRPbmx5U3ViamVjdDxUPiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N1YmplY3Q6IFN1YmplY3Q8VD47XG5cbiAgY29uc3RydWN0b3Ioc3ViamVjdDogU3ViamVjdDxUPikge1xuICAgIHRoaXMuX3N1YmplY3QgPSBzdWJqZWN0O1xuICB9XG5cbiAgZ2V0IHZhbHVlKCk6IFQge1xuICAgIHJldHVybiB0aGlzLl9zdWJqZWN0LnZhbHVlO1xuICB9XG5cbiAgc3Vic2NyaWJlKGxpc3RlbmVyOiAoVCkgPT4gdm9pZCk6IElEaXNwb3NhYmxlIHtcbiAgICByZXR1cm4gdGhpcy5fc3ViamVjdC5zdWJzY3JpYmUobGlzdGVuZXIpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0lEaXNwb3NhYmxlJztcbmltcG9ydCBEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvRGlzcG9zYWJsZSc7XG5pbXBvcnQgSUNvbXBhcmFibGUgZnJvbSAnLi4vbGFuZy9JQ29tcGFyYWJsZSc7XG5cbmNsYXNzIERpc3Bvc2FibGVMaXN0ZW5lcjxUPiBleHRlbmRzIERpc3Bvc2FibGUge1xuICBjb25zdHJ1Y3RvcihsaXN0ZW5lcnM6IEFycmF5PFQ+LCBsaXN0ZW5lcjogVCkge1xuICAgIHN1cGVyKCgpID0+IHtcbiAgICAgIGNvbnN0IGlkeCA9IGxpc3RlbmVycy5pbmRleE9mKGxpc3RlbmVyKTtcblxuICAgICAgaWYgKGlkeCA+PSAwKSB7XG4gICAgICAgIGxpc3RlbmVycy5zcGxpY2UoaWR4LCAxKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdWJqZWN0PFQ+IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbGlzdGVuZXJzOiBBcnJheTwoVCkgPT4gdm9pZD47XG4gIHByaXZhdGUgX3ZhbHVlOiBUO1xuXG4gIGNvbnN0cnVjdG9yKHZhbHVlOiBUKSB7XG4gICAgdGhpcy5fbGlzdGVuZXJzID0gW107XG4gICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcbiAgfVxuXG4gIHNldCB2YWx1ZSh2YWx1ZTogVCkge1xuICAgIGxldCBjaGFuZ2VkID0gdGhpcy5fdmFsdWUgIT09IHZhbHVlO1xuXG4gICAgaWYgKGNoYW5nZWQgJiYgdmFsdWUpIHtcbiAgICAgIGNvbnN0IGNvbXBhcmFibGUgPSB2YWx1ZSBhcyB1bmtub3duIGFzIElDb21wYXJhYmxlPFQ+O1xuXG4gICAgICBpZiAodHlwZW9mIGNvbXBhcmFibGUuZXF1YWxzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGNoYW5nZWQgPSAhY29tcGFyYWJsZS5lcXVhbHModGhpcy5fdmFsdWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghY2hhbmdlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG5cbiAgICB0aGlzLl9saXN0ZW5lcnMuZm9yRWFjaChsaXN0ZW5lciA9PiB7XG4gICAgICBsaXN0ZW5lcih2YWx1ZSk7XG4gICAgfSk7XG4gIH1cblxuICBnZXQgdmFsdWUoKTogVCB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICB9XG5cbiAgc3Vic2NyaWJlKGxpc3RlbmVyOiAoVCkgPT4gdm9pZCk6IElEaXNwb3NhYmxlIHtcbiAgICB0aGlzLl9saXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG5cbiAgICBsaXN0ZW5lcih0aGlzLl92YWx1ZSk7XG5cbiAgICByZXR1cm4gbmV3IERpc3Bvc2FibGVMaXN0ZW5lcjwoVCkgPT4gdm9pZD4odGhpcy5fbGlzdGVuZXJzLCBsaXN0ZW5lcik7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW52aXJvbm1lbnQge1xuICBzdGF0aWMgZ2V0RW52aXJvbm1lbnRGcm9tVXJsKHVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYmFzZVVSTCA9IG5ldyBVUkwodXJsKTtcblxuICAgICAgcmV0dXJuIGJhc2VVUkwub3JpZ2luO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCBTdHJpbmdzIGZyb20gJy4uL2xhbmcvU3RyaW5ncyc7XG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi9yeC9TdWJqZWN0JztcbmltcG9ydCBSZWFkT25seVN1YmplY3QgZnJvbSAnLi4vcngvUmVhZE9ubHlTdWJqZWN0JztcbmltcG9ydCBFZGdlQXV0aFBhcnNlciBmcm9tICcuLi9lZGdlQXV0aC9FZGdlQXV0aFBhcnNlcic7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IHtMb2dnaW5nTGV2ZWwsIExvZ2dpbmdMZXZlbFR5cGV9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXInO1xuaW1wb3J0IENvbnNvbGVBcHBlbmRlciBmcm9tICcuLi9sb2dnZXIvQ29uc29sZUFwcGVuZGVyJztcbmltcG9ydCBUZWxlbWV0cnlBcHBlbmRlciBmcm9tICcuLi90ZWxlbWV0cnkvVGVsZW1ldHJ5QXBlbmRlcic7XG5pbXBvcnQgQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlciBmcm9tICcuLi9kb20vQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlcic7XG5pbXBvcnQgTWV0cmljc0NvbmZpZ3VyYXRpb24sIHtUZWxlbWV0cnlMZXZlbCwgVGVsZW1ldHJ5TGV2ZWxUeXBlfSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NDb25maWd1cmF0aW9uJztcbmltcG9ydCBNZXRyaWNzU2VydmljZSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NTZXJ2aWNlJztcbmltcG9ydCBUZWxlbWV0cnlMZXZlbE1hcHBpbmcgZnJvbSAnLi4vbWV0cmljcy9UZWxlbWV0cmljTGV2ZWxNYXBwaW5nJztcbmltcG9ydCBMb2dnaW5nTGV2ZWxNYXBwaW5nIGZyb20gJy4uL2xvZ2dlci9Mb2dnaW5nTGV2ZWxNYXBwaW5nJztcbmltcG9ydCBCdWlsZEZlYXR1cmVzIGZyb20gJy4uL2Vudmlyb25tZW50L0J1aWxkRmVhdHVyZXMnO1xuaW1wb3J0IEJyb3dzZXJEZXRlY3RvciBmcm9tICcuLi9kb20vQnJvd3NlckRldGVjdG9yJztcbmltcG9ydCB7SUNvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXJ9IGZyb20gJy4uL2RvbS9JQ29uZmlndXJhdGlvblBhcmFtYXRlclJlYWRlcic7XG5pbXBvcnQgQXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IgZnJvbSAnLi4vZG9tL0FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yJztcbmltcG9ydCBJUGVlckNvbm5lY3Rpb25GYWN0b3J5IGZyb20gJy4uL3J0Yy9JUGVlckNvbm5lY3Rpb25GYWN0b3J5JztcbmltcG9ydCBQZWVyQ29ubmVjdGlvblNlcnZpY2UgZnJvbSAnLi4vcnRjL1BlZXJDb25uZWN0aW9uU2VydmljZSc7XG5pbXBvcnQgVGVsZW1ldHJ5VXJsIGZyb20gJy4vVGVsZW1ldHJ5VXJsJztcbmltcG9ydCBFbnZpcm9ubWVudCBmcm9tICcuL0Vudmlyb25tZW50JztcbmltcG9ydCB7SGxzUGxheWVyVHlwZSwgU2hha2FUeXBlLCBXZWJQbGF5ZXJUeXBlfSBmcm9tICcuL3N0cmVhbWluZy9TdHJlYW1UeXBlcyc7XG5pbXBvcnQgRGlzY292ZXJ5VXJpIGZyb20gJy4vZGlzY292ZXJ5L0Rpc2NvdmVyeVVyaSc7XG5pbXBvcnQgTWV0cmljc0ZhY3RvcnkgZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzRmFjdG9yeSc7XG5pbXBvcnQgVGVsZW1ldHJ5RGVmYXVsdCBmcm9tICcuLi9tZXRyaWNzL1RlbGVtZXRyeURlZmF1bHQnO1xuXG5jb25zdCBwYWdlTG9hZFRpbWUgPSB3aW5kb3dbJ19fcGhlbml4UGFnZUxvYWRUaW1lJ10gfHwgd2luZG93WydfX3BhZ2VMb2FkVGltZSddIHx8IERhdGUubm93KCk7XG5cbmludGVyZmFjZSBJSW5pdE9wdGlvbnMge1xuICBkaXNjb3ZlcnlVcmk/OiBzdHJpbmc7XG4gIHBlZXJDb25uZWN0aW9uRmFjdG9yeT86IElQZWVyQ29ubmVjdGlvbkZhY3Rvcnk7XG4gIHRlbGVtZXRyeUxldmVsPzogVGVsZW1ldHJ5TGV2ZWxUeXBlO1xuICBsb2dnaW5nTGV2ZWw/OiBMb2dnaW5nTGV2ZWxUeXBlO1xuICBjb25zb2xlTG9nZ2luZ0xldmVsPzogTG9nZ2luZ0xldmVsVHlwZTtcbiAgYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbT86IGJvb2xlYW47XG4gIGF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlPzogYm9vbGVhbjtcbiAgd2ViUGxheWVyTG9hZGVyPzogKHBsYXllcjogV2ViUGxheWVyVHlwZSkgPT4gdm9pZDtcbiAgc2hha2FQbGF5ZXJMb2FkZXI/OiAocGxheWVyOiBTaGFrYVR5cGUpID0+IHZvaWQ7XG4gIGhsc0pzTG9hZGVyPzogKHBsYXllcjogSGxzUGxheWVyVHlwZSkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU0RLIHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2F1dG9tYXRpY2FsbHlSZXRyeU9uRmFpbHVyZSA9IHRydWU7XG4gIHByaXZhdGUgc3RhdGljIF9hdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb24gPSB0cnVlO1xuICBwcml2YXRlIHN0YXRpYyBfYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbSA9IHRydWU7XG4gIHByaXZhdGUgc3RhdGljIF9hdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZSA9IHRydWU7XG4gIHByaXZhdGUgc3RhdGljIF9mb3JjZUdhcmJhZ2VDb2xsZWN0aW9uT25SZXN0YXJ0ID0gdHJ1ZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX3NraXBHYXJiYWdlQ29sbGVjdGlvbk9uTW9iaWxlRGV2aWNlcyA9IHRydWU7XG4gIHByaXZhdGUgc3RhdGljIF93ZWJQbGF5ZXJMb2FkZXIgPSBudWxsO1xuICBwcml2YXRlIHN0YXRpYyBfc2hha2FQbGF5ZXJMb2FkZXIgPSBudWxsO1xuICBwcml2YXRlIHN0YXRpYyBfaGxzSnNMb2FkZXIgPSBudWxsO1xuICBwcml2YXRlIHN0YXRpYyBfY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlcjogSUNvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIgPSBuZXcgQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlcigpO1xuICBwcml2YXRlIHN0YXRpYyBfYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3I6IEFwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yO1xuICBwcml2YXRlIHN0YXRpYyBfZW52aXJvbm1lbnQ6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBTdWJqZWN0PHN0cmluZz4oJycpO1xuICBwcml2YXRlIHN0YXRpYyBfdGVsZW1ldHJ5VXJsOiBTdWJqZWN0PHN0cmluZz4gPSBuZXcgU3ViamVjdDxzdHJpbmc+KCdodHRwczovL3RlbGVtZXRyeS5waGVuaXhydHMuY29tL3RlbGVtZXRyeScpO1xuICBwcml2YXRlIHN0YXRpYyBfbWF4aW1hbE51bWJlck9mUGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyA9IDg7XG4gIHByaXZhdGUgc3RhdGljIF90ZWxlbWV0cnlMZXZlbDogU3ViamVjdDxUZWxlbWV0cnlMZXZlbD4gPSBuZXcgU3ViamVjdDxUZWxlbWV0cnlMZXZlbD4oVGVsZW1ldHJ5RGVmYXVsdC5kZWZhdWx0VGVsZW1ldHJ5TGV2ZWwpO1xuICBwcml2YXRlIHN0YXRpYyBfbWV0cmljc1NlcnZpY2U6IE1ldHJpY3NTZXJ2aWNlO1xuICBwcml2YXRlIHN0YXRpYyBfbWV0cmljc0NvbmZpZ3VyYXRpb246IE1ldHJpY3NDb25maWd1cmF0aW9uO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfc2VuZExvY2FsQ2FuZGlkYXRlczogU3ViamVjdDxib29sZWFuPiA9IG5ldyBTdWJqZWN0KEJ1aWxkRmVhdHVyZXMuc2VuZExvY2FsQ2FuZGlkYXRlcyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF90ZW5hbmN5OiBTdWJqZWN0PHN0cmluZz4gPSBuZXcgU3ViamVjdDxzdHJpbmc+KCcnKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2NsaWVudFNlc3Npb25JZDogc3RyaW5nID0gU3RyaW5ncy5yYW5kb20oMzIpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfbG9hZGVkVGltZXN0YW1wOiBEYXRlID0gbmV3IERhdGUoKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdTREsnKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2luaXRpYWxpemVkOiBTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfcmVhZE9ubHlJbml0aWFsaXplZDogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPihTREsuX2luaXRpYWxpemVkKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX3JlYWRPbmx5RGlzY292ZXJ5VXJpOiBSZWFkT25seVN1YmplY3Q8c3RyaW5nPiA9IG5ldyBSZWFkT25seVN1YmplY3Q8c3RyaW5nPihEaXNjb3ZlcnlVcmkudXJpKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX3JlYWRPbmx5UGVlckNvbm5lY3Rpb25GYWN0b3J5OiBSZWFkT25seVN1YmplY3Q8SVBlZXJDb25uZWN0aW9uRmFjdG9yeT4gPSBuZXcgUmVhZE9ubHlTdWJqZWN0PElQZWVyQ29ubmVjdGlvbkZhY3Rvcnk+KFBlZXJDb25uZWN0aW9uU2VydmljZS5wZWVyQ29ubmVjdGlvbkZhY3RvcnkpO1xuXG4gIHN0YXRpYyBnZXQgcGFnZUxvYWRUaW1lKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHBhZ2VMb2FkVGltZTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgc2VuZExvY2FsQ2FuZGlkYXRlcygpOiBTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fc2VuZExvY2FsQ2FuZGlkYXRlcztcbiAgfVxuXG4gIHN0YXRpYyBnZXQgdGVuYW5jeSgpOiBTdWJqZWN0PHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLl90ZW5hbmN5O1xuICB9XG5cbiAgc3RhdGljIGdldCBjbGllbnRTZXNzaW9uSWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gU0RLLl9jbGllbnRTZXNzaW9uSWQ7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGxvYWRlZFRpbWVzdGFtcCgpOiBEYXRlIHtcbiAgICByZXR1cm4gU0RLLl9sb2FkZWRUaW1lc3RhbXA7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGluaXRpYWxpemVkKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIFNESy5fcmVhZE9ubHlJbml0aWFsaXplZDtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgZGlzY292ZXJ5VXJpKCk6IFJlYWRPbmx5U3ViamVjdDxzdHJpbmc+IHtcbiAgICByZXR1cm4gU0RLLl9yZWFkT25seURpc2NvdmVyeVVyaTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgcGVlckNvbm5lY3Rpb25GYWN0b3J5KCk6IFJlYWRPbmx5U3ViamVjdDxJUGVlckNvbm5lY3Rpb25GYWN0b3J5PiB7XG4gICAgcmV0dXJuIFNESy5fcmVhZE9ubHlQZWVyQ29ubmVjdGlvbkZhY3Rvcnk7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGF1dG9tYXRpY1JldHJ5T25GYWlsdXJlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBTREsuX2F1dG9tYXRpY2FsbHlSZXRyeU9uRmFpbHVyZTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBTREsuX2F1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gU0RLLl9hdXRvbWF0aWNhbGx5UGxheU1lZGlhU3RyZWFtO1xuICB9XG5cbiAgc3RhdGljIGdldCBhdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gU0RLLl9hdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgZm9yY2VHYXJiYWdlQ29sbGVjdGlvbk9uUmVzdGFydCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZm9yY2VHYXJiYWdlQ29sbGVjdGlvbk9uUmVzdGFydDtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgc2tpcEdhcmJhZ2VDb2xsZWN0aW9uT25Nb2JpbGVEZXZpY2VzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9za2lwR2FyYmFnZUNvbGxlY3Rpb25Pbk1vYmlsZURldmljZXM7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHdlYlBsYXllckxvYWRlcigpOiAoV2ViUGxheWVyVHlwZSkgPT4gdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMuX3dlYlBsYXllckxvYWRlcjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgc2hha2FQbGF5ZXJMb2FkZXIoKTogKFNoYWthVHlwZSkgPT4gdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMuX3NoYWthUGxheWVyTG9hZGVyO1xuICB9XG5cbiAgc3RhdGljIGdldCBobHNKc0xvYWRlcigpOiAoSGxzUGxheWVyVHlwZSkgPT4gdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMuX2hsc0pzTG9hZGVyO1xuICB9XG5cbiAgc3RhdGljIGdldCBtZXRyaWNzU2VydmljZSgpOiBNZXRyaWNzU2VydmljZSB7XG4gICAgcmV0dXJuIFNESy5fbWV0cmljc1NlcnZpY2U7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGFwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yKCk6IEFwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yIHtcbiAgICByZXR1cm4gdGhpcy5fYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3I7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHRlbGVtZXRyeVVybCgpOiBTdWJqZWN0PHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLl90ZWxlbWV0cnlVcmw7XG4gIH1cblxuICBzdGF0aWMgZ2V0IG1heGltYWxOdW1iZXJPZlBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fbWF4aW1hbE51bWJlck9mUGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cztcbiAgfVxuXG4gIHN0YXRpYyBzZXQgbWF4aW1hbE51bWJlck9mUGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyhyZXRyaWVzQW1vdW50OiBudW1iZXIpIHtcbiAgICB0aGlzLl9tYXhpbWFsTnVtYmVyT2ZQZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzID0gcmV0cmllc0Ftb3VudDtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgbG9nZ2luZ0xldmVsKCk6IExvZ2dpbmdMZXZlbFR5cGUge1xuICAgIHJldHVybiBMb2dnaW5nTGV2ZWxNYXBwaW5nLmNvbnZlcnRMb2dnaW5nTGV2ZWxUb0xvZ2dpbmdMZXZlbFR5cGUodGhpcy5fbG9nZ2VyLnRocmVzaG9sZC52YWx1ZSk7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHRlbGVtZXRyeUxldmVsKCk6IFRlbGVtZXRyeUxldmVsVHlwZSB7XG4gICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsTWFwcGluZy5jb252ZXJ0VGVsZW1ldHJ5TGV2ZWxUb1RlbGVtZXRyeUxldmVsVHlwZShTREsuX3RlbGVtZXRyeUxldmVsLnZhbHVlKTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYnJvd3NlckRldGVjdG9yKCk6IEJyb3dzZXJEZXRlY3RvciB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3RvcjtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseVRlbGVtZXRyeUNvbmZpZ3VyYXRpb24oKTogdm9pZCB7XG4gICAgY29uc3QgdGVsZW1ldHJ5Q29uZmlndXJhdGlvbiA9IExvZ2dlckZhY3RvcnkudGVsZW1ldHJ5Q29uZmlndXJhdGlvbjtcblxuICAgIHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24uc2Vzc2lvbklkID0gU0RLLmNsaWVudFNlc3Npb25JZDtcbiAgICB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLnBhZ2VMb2FkVGltZSA9IFNESy5wYWdlTG9hZFRpbWU7XG5cbiAgICBjb25zdCBpZ25vcmVkRW52aXJvbm1lbnQgPSBTREsuX2Vudmlyb25tZW50LnN1YnNjcmliZShlbnZpcm9ubWVudCA9PiB7XG4gICAgICB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLmVudmlyb25tZW50ID0gZW52aXJvbm1lbnQ7XG4gICAgfSk7XG4gICAgY29uc3QgaWdub3JlZERpc2NvdmVyeVVyaSA9IFNESy50ZWxlbWV0cnlVcmwuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgIGNvbnN0IHRlbGVtZXRyeUFwcGVuZGVyID0gdGhpcy5fbG9nZ2VyLmFwcGVuZGVycy52YWx1ZS5maW5kKGFwcGVuZGVyID0+IGFwcGVuZGVyIGluc3RhbmNlb2YgVGVsZW1ldHJ5QXBwZW5kZXIpO1xuXG4gICAgICBpZiAodGVsZW1ldHJ5QXBwZW5kZXIpIHtcbiAgICAgICAgdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi51cmwgPSB2YWx1ZTtcblxuICAgICAgICB0aGlzLl9sb2dnZXIuYXBwZW5kZXJzLnJlbW92ZSh0ZWxlbWV0cnlBcHBlbmRlcik7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMuYWRkKG5ldyBUZWxlbWV0cnlBcHBlbmRlcih0ZWxlbWV0cnlDb25maWd1cmF0aW9uKSk7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdUZWxlbWV0cnkgVVJMIHdhcyBzZXQgdG8gWyVzXScsIHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24udXJsKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBpZ25vcmVkVGVuYW5jeSA9IFNESy5fdGVuYW5jeS5zdWJzY3JpYmUodGVuYW5jeSA9PiB7XG4gICAgICBjb25zdCB0ZWxlbWV0cnlBcHBlbmRlciA9IHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMudmFsdWUuZmluZChhcHBlbmRlciA9PiBhcHBlbmRlciBpbnN0YW5jZW9mIFRlbGVtZXRyeUFwcGVuZGVyKTtcblxuICAgICAgaWYgKHRlbGVtZXRyeUFwcGVuZGVyICYmIHRlbmFuY3kpIHtcbiAgICAgICAgdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi50ZW5hbmN5ID0gdGVuYW5jeTtcblxuICAgICAgICB0aGlzLl9sb2dnZXIuYXBwZW5kZXJzLnJlbW92ZSh0ZWxlbWV0cnlBcHBlbmRlcik7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMuYWRkKG5ldyBUZWxlbWV0cnlBcHBlbmRlcih0ZWxlbWV0cnlDb25maWd1cmF0aW9uKSk7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdUZWxlbWV0cnkgdGVuYW5jeSB3YXMgc2V0IHRvIFslc10nLCB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLnRlbmFuY3kpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5TWV0cmljc0NvbmZpZ3VyYXRpb24oKTogdm9pZCB7XG4gICAgU0RLLl9tZXRyaWNzU2VydmljZSA9IE1ldHJpY3NGYWN0b3J5LmdldE1ldHJpY3NTZXJ2aWNlKERpc2NvdmVyeVVyaS51cmkudmFsdWUpO1xuICAgIFNESy5fbWV0cmljc0NvbmZpZ3VyYXRpb24gPSBTREsuX21ldHJpY3NTZXJ2aWNlLm1ldHJpY3NDb25maWd1cmF0aW9uO1xuXG4gICAgU0RLLl9tZXRyaWNzQ29uZmlndXJhdGlvbi5zZXNzaW9uSWQgPSBTREsuY2xpZW50U2Vzc2lvbklkO1xuXG4gICAgY29uc3QgaWdub3JlZEVudmlyb25tZW50ID0gU0RLLl9lbnZpcm9ubWVudC5zdWJzY3JpYmUoZW52aXJvbm1lbnQgPT4ge1xuICAgICAgU0RLLl9tZXRyaWNzQ29uZmlndXJhdGlvbi5lbnZpcm9ubWVudCA9IGVudmlyb25tZW50O1xuICAgIH0pO1xuICAgIGNvbnN0IGlnbm9yZWREaXNjb3ZlcnlVcmkgPSBTREsudGVsZW1ldHJ5VXJsLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICBTREsuX21ldHJpY3NDb25maWd1cmF0aW9uLnVybCA9IHZhbHVlO1xuICAgIH0pO1xuICAgIGNvbnN0IGlnbm9yZWRUZW5hbmN5ID0gU0RLLl90ZW5hbmN5LnN1YnNjcmliZSh0ZW5hbmN5ID0+IHtcbiAgICAgIFNESy5fbWV0cmljc0NvbmZpZ3VyYXRpb24udGVuYW5jeSA9IHRlbmFuY3k7XG4gICAgfSk7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldFN0cmluZ1ZhbHVlKCdwaGVuaXgtbWV0cmljcy1sZXZlbCcpO1xuXG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICBNZXRyaWNzRmFjdG9yeS5zZXRUZWxlbWV0cnlMZXZlbChUZWxlbWV0cnlMZXZlbFt2YWx1ZV0pO1xuICAgIH1cblxuICAgIGNvbnN0IGlnbm9yZWRUZWxlbWV0cnlMZXZlbCA9IFNESy5fdGVsZW1ldHJ5TGV2ZWwuc3Vic2NyaWJlKHRlbGVtZXRyeUxldmVsID0+IHtcbiAgICAgIE1ldHJpY3NGYWN0b3J5LnNldFRlbGVtZXRyeUxldmVsKHRlbGVtZXRyeUxldmVsKTtcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseUF1dG9tYXRpY2FsbHlSZXRyeU9uRmFpbHVyZUZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMuX2F1dG9tYXRpY2FsbHlSZXRyeU9uRmFpbHVyZSA9IHRoaXMuX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0Qm9vbGVhblZhbHVlKCdwaGVuaXgtYXV0b21hdGljYWxseS1yZXRyeS1vbi1mYWlsdXJlJyk7XG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0F1dG9tYXRpY2FsbHkgcmV0cnkgb24gZmFpbHVyZSBpcyBzZXQgdG86IFslc10nLCB0aGlzLl9hdXRvbWF0aWNhbGx5UmV0cnlPbkZhaWx1cmUpO1xuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5QXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5fYXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uID0gdGhpcy5fY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRCb29sZWFuVmFsdWUoJ3BoZW5peC1hdXRvbWF0aWNhbGx5LXJlY29ubmVjdC1wZWVyLWNvbm5lY3Rpb24nKTtcbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnQXV0b21hdGljYWxseSByZWNvbm5lY3QgcGVlciBjb25uZWN0aW9uIGlzIHNldCB0bzogWyVzXScsIHRoaXMuX2F1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbik7XG5cbiAgICByZXR1cm47XG4gIH1cblxuICBzdGF0aWMgYXBwbHlGb3JjZUdhcmJhZ2VDb2xsZWN0aW9uT25SZXN0YXJ0RnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5fZm9yY2VHYXJiYWdlQ29sbGVjdGlvbk9uUmVzdGFydCA9IHRoaXMuX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0Qm9vbGVhblZhbHVlKCdwaGVuaXgtZm9yY2UtZ2FyYmFnZS1jb2xsZWN0aW9uLW9uLXJlc3RhcnQnKTtcbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnRm9yY2UgZ2FyYmFnZSBjb2xsZWN0aW9uIG9uIHJlc3RhcnQgaXMgc2V0IHRvOiBbJXNdJywgdGhpcy5fZm9yY2VHYXJiYWdlQ29sbGVjdGlvbk9uUmVzdGFydCk7XG5cbiAgICByZXR1cm47XG4gIH1cblxuICBzdGF0aWMgYXBwbHlTa2lwR2FyYmFnZUNvbGxlY3Rpb25Pbk1vYmlsZURldmljZXNGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLl9za2lwR2FyYmFnZUNvbGxlY3Rpb25Pbk1vYmlsZURldmljZXMgPSB0aGlzLl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldEJvb2xlYW5WYWx1ZSgncGhlbml4LXNraXAtZ2FyYmFnZS1jb2xsZWN0aW9uLW9uLW1vYmlsZS1kZXZpY2VzJyk7XG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1NraXAgZ2FyYmFnZSBjb2xsZWN0aW9uIG9uIG1vYmlsZSBkZXZpY2VzIG9uIHJlc3RhcnQgaXMgc2V0IHRvOiBbJXNdJywgdGhpcy5fc2tpcEdhcmJhZ2VDb2xsZWN0aW9uT25Nb2JpbGVEZXZpY2VzKTtcblxuICAgIHJldHVybjtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseURpc2NvdmVyeVVyaURlZmF1bHRGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpOiB2b2lkIHtcbiAgICBTREsuZGlzY292ZXJ5VXJpLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICBTREsudGVsZW1ldHJ5VXJsLnZhbHVlID0gU0RLLmdldFRlbGVtZXRyeVVybCh2YWx1ZSk7XG4gICAgICBTREsuX2Vudmlyb25tZW50LnZhbHVlID0gRW52aXJvbm1lbnQuZ2V0RW52aXJvbm1lbnRGcm9tVXJsKHZhbHVlKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGNoYW5uZWxUb2tlbiA9IHRoaXMuX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0U3RyaW5nVmFsdWUoJ3BoZW5peC1jaGFubmVsLXRva2VuJyk7XG5cbiAgICBpZiAoY2hhbm5lbFRva2VuKSB7XG4gICAgICBjb25zdCBlZGdlVG9rZW4gPSBFZGdlQXV0aFBhcnNlci5wYXJzZVRva2VuKGNoYW5uZWxUb2tlbik7XG5cbiAgICAgIFNESy5fdGVuYW5jeS52YWx1ZSA9IGVkZ2VUb2tlbi50ZW5hbmN5O1xuICAgICAgRGlzY292ZXJ5VXJpLnVyaS52YWx1ZSA9IChlZGdlVG9rZW4udXJpIHx8IFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpLnRvU3RyaW5nKCk7XG5cbiAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdEaXNjb3ZlcnkgVVJJIHNldCBmcm9tIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIHRvIFslc10nLCBTREsuZGlzY292ZXJ5VXJpLnZhbHVlKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHVyaVZhbHVlID0gdGhpcy5fY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRTdHJpbmdWYWx1ZSgncGhlbml4LXVyaScpO1xuXG4gICAgaWYgKHVyaVZhbHVlKSB7XG4gICAgICBEaXNjb3ZlcnlVcmkudXJpLnZhbHVlID0gdXJpVmFsdWU7XG4gICAgICB0aGlzLl9sb2dnZXIuaW5mbygnRGlzY292ZXJ5IFVSSSBzZXQgZnJvbSBcInBoZW5peC11cmlcIiBjb25maWd1cmF0aW9uIHBhcmFtZXRlciB0YWcgdG8gWyVzXScsIFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYmFzZVVSSVZhbHVlID0gdGhpcy5fY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRTdHJpbmdWYWx1ZSgncGhlbml4LWJhc2UtdXJpJyk7XG5cbiAgICBpZiAoYmFzZVVSSVZhbHVlKSB7XG4gICAgICBjb25zdCB1cmkgPSBuZXcgVVJMKGJhc2VVUklWYWx1ZSk7XG5cbiAgICAgIHVyaS5wYXRobmFtZSA9ICcvcGNhc3QvZW5kUG9pbnRzJztcbiAgICAgIERpc2NvdmVyeVVyaS51cmkudmFsdWUgPSB1cmkudG9TdHJpbmcoKTtcbiAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdEaXNjb3ZlcnkgVVJJIHNldCBmcm9tIFwicGhlbml4LWJhc2UtdXJpXCIgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIgdGFnIHRvIFslc10nLCBTREsuZGlzY292ZXJ5VXJpLnZhbHVlKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBpbml0KG9wdGlvbnM/OiBJSW5pdE9wdGlvbnMpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX2luaXRpYWxpemVkLnZhbHVlKSB7XG4gICAgICB0aGlzLl9hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvciA9IG5ldyBBcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvcigpO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zKSB7XG4gICAgICBpZiAob3B0aW9ucy5kaXNjb3ZlcnlVcmkpIHtcbiAgICAgICAgRGlzY292ZXJ5VXJpLnVyaS52YWx1ZSA9IG9wdGlvbnMuZGlzY292ZXJ5VXJpO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5wZWVyQ29ubmVjdGlvbkZhY3RvcnkpIHtcbiAgICAgICAgUGVlckNvbm5lY3Rpb25TZXJ2aWNlLnBlZXJDb25uZWN0aW9uRmFjdG9yeS52YWx1ZSA9IG9wdGlvbnMucGVlckNvbm5lY3Rpb25GYWN0b3J5O1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy50ZWxlbWV0cnlMZXZlbCAmJiBUZWxlbWV0cnlMZXZlbFtvcHRpb25zLnRlbGVtZXRyeUxldmVsXSkge1xuICAgICAgICBTREsuX3RlbGVtZXRyeUxldmVsLnZhbHVlID0gVGVsZW1ldHJ5TGV2ZWxNYXBwaW5nLmNvbnZlcnRUZWxlbWV0cnlMZXZlbFR5cGVUb1RlbGVtZXRyeUxldmVsKG9wdGlvbnMudGVsZW1ldHJ5TGV2ZWwpO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5sb2dnaW5nTGV2ZWwgJiYgTG9nZ2luZ0xldmVsW29wdGlvbnMubG9nZ2luZ0xldmVsXSkge1xuICAgICAgICB0aGlzLl9sb2dnZXIudGhyZXNob2xkLnNldFRocmVzaG9sZChMb2dnaW5nTGV2ZWxNYXBwaW5nLmNvbnZlcnRMb2dnaW5nTGV2ZWxUeXBlVG9Mb2dnaW5nTGV2ZWwob3B0aW9ucy5sb2dnaW5nTGV2ZWwpKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMuY29uc29sZUxvZ2dpbmdMZXZlbCAmJlxuICAgICAgICBMb2dnaW5nTGV2ZWxbb3B0aW9ucy5jb25zb2xlTG9nZ2luZ0xldmVsXSkge1xuICAgICAgICBjb25zdCBjb25zb2xlQXBwZW5kZXIgPSB0aGlzLl9sb2dnZXIuYXBwZW5kZXJzLnZhbHVlLmZpbmQoYXBwZW5kZXIgPT4gYXBwZW5kZXIgaW5zdGFuY2VvZiBDb25zb2xlQXBwZW5kZXIpO1xuXG4gICAgICAgIGlmIChjb25zb2xlQXBwZW5kZXIpIHtcbiAgICAgICAgICB0aGlzLl9sb2dnZXIuYXBwZW5kZXJzLnJlbW92ZShjb25zb2xlQXBwZW5kZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbnMuY29uc29sZUxvZ2dpbmdMZXZlbCAhPT0gJ09mZicpIHtcbiAgICAgICAgICB0aGlzLl9sb2dnZXIuYXBwZW5kZXJzLmFkZChuZXcgQ29uc29sZUFwcGVuZGVyKExvZ2dpbmdMZXZlbE1hcHBpbmcuY29udmVydExvZ2dpbmdMZXZlbFR5cGVUb0xvZ2dpbmdMZXZlbChvcHRpb25zLmNvbnNvbGVMb2dnaW5nTGV2ZWwpKSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmF1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW0gPT09ICdib29sZWFuJykge1xuICAgICAgICB0aGlzLl9hdXRvbWF0aWNhbGx5UGxheU1lZGlhU3RyZWFtID0gb3B0aW9ucy5hdXRvbWF0aWNhbGx5UGxheU1lZGlhU3RyZWFtO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIG9wdGlvbnMuYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmUgPT09ICdib29sZWFuJykge1xuICAgICAgICB0aGlzLl9hdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZSA9IG9wdGlvbnMuYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmU7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLndlYlBsYXllckxvYWRlcikge1xuICAgICAgICB0aGlzLl93ZWJQbGF5ZXJMb2FkZXIgPSBvcHRpb25zLndlYlBsYXllckxvYWRlcjtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMuc2hha2FQbGF5ZXJMb2FkZXIpIHtcbiAgICAgICAgdGhpcy5fc2hha2FQbGF5ZXJMb2FkZXIgPSBvcHRpb25zLnNoYWthUGxheWVyTG9hZGVyO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5obHNKc0xvYWRlcikge1xuICAgICAgICB0aGlzLl9obHNKc0xvYWRlciA9IG9wdGlvbnMuaGxzSnNMb2FkZXI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgU0RLLl9pbml0aWFsaXplZC52YWx1ZSA9IHRydWU7XG4gIH1cblxuICBzdGF0aWMgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICBTREsuX2luaXRpYWxpemVkLnZhbHVlID0gZmFsc2U7XG4gICAgdGhpcy5fYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IuZGlzcG9zZSgpO1xuICAgIHRoaXMuX2FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yID0gbnVsbDtcbiAgfVxuXG4gIHN0YXRpYyBnZXRUZWxlbWV0cnlVcmwodXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBUZWxlbWV0cnlVcmwuZ2V0VGVsZW1ldHJ5VXJsKHVybCk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignU0RLIGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufVxuXG53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigndW5sb2FkJywgKCkgPT4ge1xuICBTREsuZGlzcG9zZSgpO1xufSk7XG5cblNESy5hcHBseURpc2NvdmVyeVVyaURlZmF1bHRGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpO1xuU0RLLmFwcGx5TWV0cmljc0NvbmZpZ3VyYXRpb24oKTtcblNESy5hcHBseVRlbGVtZXRyeUNvbmZpZ3VyYXRpb24oKTtcblNESy5hcHBseUF1dG9tYXRpY2FsbHlSZXRyeU9uRmFpbHVyZUZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk7XG5TREsuYXBwbHlBdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb25Gcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpO1xuU0RLLmFwcGx5Rm9yY2VHYXJiYWdlQ29sbGVjdGlvbk9uUmVzdGFydEZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk7XG5TREsuYXBwbHlTa2lwR2FyYmFnZUNvbGxlY3Rpb25Pbk1vYmlsZURldmljZXNGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpO1xuU0RLLmluaXQoKTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVsZW1ldHJ5VXJsIHtcbiAgc3RhdGljIGdldFRlbGVtZXRyeVVybCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGJhc2VVUkwgPSBuZXcgVVJMKHVybCk7XG4gICAgICBjb25zdCBzZWdtZW50cyA9IGJhc2VVUkwuaG9zdG5hbWUuc3BsaXQoJy4nKTtcblxuICAgICAgc3dpdGNoIChiYXNlVVJMLnByb3RvY29sKSB7XG4gICAgICAgIGNhc2UgJ3dzOic6XG4gICAgICAgICAgYmFzZVVSTC5wcm90b2NvbCA9ICdodHRwOic7XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnd3NzOic6XG4gICAgICAgICAgYmFzZVVSTC5wcm90b2NvbCA9ICdodHRwczonO1xuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgaWYgKHNlZ21lbnRzLmxlbmd0aCA9PT0gMiB8fFxuICAgICAgICAgIChzZWdtZW50cy5sZW5ndGggPT09IDMgJiYgc2VnbWVudHNbc2VnbWVudHMubGVuZ3RoIC0gMl0ubGVuZ3RoIDw9IDIgJiYgc2VnbWVudHNbc2VnbWVudHMubGVuZ3RoIC0gMV0ubGVuZ3RoIDw9IDMpXG4gICAgICApIHtcbiAgICAgICAgc2VnbWVudHMudW5zaGlmdCgndGVsZW1ldHJ5Jyk7XG4gICAgICB9IGVsc2UgaWYgKHNlZ21lbnRzWzBdLnN0YXJ0c1dpdGgoJ3N0Zy0nKSB8fCBzZWdtZW50c1swXS5lbmRzV2l0aCgnLXN0ZycpIHx8IHNlZ21lbnRzWzBdLmluY2x1ZGVzKCctc3RnLScpIHx8IHNlZ21lbnRzWzBdID09PSAnc3RnJykge1xuICAgICAgICBzZWdtZW50c1swXSA9ICd0ZWxlbWV0cnktc3RnJztcbiAgICAgIH0gZWxzZSBpZiAoc2VnbWVudHNbMF0uc3RhcnRzV2l0aCgnbG9jYWwnKSB8fCBzZWdtZW50c1swXS5lbmRzV2l0aCgnLWxvY2FsJykpIHtcbiAgICAgICAgLy8gTGVhdmUgVVJMIHVuY2hhbmdlZFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2VnbWVudHNbMF0gPSAndGVsZW1ldHJ5JztcbiAgICAgIH1cblxuICAgICAgYmFzZVVSTC5ob3N0bmFtZSA9IHNlZ21lbnRzLmpvaW4oJy4nKTtcblxuICAgICAgcmV0dXJuIGAke2Jhc2VVUkwub3JpZ2lufS90ZWxlbWV0cnlgO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiB1cmw7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmV4cG9ydCB0eXBlIEJpdHJhdGVTdGF0ZVR5cGUgPSAnS2VlcCcgfCAnUmVzZXQnO1xuZXhwb3J0IHR5cGUgQml0cmF0ZU1vZGVUeXBlID0gJ05vcm1hbCcgfCAnRm9yY2UnIHwgJ1Jlc2V0JztcblxuZXhwb3J0IGVudW0gQml0cmF0ZVN0YXRlIHtcbiAgS2VlcCxcbiAgUmVzZXRcbn1cblxuZXhwb3J0IGVudW0gQml0cmF0ZU1vZGUge1xuICBOb3JtYWwsXG4gIEZvcmNlLFxuICBSZXNldFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElTZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZSB7XG4gIGFwaVZlcnNpb246IG51bWJlcjtcbiAgc2hhcmVkU2VjcmV0OiBzdHJpbmc7XG4gIGVsYXBzZWRJbk1pbGxpc2Vjb25kczogbnVtYmVyO1xuICBiaXRyYXRlSW5CaXRzUGVyU2Vjb25kOiBudW1iZXI7XG4gIGJpdHJhdGVTdGF0ZTogQml0cmF0ZVN0YXRlVHlwZTtcbiAgYml0cmF0ZU1vZGU6IEJpdHJhdGVNb2RlVHlwZTtcbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuLi8uLi9sYW5nL0lEaXNwb3NhYmxlJztcbmltcG9ydCBSZWFkT25seVN1YmplY3QgZnJvbSAnLi4vLi4vcngvUmVhZE9ubHlTdWJqZWN0JztcbmltcG9ydCBEaW1lbnNpb24gZnJvbSAnLi4vLi4vdmlkZW8vRGltZW5zaW9uJztcbmltcG9ydCBFeHBvbmVudGlhbEJhY2tvZmYgZnJvbSAnLi4vLi4vdGltZS9FeHBvbmVudGlhbEJhY2tvZmYnO1xuaW1wb3J0IEVuZFBvaW50LCB7SVN0cmVhbX0gZnJvbSAnLi4vZGlzY292ZXJ5L0VuZFBvaW50JztcbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcbmltcG9ydCBHYXJiYWdlQ29sbGVjdG9yTWFuYWdlciBmcm9tICcuLi8uLi9kb20vR2FyYmFnZUNvbGxlY3Rvck1hbmFnZXInO1xuaW1wb3J0IElQZWVyQ29ubmVjdGlvbiBmcm9tICcuLi8uLi9ydGMvSVBlZXJDb25uZWN0aW9uJztcbmltcG9ydCBDaGFubmVsU3RhdGUgZnJvbSAnLi9DaGFubmVsU3RhdGUnO1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uLy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuaW1wb3J0IERpc3Bvc2FibGUgZnJvbSAnLi4vLi4vbGFuZy9EaXNwb3NhYmxlJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgVmlkZW9UZWxlbWV0cnkgZnJvbSAnLi4vLi4vdmlkZW8vVmlkZW9UZWxlbWV0cnknO1xuaW1wb3J0IFNlc3Npb25UZWxlbWV0cnkgZnJvbSAnLi4vLi4vdmlkZW8vU2Vzc2lvblRlbGVtZXRyeSc7XG5pbXBvcnQge0lSdGNNb25pdG9yU3RhdGlzdGljfSBmcm9tICcuLi8uLi9ydGMvUnRjQ29ubmVjdGlvbk1vbml0b3InO1xuaW1wb3J0IHtCaXRyYXRlTW9kZSwgQml0cmF0ZVN0YXRlfSBmcm9tICcuLi9hcGkvU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGUnO1xuaW1wb3J0IEVkZ2VBdXRoUGFyc2VyIGZyb20gJy4uLy4uL2VkZ2VBdXRoL0VkZ2VBdXRoUGFyc2VyJztcbmltcG9ydCB7RW5jb2RlZEVkZ2VUb2tlbn0gZnJvbSAnLi4vLi4vZWRnZUF1dGgvRW5jb2RlZEVkZ2VUb2tlbic7XG5pbXBvcnQge0JpdHNQZXJTZWNvbmQsIE1pbGxpc2Vjb25kfSBmcm9tICcuLi8uLi91bml0cy9Vbml0cyc7XG5pbXBvcnQgVG9rZW5Db250ZXh0IGZyb20gJy4uL2NvbnRleHQvVG9rZW5Db250ZXh0JztcbmltcG9ydCBDaGFubmVsQ29udGV4dCwge0NoYW5uZWxDb250ZXh0T3B0aW9uc30gZnJvbSAnLi4vY29udGV4dC9DaGFubmVsQ29udGV4dCc7XG5pbXBvcnQgRW5jb2RlZFN0cmVhbVNpbmssIHtJRW5jb2RlZFN0cmVhbVNpbmt9IGZyb20gJy4uL3RyYW5zZm9ybWF0aW9uL0VuY29kZWRTdHJlYW1TaW5rJztcbmltcG9ydCBTdHJlYW1UcmFja1RyYW5zZm9ybSwge0lTdHJlYW1UcmFja1RyYW5zZm9ybX0gZnJvbSAnLi4vdHJhbnNmb3JtYXRpb24vU3RyZWFtVHJhY2tUcmFuc2Zvcm0nO1xuaW1wb3J0IFN0cmVhbVRyYW5zZm9ybUNvbnRleHQsIHtTdHJlYW1UcmFuc2Zvcm1Db250ZXh0T3B0aW9uc30gZnJvbSAnLi4vY29udGV4dC9TdHJlYW1UcmFuc2Zvcm1Db250ZXh0JztcbmltcG9ydCBQZWVyQ29ubmVjdGlvbkNvbnRleHQgZnJvbSAnLi4vY29udGV4dC9QZWVyQ29ubmVjdGlvbkNvbnRleHQnO1xuaW1wb3J0IFN0YXRlQ29udGV4dCBmcm9tICcuLi9jb250ZXh0L1N0YXRlQ29udGV4dCc7XG5pbXBvcnQgU3RyZWFtRmFjdG9yeSBmcm9tICcuLi9zdHJlYW1pbmcvU3RyZWFtRmFjdG9yeSc7XG5pbXBvcnQgRGlzY292ZXJ5IGZyb20gJy4uL2Rpc2NvdmVyeS9EaXNjb3ZlcnknO1xuaW1wb3J0IERpc2NvdmVyeVVyaSBmcm9tICcuLi9kaXNjb3ZlcnkvRGlzY292ZXJ5VXJpJztcbmltcG9ydCBNZXRyaWNzRmFjdG9yeSBmcm9tICcuLi8uLi9tZXRyaWNzL01ldHJpY3NGYWN0b3J5JztcbmltcG9ydCBNZXRyaWNzU2VydmljZSBmcm9tICcuLi8uLi9tZXRyaWNzL01ldHJpY3NTZXJ2aWNlJztcbmltcG9ydCBGZWF0dXJlRW5hYmxlbWVudCBmcm9tICcuLi8uLi9lbnZpcm9ubWVudC9GZWF0dXJlRW5hYmxlbWVudCc7XG5cbmNvbnN0IGRlZmF1bHRTdHJlYW1UZXJtaW5hdGlvblJlYXNvbiA9ICdjbGllbnQ6dGVybWluYXRpb24nO1xuY29uc3QgZmFpbHVyZUNvdW50Q2xlYW5VcEludGVydmFsSW5NaWxsaXNlY29uZHMgPSAzMDAwO1xuY29uc3Qgc3RhbmRieVBvbGxpbmdJbnRlcnZhbEluTWlsbGlzZWNvbmRzID0gMTUwMDA7XG5cbmV4cG9ydCB0eXBlIENoYW5uZWxPcHRpb25zID0ge1xuICB0YXJnZXRMYWc/OiBNaWxsaXNlY29uZDtcbiAgdmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjaz86IElTdHJlYW1UcmFja1RyYW5zZm9ybTxWaWRlb0ZyYW1lPjtcbiAgYXVkaW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjaz86IElTdHJlYW1UcmFja1RyYW5zZm9ybTxBdWRpb0RhdGE+O1xuICBlbmNvZGVkVmlkZW9TdHJlYW1TaW5rPzogSUVuY29kZWRTdHJlYW1TaW5rPFJUQ0VuY29kZWRWaWRlb0ZyYW1lPjtcbiAgZW5jb2RlZEF1ZGlvU3RyZWFtU2luaz86IElFbmNvZGVkU3RyZWFtU2luazxSVENFbmNvZGVkQXVkaW9GcmFtZT47XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDaGFubmVsIGltcGxlbWVudHMgSURpc3Bvc2FibGUge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignQ2hhbm5lbCcpO1xuICBwcml2YXRlIHJlYWRvbmx5IF90b2tlbkNvbnRleHQ6IFRva2VuQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfY2hhbm5lbENvbnRleHQ6IENoYW5uZWxDb250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9wZWVyQ29ubmVjdGlvbkNvbnRleHQ6IFBlZXJDb25uZWN0aW9uQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfc3RyZWFtVHJhbnNmb3JtQ29udGV4dDogU3RyZWFtVHJhbnNmb3JtQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfc3RhdGVDb250ZXh0OiBTdGF0ZUNvbnRleHQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2V4cG9uZW50aWFsQmFja29mZjogRXhwb25lbnRpYWxCYWNrb2ZmO1xuICBwcml2YXRlIHJlYWRvbmx5IF9jaGFubmVsU3RhcnRUaW1lOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5VmlkZW9FbGVtZW50OiBSZWFkT25seVN1YmplY3Q8SFRNTFZpZGVvRWxlbWVudD47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5VG9rZW46IFJlYWRPbmx5U3ViamVjdDxFbmNvZGVkRWRnZVRva2VuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlQZWVyQ29ubmVjdGlvbjogUmVhZE9ubHlTdWJqZWN0PElQZWVyQ29ubmVjdGlvbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5U3RhdGU6IFJlYWRPbmx5U3ViamVjdDxDaGFubmVsU3RhdGU+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUF1dG9NdXRlZDogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUF1dG9QYXVzZWQ6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlUb2tlbkV4cGlyaW5nOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5QXV0aG9yaXplZDogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seU9ubGluZTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUxvYWRpbmc6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlQbGF5aW5nOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5U3RhbmRieTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVN0b3BwZWQ6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlUYXJnZXRMYWc6IFJlYWRPbmx5U3ViamVjdDxNaWxsaXNlY29uZD47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5TGFnOiBSZWFkT25seVN1YmplY3Q8TWlsbGlzZWNvbmQ+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUJpdHJhdGVMaW1pdDogUmVhZE9ubHlTdWJqZWN0PEJpdHNQZXJTZWNvbmQ+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVJlc29sdXRpb246IFJlYWRPbmx5U3ViamVjdDxEaW1lbnNpb24+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUZhaWx1cmVDb3VudDogUmVhZE9ubHlTdWJqZWN0PG51bWJlcj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5RW5kUG9pbnQ6IFJlYWRPbmx5U3ViamVjdDxFbmRQb2ludD47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5U3RyZWFtOiBSZWFkT25seVN1YmplY3Q8SVN0cmVhbT47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5UnRjU3RhdGlzdGljczogUmVhZE9ubHlTdWJqZWN0PElSdGNNb25pdG9yU3RhdGlzdGljPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlNZWRpYVN0cmVhbTogUmVhZE9ubHlTdWJqZWN0PE1lZGlhU3RyZWFtPjtcblxuICBwcml2YXRlIF9tZXRyaWNzU2VydmljZTogTWV0cmljc1NlcnZpY2U7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3Nlc3Npb25UZWxlbWV0cnk6IFNlc3Npb25UZWxlbWV0cnk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3ZpZGVvTWV0YURhdGFDaGFuZ2VkSGFuZGxlcjogKCkgPT4gdm9pZDtcblxuICBjb25zdHJ1Y3Rvcih2aWRlb0VsZW1lbnQ6IEhUTUxWaWRlb0VsZW1lbnQsIHRva2VuOiBFbmNvZGVkRWRnZVRva2VuLCBvcHRpb25zPzogQ2hhbm5lbE9wdGlvbnMpIHtcbiAgICBjb25zdCBlZGdlVG9rZW4gPSBFZGdlQXV0aFBhcnNlci5wYXJzZVRva2VuKHRva2VuKTtcbiAgICBjb25zdCBjaGFubmVsQ29udGV4dE9wdGlvbnM6IENoYW5uZWxDb250ZXh0T3B0aW9ucyA9IHt0YXJnZXRMYWc6IG9wdGlvbnM/LnRhcmdldExhZ307XG4gICAgY29uc3Qgc3RyZWFtVHJhbnNmb3JtQ29udGV4dE9wdGlvbnM6IFN0cmVhbVRyYW5zZm9ybUNvbnRleHRPcHRpb25zID0ge1xuICAgICAgaGFzSW5zZXJ0YWJsZVN0cmVhbXM6IGVkZ2VUb2tlbi5jYXBhYmlsaXRpZXMuaW5jbHVkZXMoJ2luc2VydGFibGUtc3RyZWFtcycpLFxuICAgICAgaGFzRW5jb2RlZEluc2VydGFibGVTdHJlYW1zOiBlZGdlVG9rZW4uY2FwYWJpbGl0aWVzLmluY2x1ZGVzKCdlbmNvZGVkLWluc2VydGFibGUtc3RyZWFtcycpLFxuICAgICAgdmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjazogb3B0aW9ucz8udmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjayxcbiAgICAgIGF1ZGlvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s6IG9wdGlvbnM/LmF1ZGlvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2ssXG4gICAgICBlbmNvZGVkVmlkZW9TdHJlYW1TaW5rOiBvcHRpb25zPy5lbmNvZGVkVmlkZW9TdHJlYW1TaW5rLFxuICAgICAgZW5jb2RlZEF1ZGlvU3RyZWFtU2luazogb3B0aW9ucz8uZW5jb2RlZEF1ZGlvU3RyZWFtU2lua1xuICAgIH07XG5cbiAgICB0aGlzLl90b2tlbkNvbnRleHQgPSBuZXcgVG9rZW5Db250ZXh0KHRva2VuKTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dCA9IG5ldyBDaGFubmVsQ29udGV4dChjaGFubmVsQ29udGV4dE9wdGlvbnMpO1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dCA9IG5ldyBQZWVyQ29ubmVjdGlvbkNvbnRleHQoKTtcbiAgICB0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0ID0gbmV3IFN0cmVhbVRyYW5zZm9ybUNvbnRleHQoc3RyZWFtVHJhbnNmb3JtQ29udGV4dE9wdGlvbnMpO1xuICAgIHRoaXMuX3N0YXRlQ29udGV4dCA9IG5ldyBTdGF0ZUNvbnRleHQoKTtcbiAgICB0aGlzLl9leHBvbmVudGlhbEJhY2tvZmYgPSBuZXcgRXhwb25lbnRpYWxCYWNrb2ZmKCk7XG4gICAgdGhpcy5fY2hhbm5lbFN0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gICAgdGhpcy5fcmVhZE9ubHlWaWRlb0VsZW1lbnQgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PEhUTUxWaWRlb0VsZW1lbnQ+KHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudCk7XG4gICAgdGhpcy5fcmVhZE9ubHlUb2tlbiA9IG5ldyBSZWFkT25seVN1YmplY3Q8c3RyaW5nPih0aGlzLl90b2tlbkNvbnRleHQudG9rZW4pO1xuICAgIHRoaXMuX3JlYWRPbmx5UGVlckNvbm5lY3Rpb24gPSBuZXcgUmVhZE9ubHlTdWJqZWN0PElQZWVyQ29ubmVjdGlvbj4odGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uKTtcbiAgICB0aGlzLl9yZWFkT25seVN0YXRlID0gbmV3IFJlYWRPbmx5U3ViamVjdDxDaGFubmVsU3RhdGU+KHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlKTtcbiAgICB0aGlzLl9yZWFkT25seUF1dG9NdXRlZCA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4odGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b011dGVkKTtcbiAgICB0aGlzLl9yZWFkT25seUF1dG9QYXVzZWQgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9QYXVzZWQpO1xuICAgIHRoaXMuX3JlYWRPbmx5VG9rZW5FeHBpcmluZyA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4odGhpcy5fdG9rZW5Db250ZXh0LnRva2VuRXhwaXJpbmcpO1xuICAgIHRoaXMuX3JlYWRPbmx5QXV0aG9yaXplZCA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4odGhpcy5fY2hhbm5lbENvbnRleHQuYXV0aG9yaXplZCk7XG4gICAgdGhpcy5fcmVhZE9ubHlPbmxpbmUgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX2NoYW5uZWxDb250ZXh0Lm9ubGluZSk7XG4gICAgdGhpcy5fcmVhZE9ubHlMb2FkaW5nID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nKTtcbiAgICB0aGlzLl9yZWFkT25seVBsYXlpbmcgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcpO1xuICAgIHRoaXMuX3JlYWRPbmx5U3RhbmRieSA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4odGhpcy5fY2hhbm5lbENvbnRleHQuc3RhbmRieSk7XG4gICAgdGhpcy5fcmVhZE9ubHlTdG9wcGVkID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9jaGFubmVsQ29udGV4dC5zdG9wcGVkKTtcbiAgICB0aGlzLl9yZWFkT25seVRhcmdldExhZyA9IG5ldyBSZWFkT25seVN1YmplY3Q8bnVtYmVyPih0aGlzLl9jaGFubmVsQ29udGV4dC50YXJnZXRMYWcpO1xuICAgIHRoaXMuX3JlYWRPbmx5TGFnID0gbmV3IFJlYWRPbmx5U3ViamVjdDxudW1iZXI+KHRoaXMuX2NoYW5uZWxDb250ZXh0LmxhZyk7XG4gICAgdGhpcy5fcmVhZE9ubHlCaXRyYXRlTGltaXQgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PG51bWJlcj4odGhpcy5fY2hhbm5lbENvbnRleHQuYml0cmF0ZUxpbWl0KTtcbiAgICB0aGlzLl9yZWFkT25seVJlc29sdXRpb24gPSBuZXcgUmVhZE9ubHlTdWJqZWN0PERpbWVuc2lvbj4odGhpcy5fY2hhbm5lbENvbnRleHQucmVzb2x1dGlvbik7XG4gICAgdGhpcy5fcmVhZE9ubHlGYWlsdXJlQ291bnQgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PG51bWJlcj4odGhpcy5fY2hhbm5lbENvbnRleHQuZmFpbHVyZUNvdW50KTtcbiAgICB0aGlzLl9yZWFkT25seUVuZFBvaW50ID0gbmV3IFJlYWRPbmx5U3ViamVjdDxFbmRQb2ludD4odGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQpO1xuICAgIHRoaXMuX3JlYWRPbmx5U3RyZWFtID0gbmV3IFJlYWRPbmx5U3ViamVjdDxJU3RyZWFtPih0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0pO1xuICAgIHRoaXMuX3JlYWRPbmx5UnRjU3RhdGlzdGljcyA9IG5ldyBSZWFkT25seVN1YmplY3Q8SVJ0Y01vbml0b3JTdGF0aXN0aWM+KHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y1N0YXRpc3RpY3MpO1xuICAgIHRoaXMuX3JlYWRPbmx5TWVkaWFTdHJlYW0gPSBuZXcgUmVhZE9ubHlTdWJqZWN0PE1lZGlhU3RyZWFtPih0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQubWVkaWFTdHJlYW0pO1xuXG4gICAgY29uc3QgZGlzY292ZXJ5VXJpID0gKGVkZ2VUb2tlbi51cmkgfHwgU0RLLmRpc2NvdmVyeVVyaS52YWx1ZSkudG9TdHJpbmcoKTtcblxuICAgIFNESy50ZW5hbmN5LnZhbHVlID0gZWRnZVRva2VuLnRlbmFuY3kgfHwgU0RLLnRlbmFuY3kudmFsdWU7XG4gICAgRGlzY292ZXJ5VXJpLnVyaS52YWx1ZSA9IGRpc2NvdmVyeVVyaTtcbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZSA9IE1ldHJpY3NGYWN0b3J5LmdldE1ldHJpY3NTZXJ2aWNlKGRpc2NvdmVyeVVyaSk7XG4gICAgdGhpcy5fc2Vzc2lvblRlbGVtZXRyeSA9IG5ldyBTZXNzaW9uVGVsZW1ldHJ5KFNESy5wYWdlTG9hZFRpbWUsIHRoaXMuX21ldHJpY3NTZXJ2aWNlKTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5jaGFubmVsRGlzcG9zYWJsZXMuYWRkKHRoaXMuX3Nlc3Npb25UZWxlbWV0cnkpO1xuICAgIHRoaXMuX3ZpZGVvTWV0YURhdGFDaGFuZ2VkSGFuZGxlciA9IHRoaXMuaGFuZGxlVmlkZW9NZXRhRGF0YUNoYW5nZWQuYmluZCh0aGlzKTtcbiAgICB0aGlzLnZpZGVvRWxlbWVudCA9IHZpZGVvRWxlbWVudDtcblxuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmNoYW5uZWxEaXNwb3NhYmxlcy5hZGQoXG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQuc3Vic2NyaWJlKHZpZGVvRWxlbWVudCA9PiB7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJlbmRlcmVyRGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuXG4gICAgICAgIGlmICghdmlkZW9FbGVtZW50KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucmVuZGVyZXJEaXNwb3NhYmxlcy5hZGQodGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnN1YnNjcmliZShzdHJlYW0gPT4ge1xuICAgICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb1RlbGVtZXRyeSkge1xuICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9UZWxlbWV0cnkuZGlzcG9zZSgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghc3RyZWFtKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCF0aGlzLnZpZGVvRWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0aGlzLnZpZGVvRWxlbWVudC5kYXRhc2V0KSB7XG4gICAgICAgICAgICB0aGlzLnZpZGVvRWxlbWVudC5kYXRhc2V0LnNlc3Npb25JZCA9IFNESy5jbGllbnRTZXNzaW9uSWQ7XG4gICAgICAgICAgICB0aGlzLnZpZGVvRWxlbWVudC5kYXRhc2V0LnN0cmVhbUlkID0gdGhpcy5zdHJlYW1JZDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb1RlbGVtZXRyeSA9IG5ldyBWaWRlb1RlbGVtZXRyeSh0aGlzLnN0cmVhbUlkLCBTREsucGFnZUxvYWRUaW1lLCB0aGlzLl9jaGFubmVsU3RhcnRUaW1lLCB0aGlzLl9tZXRyaWNzU2VydmljZSk7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9UZWxlbWV0cnkuc2V0dXBMaXN0ZW5lckZvclRpbWVUb0ZpcnN0VGltZSh0aGlzLnZpZGVvRWxlbWVudCk7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9UZWxlbWV0cnkuc2V0dXBMaXN0ZW5lckZvclJlYnVmZmVyaW5nKHRoaXMudmlkZW9FbGVtZW50KTtcblxuICAgICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9PT0gQ2hhbm5lbFN0YXRlLlN0b3BwZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLnJlc3RhcnRBZnRlclN0b3AoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pKTtcblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5jaGFubmVsRGlzcG9zYWJsZXMuYWRkKHRoaXMuX2NoYW5uZWxDb250ZXh0LnJlbmRlcmVyRGlzcG9zYWJsZXMpO1xuICAgICAgfSkpO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmNoYW5uZWxEaXNwb3NhYmxlcy5hZGQoXG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS5zdWJzY3JpYmUoc3RhdGUgPT4ge1xuICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQuY2xlYXJGYWlsdXJlQ291bnRUaW1lb3V0KSB7XG4gICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX2NoYW5uZWxDb250ZXh0LmNsZWFyRmFpbHVyZUNvdW50VGltZW91dCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuX2NoYW5uZWxDb250ZXh0LmZhaWx1cmVDb3VudC52YWx1ZSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdGF0ZSAhPT0gQ2hhbm5lbFN0YXRlLlBsYXlpbmcpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5jbGVhckZhaWx1cmVDb3VudFRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuZmFpbHVyZUNvdW50LnZhbHVlID0gMDtcbiAgICAgICAgfSwgZmFpbHVyZUNvdW50Q2xlYW5VcEludGVydmFsSW5NaWxsaXNlY29uZHMpO1xuICAgICAgfSkpO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmNoYW5uZWxEaXNwb3NhYmxlcy5hZGQoXG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5yZXNvbHV0aW9uLnN1YnNjcmliZShyZXNvbHV0aW9uID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvVGVsZW1ldHJ5KSB7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9UZWxlbWV0cnkub25WaWRlb1Jlc29sdXRpb25DaGFuZ2VzKHJlc29sdXRpb24udG9TdHJpbmcoKSk7XG4gICAgICAgIH1cbiAgICAgIH0pKTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5jaGFubmVsRGlzcG9zYWJsZXMuYWRkKFxuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYml0cmF0ZUxpbWl0LnN1YnNjcmliZShiaXRyYXRlTGltaXQgPT4ge1xuICAgICAgICBpZiAoYml0cmF0ZUxpbWl0ICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSkge1xuICAgICAgICAgIGNvbnN0IGVsYXBzZWRJbk1pbGxpc2Vjb25kcyA9IERhdGUubm93KCkgLSB0aGlzLl9jaGFubmVsQ29udGV4dC5jaGFubmVsSW5pdGlhbGl6YXRpb24uZ2V0VGltZSgpO1xuICAgICAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZS5saW1pdEJpdHJhdGUoXG4gICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUsXG4gICAgICAgICAgICBlbGFwc2VkSW5NaWxsaXNlY29uZHMsXG4gICAgICAgICAgICBiaXRyYXRlTGltaXQsXG4gICAgICAgICAgICBCaXRyYXRlU3RhdGUuS2VlcCxcbiAgICAgICAgICAgIEJpdHJhdGVNb2RlLk5vcm1hbFxuICAgICAgICAgIClcbiAgICAgICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdFcnJvciB3aGlsZSBzZXR0aW5nIGxpbWl0IGJpdHJhdGUnLCBlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG5cbiAgICBjb25zdCBkZXN0cm95U3RyZWFtT25Vbm1vdW50ID0gKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZSkge1xuICAgICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUuZGVzdHJveVN0cmVhbU9uVW5tb3VudCh0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUsICdjbGllbnQ6dGVybWluYXRpb24tb24td2luZG93LXVubG9hZCcpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignYmVmb3JldW5sb2FkJywgZGVzdHJveVN0cmVhbU9uVW5tb3VudCk7XG5cbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5jaGFubmVsRGlzcG9zYWJsZXMuYWRkKG5ldyBEaXNwb3NhYmxlKCgpID0+IHtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdiZWZvcmV1bmxvYWQnLCBkZXN0cm95U3RyZWFtT25Vbm1vdW50KTtcbiAgICB9KSk7XG5cbiAgICB0aGlzLnN0YXJ0KCk7XG4gIH1cblxuICBnZXQgdmlkZW9FbGVtZW50KCk6IEhUTUxWaWRlb0VsZW1lbnQge1xuICAgIHJldHVybiB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWU7XG4gIH1cblxuICBzZXQgdmlkZW9FbGVtZW50KHZpZGVvRWxlbWVudDogSFRNTFZpZGVvRWxlbWVudCkge1xuICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUpIHtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkZWRkYXRhJywgdGhpcy5fdmlkZW9NZXRhRGF0YUNoYW5nZWRIYW5kbGVyKTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkZWRtZXRhZGF0YScsIHRoaXMuX3ZpZGVvTWV0YURhdGFDaGFuZ2VkSGFuZGxlcik7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5fdmlkZW9NZXRhRGF0YUNoYW5nZWRIYW5kbGVyKTtcblxuICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5kYXRhc2V0KSB7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5kYXRhc2V0LnNlc3Npb25JZCA9ICcnO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuZGF0YXNldC5zdHJlYW1JZCA9ICcnO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5yZW5kZXJlckRpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcblxuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnBhdXNlKCk7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuc3JjT2JqZWN0ID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gZmFsc2U7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5TdG9wcGVkO1xuXG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlID0gdmlkZW9FbGVtZW50O1xuXG4gICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZSkge1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWRlZGRhdGEnLCB0aGlzLl92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXIpO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWRlZG1ldGFkYXRhJywgdGhpcy5fdmlkZW9NZXRhRGF0YUNoYW5nZWRIYW5kbGVyKTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLl92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXIpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlVmlkZW9NZXRhRGF0YUNoYW5nZWQoKTogdm9pZCB7XG4gICAgY29uc3QgdmlkZW9FbGVtZW50ID0gdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlO1xuXG4gICAgaWYgKHZpZGVvRWxlbWVudCkge1xuICAgICAgaWYgKHRoaXMucmVzb2x1dGlvbi52YWx1ZS53aWR0aCAhPT0gdmlkZW9FbGVtZW50LnZpZGVvV2lkdGggfHwgdGhpcy5yZXNvbHV0aW9uLnZhbHVlLmhlaWdodCAhPT0gdmlkZW9FbGVtZW50LnZpZGVvSGVpZ2h0KSB7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJlc29sdXRpb24udmFsdWUgPSBuZXcgRGltZW5zaW9uKHZpZGVvRWxlbWVudC52aWRlb1dpZHRoLCB2aWRlb0VsZW1lbnQudmlkZW9IZWlnaHQpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5yZXNvbHV0aW9uLnZhbHVlID0gRGltZW5zaW9uLmVtcHR5O1xuICAgIH1cbiAgfVxuXG4gIGdldCB0b2tlbigpOiBFbmNvZGVkRWRnZVRva2VuIHtcbiAgICByZXR1cm4gdGhpcy5fdG9rZW5Db250ZXh0LnRva2VuLnZhbHVlO1xuICB9XG5cbiAgc2V0IHRva2VuKHRva2VuOiBFbmNvZGVkRWRnZVRva2VuKSB7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuZGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuXG4gICAgdGhpcy5fdG9rZW5Db250ZXh0LnRva2VuLnZhbHVlID0gdG9rZW47XG4gICAgdGhpcy5fdG9rZW5Db250ZXh0LnRva2VuRXhwaXJpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgIGNvbnN0IGVkZ2VUb2tlbiA9IEVkZ2VBdXRoUGFyc2VyLnBhcnNlVG9rZW4odGhpcy5fdG9rZW5Db250ZXh0LnRva2VuLnZhbHVlKTtcbiAgICBjb25zdCBkaXNjb3ZlcnlVcmkgPSAoZWRnZVRva2VuLnVyaSB8fCBTREsuZGlzY292ZXJ5VXJpLnZhbHVlKS50b1N0cmluZygpO1xuXG4gICAgU0RLLnRlbmFuY3kudmFsdWUgPSBlZGdlVG9rZW4udGVuYW5jeSB8fCBTREsudGVuYW5jeS52YWx1ZTtcbiAgICBEaXNjb3ZlcnlVcmkudXJpLnZhbHVlID0gZGlzY292ZXJ5VXJpO1xuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UgPSBNZXRyaWNzRmFjdG9yeS5nZXRNZXRyaWNzU2VydmljZShkaXNjb3ZlcnlVcmkpO1xuXG4gICAgdGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5oYXNJbnNlcnRhYmxlU3RyZWFtcy52YWx1ZSA9IGVkZ2VUb2tlbi5jYXBhYmlsaXRpZXMuaW5jbHVkZXMoJ2luc2VydGFibGUtc3RyZWFtcycpO1xuICAgIHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuaGFzRW5jb2RlZEluc2VydGFibGVTdHJlYW1zLnZhbHVlID0gZWRnZVRva2VuLmNhcGFiaWxpdGllcy5pbmNsdWRlcygnZW5jb2RlZC1pbnNlcnRhYmxlLXN0cmVhbXMnKTtcblxuICAgIHRoaXMuc3RhcnQoKTtcbiAgfVxuXG4gIGdldCBwZWVyQ29ubmVjdGlvbigpOiBSZWFkT25seVN1YmplY3Q8SVBlZXJDb25uZWN0aW9uPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5UGVlckNvbm5lY3Rpb247XG4gIH1cblxuICBnZXQgc3RhdGUoKTogUmVhZE9ubHlTdWJqZWN0PENoYW5uZWxTdGF0ZT4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVN0YXRlO1xuICB9XG5cbiAgZ2V0IGF1dG9NdXRlZCgpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seUF1dG9NdXRlZDtcbiAgfVxuXG4gIGdldCBhdXRvUGF1c2VkKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5QXV0b1BhdXNlZDtcbiAgfVxuXG4gIGdldCB0b2tlbkV4cGlyaW5nKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5VG9rZW5FeHBpcmluZztcbiAgfVxuXG4gIGdldCBhdXRob3JpemVkKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5QXV0aG9yaXplZDtcbiAgfVxuXG4gIGdldCBvbmxpbmUoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlPbmxpbmU7XG4gIH1cblxuICBnZXQgbG9hZGluZygpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seUxvYWRpbmc7XG4gIH1cblxuICBnZXQgcGxheWluZygpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVBsYXlpbmc7XG4gIH1cblxuICBnZXQgc3RhbmRieSgpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVN0YW5kYnk7XG4gIH1cblxuICBnZXQgc3RvcHBlZCgpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVN0b3BwZWQ7XG4gIH1cblxuICBnZXQgdGFyZ2V0TGFnKCk6IFJlYWRPbmx5U3ViamVjdDxNaWxsaXNlY29uZD4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVRhcmdldExhZztcbiAgfVxuXG4gIGdldCBsYWcoKTogUmVhZE9ubHlTdWJqZWN0PE1pbGxpc2Vjb25kPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5TGFnO1xuICB9XG5cbiAgZ2V0IGJpdHJhdGVMaW1pdCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seUJpdHJhdGVMaW1pdC52YWx1ZTtcbiAgfVxuXG4gIGdldCByZXNvbHV0aW9uKCk6IFJlYWRPbmx5U3ViamVjdDxEaW1lbnNpb24+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlSZXNvbHV0aW9uO1xuICB9XG5cbiAgZ2V0IGZhaWx1cmVDb3VudCgpOiBSZWFkT25seVN1YmplY3Q8bnVtYmVyPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5RmFpbHVyZUNvdW50O1xuICB9XG5cbiAgZ2V0IGVuZFBvaW50KCk6IFJlYWRPbmx5U3ViamVjdDxFbmRQb2ludD4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seUVuZFBvaW50O1xuICB9XG5cbiAgZ2V0IHN0cmVhbSgpOiBSZWFkT25seVN1YmplY3Q8SVN0cmVhbT4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVN0cmVhbTtcbiAgfVxuXG4gIGdldCBzdHJlYW1JZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZDtcbiAgfVxuXG4gIGdldCBydGNTdGF0aXN0aWNzKCk6IFJlYWRPbmx5U3ViamVjdDxJUnRjTW9uaXRvclN0YXRpc3RpYz4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVJ0Y1N0YXRpc3RpY3M7XG4gIH1cblxuICBnZXQgbWVkaWFTdHJlYW0oKTogUmVhZE9ubHlTdWJqZWN0PE1lZGlhU3RyZWFtPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5TWVkaWFTdHJlYW07XG4gIH1cblxuICBzZXRCaXRyYXRlTGltaXQoYml0cmF0ZUxpbWl0OiBCaXRzUGVyU2Vjb25kKTogdm9pZCB7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYml0cmF0ZUxpbWl0LnZhbHVlID0gYml0cmF0ZUxpbWl0O1xuICB9XG5cbiAgY2xlYXJCaXRyYXRlTGltaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LmJpdHJhdGVMaW1pdC52YWx1ZSAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZSAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUpIHtcbiAgICAgIGNvbnN0IGVsYXBzZWRJbk1pbGxpc2Vjb25kcyA9IERhdGUubm93KCkgLSB0aGlzLl9jaGFubmVsQ29udGV4dC5jaGFubmVsSW5pdGlhbGl6YXRpb24uZ2V0VGltZSgpO1xuICAgICAgY29uc3QgYml0cmF0ZUluQml0c1BlclNlY29uZCA9IDA7XG4gICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUubGltaXRCaXRyYXRlKFxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUsXG4gICAgICAgIGVsYXBzZWRJbk1pbGxpc2Vjb25kcyxcbiAgICAgICAgYml0cmF0ZUluQml0c1BlclNlY29uZCxcbiAgICAgICAgQml0cmF0ZVN0YXRlLktlZXAsXG4gICAgICAgIEJpdHJhdGVNb2RlLlJlc2V0XG4gICAgICApXG4gICAgICAgIC50aGVuKCh7c3RhdHVzfSkgPT4ge1xuICAgICAgICAgIGlmIChzdGF0dXMgPT09ICdvaycpIHtcbiAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmJpdHJhdGVMaW1pdC52YWx1ZSA9IDA7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdFcnJvciB3aGlsZSBzZXR0aW5nIGxpbWl0IGJpdHJhdGUnLCBlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlVGFyZ2V0TGFnKGxhZzogTWlsbGlzZWNvbmQpOiB2b2lkIHtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC50YXJnZXRMYWcudmFsdWUgPSBsYWc7XG4gIH1cblxuICBhc3luYyBzdG9wKHJlYXNvbjogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgaWYgKCF0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSkge1xuICAgICAgICB0aGlzLnByb2Nlc3NTdG9wKHJlYXNvbik7XG5cbiAgICAgICAgcmVzb2x2ZSgpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucmVuZGVyZXJEaXNwb3NhYmxlcy5hZGQodGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcuc3Vic2NyaWJlKGlzU3RhcnRpbmcgPT4ge1xuICAgICAgICBpZiAoIWlzU3RhcnRpbmcpIHtcbiAgICAgICAgICB0aGlzLnByb2Nlc3NTdG9wKHJlYXNvbik7XG4gICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9XG4gICAgICB9KSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHByb2Nlc3NTdG9wKHJlYXNvbjogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZSkge1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnBhdXNlKCk7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuc3JjT2JqZWN0ID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5yZW5kZXJlckRpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcblxuICAgIHRoaXMuY2xlYW5VcFJlc291cmNlcyhyZWFzb24pO1xuXG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuU3RvcHBlZDtcbiAgfVxuXG4gIGFzeW5jIHJlc3VtZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlKSB7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgIHJldHVybiB0aGlzLnBsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50KHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5tZWRpYVN0cmVhbS52YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgbXV0ZSgpOiB2b2lkIHtcbiAgICBjb25zdCB2aWRlb0VsZW1lbnQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWU7XG5cbiAgICBpZiAodmlkZW9FbGVtZW50KSB7XG4gICAgICB2aWRlb0VsZW1lbnQubXV0ZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHVubXV0ZSgpOiB2b2lkIHtcbiAgICBjb25zdCB2aWRlb0VsZW1lbnQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWU7XG5cbiAgICBpZiAodmlkZW9FbGVtZW50KSB7XG4gICAgICB2aWRlb0VsZW1lbnQubXV0ZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGRpc3Bvc2UoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuc3RvcCgnY2xpZW50OmNoYW5uZWwtZGlzcG9zZScpLnRoZW4oKCkgPT4ge1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuY2hhbm5lbERpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcbiAgICAgIHRoaXMuX3N0YXRlQ29udGV4dC5pc0Rpc3Bvc2VkID0gdHJ1ZTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldFVyaSh0b2tlbjogRW5jb2RlZEVkZ2VUb2tlbik6IFVSTCB7XG4gICAgY29uc3QgdXJsID0gRWRnZUF1dGhQYXJzZXIucGFyc2VUb2tlbih0b2tlbikudXJpO1xuXG4gICAgaWYgKHVybCkge1xuICAgICAgcmV0dXJuIHVybDtcbiAgICB9XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnRmFsbCBiYWNrIHRvIHRoZSBkZWZhdWx0IGRpc2NvdmVyIFVSSSBbJXNdJywgU0RLLmRpc2NvdmVyeVVyaS52YWx1ZSk7XG5cbiAgICByZXR1cm4gbmV3IFVSTChTREsuZGlzY292ZXJ5VXJpLnZhbHVlKTtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9zdGF0ZUNvbnRleHQuaXNEaXNwb3NlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDaGFubmVsIHdhcyBhbHJlYWR5IGRpc3Bvc2VkJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyBhbHJlYWR5IHN0YXJ0aW5nLCBza2lwcGluZyBzdGFydCcpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXMucHJvY2Vzc1N0YXJ0KCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHByb2Nlc3NTdGFydCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB0b2tlbjogRW5jb2RlZEVkZ2VUb2tlbiA9IHRoaXMuX3Rva2VuQ29udGV4dC50b2tlbi52YWx1ZTtcbiAgICBjb25zdCBsaXN0ZW5PblN0cmVhbVNldHVwID0gdGhpcy5fc2Vzc2lvblRlbGVtZXRyeS5saXN0ZW5PblN0cmVhbVNldHVwKCk7XG5cbiAgICBpZiAoIUVkZ2VBdXRoUGFyc2VyLmlzRW5jb2RlZEVkZ2VUb2tlblZhbGlkKHRva2VuKSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gcGFyc2UgdG9rZW4gWyVzXScsIHRva2VuKTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlVuYXV0aG9yaXplZDtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dGhvcml6ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC52aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrKSB7XG4gICAgICBjb25zdCB7dmFsaWQsIHZhbGlkYXRpb25SZXN1bHR9ID0gU3RyZWFtVHJhY2tUcmFuc2Zvcm0udmFsaWRhdGVNZWRpYVN0cmVhbVRyYWNrVHJhbnNmb3JtKCd2aWRlbycsIHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQudmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjayk7XG5cbiAgICAgIGlmICghdmFsaWQpIHtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKHZhbGlkYXRpb25SZXN1bHQpO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5Db25maWd1cmF0aW9uRXJyb3I7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dGhvcml6ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuYXVkaW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjaykge1xuICAgICAgY29uc3Qge3ZhbGlkLCB2YWxpZGF0aW9uUmVzdWx0fSA9IFN0cmVhbVRyYWNrVHJhbnNmb3JtLnZhbGlkYXRlTWVkaWFTdHJlYW1UcmFja1RyYW5zZm9ybSgnYXVkaW8nLCB0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0LmF1ZGlvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2spO1xuXG4gICAgICBpZiAoIXZhbGlkKSB7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcih2YWxpZGF0aW9uUmVzdWx0KTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuQ29uZmlndXJhdGlvbkVycm9yO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRob3JpemVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0LmVuY29kZWRWaWRlb1N0cmVhbVNpbmspIHtcbiAgICAgIGNvbnN0IHt2YWxpZCwgdmFsaWRhdGlvblJlc3VsdH0gPSBFbmNvZGVkU3RyZWFtU2luay52YWxpZGF0ZUVuY29kZWRTdHJlYW1TaW5rKCd2aWRlbycsIHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuZW5jb2RlZFZpZGVvU3RyZWFtU2luayk7XG5cbiAgICAgIGlmICghdmFsaWQpIHtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKHZhbGlkYXRpb25SZXN1bHQpO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5Db25maWd1cmF0aW9uRXJyb3I7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dGhvcml6ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuZW5jb2RlZEF1ZGlvU3RyZWFtU2luaykge1xuICAgICAgY29uc3Qge3ZhbGlkLCB2YWxpZGF0aW9uUmVzdWx0fSA9IEVuY29kZWRTdHJlYW1TaW5rLnZhbGlkYXRlRW5jb2RlZFN0cmVhbVNpbmsoJ2F1ZGlvJywgdGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5lbmNvZGVkQXVkaW9TdHJlYW1TaW5rKTtcblxuICAgICAgaWYgKCF2YWxpZCkge1xuICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IodmFsaWRhdGlvblJlc3VsdCk7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkNvbmZpZ3VyYXRpb25FcnJvcjtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5oYXNJbnNlcnRhYmxlU3RyZWFtcy52YWx1ZSAmJiB0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0Lmhhc0VuY29kZWRJbnNlcnRhYmxlU3RyZWFtcy52YWx1ZSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdCb3RoIGluc2VydGFibGUtc3RyZWFtcyBhbmQgZW5jb2RlZC1pbnNlcnRhYmxlLXN0cmVhbXMgYXJlIGVuYWJsZWQsIG9ubHkgdXNlIG9uZSBvciB0aGUgb3RoZXInKTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkNvbmZpZ3VyYXRpb25FcnJvcjtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dGhvcml6ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBoYXNUcmFuc2Zvcm1TdHJlYW1DYWxsYmFjayA9IHR5cGVvZiB0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0LnZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2sgPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuYXVkaW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJztcbiAgICBjb25zdCBoYXNFbmNvZGVkU3RyZWFtU2luayA9IHR5cGVvZiB0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0LmVuY29kZWRWaWRlb1N0cmVhbVNpbmsgPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuZW5jb2RlZEF1ZGlvU3RyZWFtU2luayA9PT0gJ2Z1bmN0aW9uJztcblxuICAgIGlmIChoYXNUcmFuc2Zvcm1TdHJlYW1DYWxsYmFjayAmJiBoYXNFbmNvZGVkU3RyZWFtU2luaykge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdCb3RoIE1lZGlhIFN0cmVhbSBUcmFjayB0cmFuc2Zvcm0gY2FsbGJhY2sgYW5kIGVuY29kZWRJbnNlcnRhYmxlU3RyZWFtcyBzaW5rIGZ1bmN0aW9uIGZvdW5kLCBvbmx5IHVzZSBvbmUgdHlwZSBvciB0aGUgb3RoZXInKTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkNvbmZpZ3VyYXRpb25FcnJvcjtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dGhvcml6ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5oYXNJbnNlcnRhYmxlU3RyZWFtcy52YWx1ZSkge1xuICAgICAgaWYgKCFGZWF0dXJlRW5hYmxlbWVudC5pc0luc2VydGFibGVTdHJlYW1zU3VwcG9ydGVkKSB7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignQnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IE1lZGlhIFN0cmVhbSBUcmFjayBBUEknKTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuVW5zdXBwb3J0ZWRGZWF0dXJlO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRob3JpemVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWhhc1RyYW5zZm9ybVN0cmVhbUNhbGxiYWNrKSB7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignQ3JlYXRlQ2hhbm5lbE9wdGlvbnMgdHJhbnNmb3JtIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIG1pc3Npbmc7IGhvd2V2ZXIsIGluc2VydGFibGUtc3RyZWFtcyBpcyBlbmFibGVkJyk7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkNvbmZpZ3VyYXRpb25FcnJvcjtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGhhc1RyYW5zZm9ybVN0cmVhbUNhbGxiYWNrKSB7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcihgQ3JlYXRlQ2hhbm5lbE9wdGlvbnMgdHJhbnNmb3JtIGNhbGxiYWNrIGZ1bmN0aW9uIGZvdW5kOyBob3dldmVyLCBpbnNlcnRhYmxlLXN0cmVhbXMgaXMgbm90IGVuYWJsZWRgKTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuQ29uZmlndXJhdGlvbkVycm9yO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRob3JpemVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0Lmhhc0VuY29kZWRJbnNlcnRhYmxlU3RyZWFtcy52YWx1ZSkge1xuICAgICAgaWYgKCEoRmVhdHVyZUVuYWJsZW1lbnQuaXNFbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXNTdXBwb3J0ZWQgfHwgRmVhdHVyZUVuYWJsZW1lbnQuaXNSVENSdHBTY3JpcHRUcmFuc2Zvcm1TdXBwb3J0ZWQpKSB7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignQnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IGVuY29kZWRJbnNlcnRhYmxlU3RyZWFtcyBBUEknKTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuVW5zdXBwb3J0ZWRGZWF0dXJlO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRob3JpemVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWhhc0VuY29kZWRTdHJlYW1TaW5rKSB7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignQ3JlYXRlQ2hhbm5lbE9wdGlvbnMgdHJhbnNmb3JtIHNpbmsgZnVuY3Rpb24gaXMgbWlzc2luZzsgaG93ZXZlciwgZW5jb2RlZC1pbnNlcnRhYmxlLXN0cmVhbXMgaXMgZW5hYmxlZCcpO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5Db25maWd1cmF0aW9uRXJyb3I7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dGhvcml6ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChoYXNFbmNvZGVkU3RyZWFtU2luaykge1xuICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoYENyZWF0ZUNoYW5uZWxPcHRpb25zIHRyYW5zZm9ybSBzaW5rIGZ1bmN0aW9uIGZvdW5kOyBob3dldmVyLCBlbmNvZGVkLWluc2VydGFibGUtc3RyZWFtcyBpcyBub3QgZW5hYmxlZGApO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5Db25maWd1cmF0aW9uRXJyb3I7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dGhvcml6ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5jbGVhblVwUmVzb3VyY2VzKCdjbGllbnQ6c3RhcnQnKTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5TdGFydGluZztcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gdHJ1ZTtcblxuICAgIGNvbnN0IHVyaSA9IHRoaXMuZ2V0VXJpKHRva2VuKTtcblxuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmRpc3Bvc2FibGVzLmFkZChcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnN1YnNjcmliZShzdGF0ZSA9PiB7XG4gICAgICAgIGlmIChzdGF0ZSA9PT0gQ2hhbm5lbFN0YXRlLkVycm9yIHx8IHN0YXRlID09PSBDaGFubmVsU3RhdGUuUmVjb3ZlcmluZykge1xuICAgICAgICAgIERpc2NvdmVyeS5jbGVhckNhY2hlZENsb3Nlc3RFbmRwb2ludCh1cmkpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG5cbiAgICBjb25zdCBoYW5kbGVTdHJlYW1GYWlsdXJlQ2FsbGJhY2s6ICgpID0+IFByb21pc2U8dm9pZD4gPSAoKSA9PiBuZXcgUHJvbWlzZSgocmVzb2x2ZSk6IHZvaWQgPT4ge1xuICAgICAgLy8gTmVlZCB0byBzZXQgaXNTdGFydGluZyB0byBmYWxzZSBhbmQgY2FsbCBoYW5kbGVTdHJlYW1GYWlsdXJlIGlmIHN0cmVhbSBtb25pdG9ycyBmb3VuZCBhbiBpc3N1ZVxuICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgcmV0dXJuIHJlc29sdmUodGhpcy5oYW5kbGVTdHJlYW1GYWlsdXJlKCkpO1xuICAgIH0pO1xuICAgIGNvbnN0IHN0cmVhbVBsYXllciA9IFN0cmVhbUZhY3RvcnkuY3JlYXRlKHRva2VuLCB0aGlzLl9jaGFubmVsQ29udGV4dCwgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LCB0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0LCBoYW5kbGVTdHJlYW1GYWlsdXJlQ2FsbGJhY2spO1xuXG4gICAgaWYgKCFzdHJlYW1QbGF5ZXIpIHtcbiAgICAgIHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RyZWFtUGxheWVyLnN0YXJ0KFxuICAgICAgdXJpLFxuICAgICAgdG9rZW4sXG4gICAgICBsaXN0ZW5PblN0cmVhbVNldHVwLFxuICAgICAgdGhpcy5wbGF5TWVkaWFTdHJlYW1JblZpZGVvRWxlbWVudC5iaW5kKHRoaXMpKVxuICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICBsaXN0ZW5PblN0cmVhbVNldHVwLmZhaWwoKTtcblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5mYWlsdXJlQ291bnQudmFsdWUrKztcblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5vbmxpbmUudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLmNsZWFuVXBSZXNvdXJjZXMoJ2NsaWVudDpjbGVhbnVwLWFmdGVyLWZhaWxlZC1zZXR1cCcpO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkNsaWVudFN0YXJ0RXJyb3I7XG5cbiAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gc3RhcnQgY2hhbm5lbCcsIGUpO1xuICAgICAgfSlcbiAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPT09IENoYW5uZWxTdGF0ZS5QbGF5aW5nIHx8ICFTREsuYXV0b21hdGljUmV0cnlPbkZhaWx1cmUpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5oYW5kbGVTdHJlYW1GYWlsdXJlKClcbiAgICAgICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgaGFuZGxpbmcgc3RyZWFtIGZhaWx1cmUnLCBlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCB0aGlzLmdldFJldHJ5SW50ZXJ2YWwoKSk7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuZGlzcG9zYWJsZXMuYWRkKG5ldyBEaXNwb3NhYmxlKCgpID0+IHtcbiAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAgICAgfSkpO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJlc3RhcnRBZnRlclN0b3AoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX3N0YXRlQ29udGV4dC5pc0Rpc3Bvc2VkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NoYW5uZWwgd2FzIGFscmVhZHkgZGlzcG9zZWQnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5wbGF5TWVkaWFTdHJlYW1JblZpZGVvRWxlbWVudCh0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQubWVkaWFTdHJlYW0udmFsdWUpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl90b2tlbkNvbnRleHQudG9rZW4udmFsdWUpIHtcbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLnN0YXJ0KCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIHBsYXkoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgbWVkaWFTdHJlYW0gPSB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQubWVkaWFTdHJlYW0udmFsdWU7XG5cbiAgICBpZiAoIW1lZGlhU3RyZWFtKSB7XG4gICAgICByZXR1cm4gdGhpcy5zdGFydCgpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnBsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50KG1lZGlhU3RyZWFtKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UmV0cnlJbnRlcnZhbCgpOiBudW1iZXIge1xuICAgIHN3aXRjaCAodGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUpIHtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlN0YW5kQnk6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5PZmZsaW5lOlxuICAgICAgICByZXR1cm4gc3RhbmRieVBvbGxpbmdJbnRlcnZhbEluTWlsbGlzZWNvbmRzO1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuRXJyb3I6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5SZWNvdmVyaW5nOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuVW5hdXRob3JpemVkOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuR2VvUmVzdHJpY3RlZDpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkdlb0Jsb2NrZWQ6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5TdG9wcGVkOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuU3RhcnRpbmc6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5QbGF5aW5nOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuUGF1c2VkOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuUmVjb25uZWN0aW5nOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuVW5zdXBwb3J0ZWRGZWF0dXJlOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuQ29uZmlndXJhdGlvbkVycm9yOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuVHJhbnNpZW50Q29uZmlndXJhdGlvbkVycm9yOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuQ29ubmVjdGlvbkVycm9yOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuQ2xpZW50U3RhcnRFcnJvcjpcbiAgICAgICAgLy8gRmlyc3QgYW5kIHNlY29uZCBhdHRlbXB0IGZhc3QsIGFmdGVyIHRoYXQgZXhwb25lbnRpYWwgd2l0aCBiYWNrb2ZmIGludGVydmFsXG4gICAgICAgIHJldHVybiB0aGlzLl9leHBvbmVudGlhbEJhY2tvZmYuZ2V0RXhwb25lbnRpYWxCYWNrb2ZmSW50ZXJ2YWxCeUZhaWx1cmVDb3VudCh0aGlzLl9jaGFubmVsQ29udGV4dC5mYWlsdXJlQ291bnQudmFsdWUpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUodGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgaGFuZGxlU3RyZWFtRmFpbHVyZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBzd2l0Y2ggKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlKSB7XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5FcnJvcjpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlJlY29ubmVjdGluZzpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlN0YW5kQnk6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5PZmZsaW5lOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuUmVjb3ZlcmluZzpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlRyYW5zaWVudENvbmZpZ3VyYXRpb25FcnJvcjpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkNvbm5lY3Rpb25FcnJvcjpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkNsaWVudFN0YXJ0RXJyb3I6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdSZXRyeSBzdGFydCB3aXRoIGluaXRpYWwgc3RhdGUgWyVzXSBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUsIENoYW5uZWxTdGF0ZVt0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZV0pO1xuXG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuVW5hdXRob3JpemVkOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyB1bmF1dGhvcml6ZWQsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0LiBQbGVhc2UgcHJvdmlkZSBhIG5ldyB0b2tlbiBhbmQgaW52b2tlIHN0YXJ0KCknKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5HZW9SZXN0cmljdGVkOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyBnZW8gcmVzdHJpY3RlZCwgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQuIFBsZWFzZSBwcm92aWRlIGEgbmV3IHRva2VuIGFuZCBpbnZva2Ugc3RhcnQoKScpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkdlb0Jsb2NrZWQ6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIGdlbyBibG9ja2VkLCBza2lwcGluZyByZXRyeSBvZiBzdGFydC4gUGxlYXNlIHByb3ZpZGUgYSBuZXcgdG9rZW4gYW5kIGludm9rZSBzdGFydCgpJyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuU3RvcHBlZDpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgc3RvcHBlZCwgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQuJyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuUGxheWluZzpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgcGxheWluZywgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQnKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5QYXVzZWQ6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIHBhdXNlZCwgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQuIFBsZWFzZSBpbnZva2UgcGxheSgpJyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuU3RhcnRpbmc6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIGFscmVhZHkgc3RhcnRpbmcsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0Jyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuVW5zdXBwb3J0ZWRGZWF0dXJlOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyBzdG9wcGVkIGR1ZSB0byB1bnN1cHBvcnRlZCBmZWF0dXJlLCBza2lwcGluZyByZXRyeSBvZiBzdGFydC4nKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5Db25maWd1cmF0aW9uRXJyb3I6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIHN0b3BwZWQgZHVlIHRvIGNvbmZpZ3VyYXRpb24gZXJyb3IsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0LicpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5zdGFydCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhblVwUmVzb3VyY2VzKHJlYXNvbjogc3RyaW5nID0gZGVmYXVsdFN0cmVhbVRlcm1pbmF0aW9uUmVhc29uKTogdm9pZCB7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuZGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuXG4gICAgY29uc3QgcGVlckNvbm5lY3Rpb24gPSB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWU7XG5cbiAgICBpZiAocGVlckNvbm5lY3Rpb24pIHtcbiAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZSA9IG51bGw7XG4gICAgICBwZWVyQ29ubmVjdGlvbi5jbG9zZSgpO1xuICAgICAgcGVlckNvbm5lY3Rpb24uZGlzcG9zZSgpO1xuXG4gICAgICBpZiAoU0RLLmZvcmNlR2FyYmFnZUNvbGxlY3Rpb25PblJlc3RhcnQgJiYgIShGZWF0dXJlRW5hYmxlbWVudC5pc01vYmlsZSAmJiBTREsuc2tpcEdhcmJhZ2VDb2xsZWN0aW9uT25Nb2JpbGVEZXZpY2VzKSkge1xuICAgICAgICBHYXJiYWdlQ29sbGVjdG9yTWFuYWdlci5mb3JjZUdhcmJhZ2VDb2xsZWN0aW9uKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5tZWRpYVN0cmVhbS52YWx1ZSkge1xuICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlLmdldFRyYWNrcygpLmZvckVhY2godHJhY2sgPT4gdHJhY2suc3RvcCgpKTtcbiAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5tZWRpYVN0cmVhbS52YWx1ZSA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IGZhbHNlO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IGZhbHNlO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdG9wcGVkLnZhbHVlID0gdHJ1ZTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGFuZGJ5LnZhbHVlID0gZmFsc2U7XG5cbiAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlKSB7XG4gICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUuZGVzdHJveVN0cmVhbSh0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUsIHJlYXNvbilcbiAgICAgICAgLnRoZW4oKHtzdGF0dXN9KSA9PiB7XG4gICAgICAgICAgaWYgKHN0YXR1cyAhPT0gJ29rJykge1xuICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLndhcm4oJ1slc10gRmFpbGVkIHRvIGRlc3Ryb3kgc3RyZWFtIHdpdGggcmVhc29uIFslc10nLCB0aGlzLnN0cmVhbUlkLCBzdGF0dXMpO1xuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gRGVzdHJveWVkIHN0cmVhbSB3aXRoIHJlYXNvbiBbJXNdJywgdGhpcy5zdHJlYW1JZCwgc3RhdHVzKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignWyVzXSBGYWlsZWQgdG8gZGVzdHJveSBzdHJlYW0nLCB0aGlzLnN0cmVhbUlkLCBlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudmlkZW9FbGVtZW50ICYmIHRoaXMudmlkZW9FbGVtZW50LmRhdGFzZXQpIHtcbiAgICAgIHRoaXMudmlkZW9FbGVtZW50LmRhdGFzZXQuc2Vzc2lvbklkID0gJyc7XG4gICAgICB0aGlzLnZpZGVvRWxlbWVudC5kYXRhc2V0LnN0cmVhbUlkID0gJyc7XG4gICAgfVxuXG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlID0gbnVsbDtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZSA9IG51bGw7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMgPSAwO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBwbGF5TWVkaWFTdHJlYW1JblZpZGVvRWxlbWVudChtZWRpYVN0cmVhbTogTWVkaWFTdHJlYW0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB2aWRlb0VsZW1lbnQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWU7XG5cbiAgICBpZiAoIXZpZGVvRWxlbWVudCkge1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b011dGVkLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5TdG9wcGVkO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0Lmhhc0VuY29kZWRJbnNlcnRhYmxlU3RyZWFtcy52YWx1ZSkge1xuICAgICAgdmlkZW9FbGVtZW50LnNyY09iamVjdCA9IG1lZGlhU3RyZWFtO1xuICAgIH1cblxuICAgIGNvbnN0IHBsYXlQcm9taXNlID0gdmlkZW9FbGVtZW50LnBsYXkoKTtcblxuICAgIGlmIChwbGF5UHJvbWlzZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSB0cnVlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuUGxheWluZztcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJldHVybiBwbGF5UHJvbWlzZS50aGVuKCgpID0+IHtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IHRydWU7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5QbGF5aW5nO1xuICAgIH0pLmNhdGNoKGUgPT4ge1xuICAgICAgY29uc3QgaGFzQXVkaW9UcmFjayA9ICEhbWVkaWFTdHJlYW0uZ2V0VHJhY2tzKCkuZmlsdGVyKHRyYWNrID0+IHtcbiAgICAgICAgcmV0dXJuIHRyYWNrLmtpbmQgPT09ICdhdWRpbyc7XG4gICAgICB9KS5sZW5ndGg7XG4gICAgICBjb25zdCBhdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZU9mZiA9ICFTREsuYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmU7XG5cbiAgICAgIGlmIChhdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZU9mZiB8fCB2aWRlb0VsZW1lbnQubXV0ZWQgfHwgIWhhc0F1ZGlvVHJhY2spIHtcbiAgICAgICAgdmlkZW9FbGVtZW50LnNyY09iamVjdCA9IG51bGw7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlBhdXNlZDtcblxuICAgICAgICBpZiAoYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmVPZmYpIHtcbiAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBQYXVzZWQgdmlkZW8gYWZ0ZXIgcGxheSBmYWlsZWQuIE1hbnVhbCB1c2VyIGFjdGlvbiByZXF1aXJlZC4nLCB0aGlzLnN0cmVhbUlkLCBlKTtcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChoYXNBdWRpb1RyYWNrKSB7XG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gRmFpbGVkIHRvIHBsYXkgdmlkZW8uIE1hbnVhbCB1c2VyIGFjdGlvbiByZXF1aXJlZC4nLCB0aGlzLnN0cmVhbUlkLCBlKTtcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIEZhaWxlZCB0byBwbGF5IG11dGVkIHZpZGVvLiBNYW51YWwgdXNlciBhY3Rpb24gcmVxdWlyZWQuJywgdGhpcy5zdHJlYW1JZCwgZSk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2aWRlb0VsZW1lbnQubXV0ZWQgPSB0cnVlO1xuXG4gICAgICByZXR1cm4gdmlkZW9FbGVtZW50LnBsYXkoKVxuICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gUGxheWVkIHZpZGVvIGFmdGVyIGF1dG8gbXV0aW5nLiBNYW51YWwgdXNlciBhY3Rpb24gcmVxdWlyZWQgdG8gdW5tdXRlLicsIHRoaXMuc3RyZWFtSWQpO1xuXG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b011dGVkLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlBsYXlpbmc7XG4gICAgICAgIH0pLmNhdGNoKGUgPT4ge1xuICAgICAgICAgIHZpZGVvRWxlbWVudC5tdXRlZCA9IGZhbHNlO1xuXG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gRmFpbGVkIHRvIHBsYXkgdmlkZW8uIE1hbnVhbCB1c2VyIGFjdGlvbiByZXF1aXJlZC4nLCB0aGlzLnN0cmVhbUlkLCBlKTtcblxuICAgICAgICAgIHZpZGVvRWxlbWVudC5zcmNPYmplY3QgPSBudWxsO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuUGF1c2VkO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuZW51bSBDaGFubmVsU3RhdGUge1xuICBPZmZsaW5lID0gMSxcbiAgU3RhcnRpbmcsXG4gIFBhdXNlZCxcbiAgUGxheWluZyxcbiAgUmVjb3ZlcmluZyxcbiAgUmVjb25uZWN0aW5nLFxuICBTdGFuZEJ5LFxuICBTdG9wcGVkLFxuICBVbmF1dGhvcml6ZWQsXG4gIEdlb1Jlc3RyaWN0ZWQsXG4gIEdlb0Jsb2NrZWQsXG4gIFVuc3VwcG9ydGVkRmVhdHVyZSxcbiAgQ29uZmlndXJhdGlvbkVycm9yLFxuICBUcmFuc2llbnRDb25maWd1cmF0aW9uRXJyb3IsXG4gIENvbm5lY3Rpb25FcnJvcixcbiAgQ2xpZW50U3RhcnRFcnJvcixcbiAgRXJyb3Jcbn1cblxuZXhwb3J0IGRlZmF1bHQgQ2hhbm5lbFN0YXRlOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IENoYW5uZWwsIHtDaGFubmVsT3B0aW9uc30gZnJvbSAnLi9DaGFubmVsJztcbmltcG9ydCB7SUVuY29kZWRTdHJlYW1TaW5rfSBmcm9tICcuLi90cmFuc2Zvcm1hdGlvbi9FbmNvZGVkU3RyZWFtU2luayc7XG5pbXBvcnQge0lTdHJlYW1UcmFja1RyYW5zZm9ybX0gZnJvbSAnLi4vdHJhbnNmb3JtYXRpb24vU3RyZWFtVHJhY2tUcmFuc2Zvcm0nO1xuaW1wb3J0IFNESyBmcm9tICcuLi9TREsnO1xuaW1wb3J0IHtFbmNvZGVkRWRnZVRva2VufSBmcm9tICcuLi8uLi9lZGdlQXV0aC9FbmNvZGVkRWRnZVRva2VuJztcbmltcG9ydCB7TWlsbGlzZWNvbmR9IGZyb20gJy4uLy4uL3VuaXRzL1VuaXRzJztcblxudHlwZSBDcmVhdGVDaGFubmVsT3B0aW9ucyA9IHtcbiAgdmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50O1xuICB0b2tlbjogRW5jb2RlZEVkZ2VUb2tlbjtcbiAgdGFyZ2V0TGFnPzogTWlsbGlzZWNvbmQ7XG4gIHZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s/OiBJU3RyZWFtVHJhY2tUcmFuc2Zvcm08VmlkZW9GcmFtZT47XG4gIGF1ZGlvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s/OiBJU3RyZWFtVHJhY2tUcmFuc2Zvcm08QXVkaW9EYXRhPjtcbiAgZW5jb2RlZFZpZGVvU3RyZWFtU2luaz86IElFbmNvZGVkU3RyZWFtU2luazxSVENFbmNvZGVkVmlkZW9GcmFtZT47XG4gIGVuY29kZWRBdWRpb1N0cmVhbVNpbms/OiBJRW5jb2RlZFN0cmVhbVNpbms8UlRDRW5jb2RlZEF1ZGlvRnJhbWU+O1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2hhbm5lbHMge1xuICBzdGF0aWMgY3JlYXRlQ2hhbm5lbChvcHRpb25zOiBDcmVhdGVDaGFubmVsT3B0aW9ucyk6IENoYW5uZWwge1xuICAgIGlmICghU0RLLmluaXRpYWxpemVkLnZhbHVlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NESyBpcyBub3QgbG9hZGVkLicpO1xuICAgIH1cblxuICAgIGNvbnN0IGNoYW5uZWxPcHRpb25zOiBDaGFubmVsT3B0aW9ucyA9IHtcbiAgICAgIHRhcmdldExhZzogb3B0aW9ucy50YXJnZXRMYWcsXG4gICAgICB2aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrOiBvcHRpb25zLnZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2ssXG4gICAgICBhdWRpb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrOiBvcHRpb25zLmF1ZGlvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2ssXG4gICAgICBlbmNvZGVkVmlkZW9TdHJlYW1TaW5rOiBvcHRpb25zLmVuY29kZWRWaWRlb1N0cmVhbVNpbmssXG4gICAgICBlbmNvZGVkQXVkaW9TdHJlYW1TaW5rOiBvcHRpb25zLmVuY29kZWRBdWRpb1N0cmVhbVNpbmtcbiAgICB9O1xuXG4gICAgcmV0dXJuIG5ldyBDaGFubmVsKG9wdGlvbnMudmlkZW9FbGVtZW50LCBvcHRpb25zLnRva2VuLCBjaGFubmVsT3B0aW9ucyk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ2hhbm5lbHMgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi8uLi9yeC9TdWJqZWN0JztcbmltcG9ydCBDaGFubmVsU3RhdGUgZnJvbSAnLi4vY2hhbm5lbHMvQ2hhbm5lbFN0YXRlJztcbmltcG9ydCBEaW1lbnNpb24gZnJvbSAnLi4vLi4vdmlkZW8vRGltZW5zaW9uJztcbmltcG9ydCBFbmRQb2ludCwge0lTdHJlYW0sIFN1YnNjcmliZVN0YXR1c30gZnJvbSAnLi4vZGlzY292ZXJ5L0VuZFBvaW50JztcbmltcG9ydCBWaWRlb1RlbGVtZXRyeSBmcm9tICcuLi8uLi92aWRlby9WaWRlb1RlbGVtZXRyeSc7XG5pbXBvcnQge0lSdGNNb25pdG9yU3RhdGlzdGljLCBJUnRjU3RhdGlzdGljfSBmcm9tICcuLi8uLi9ydGMvUnRjQ29ubmVjdGlvbk1vbml0b3InO1xuaW1wb3J0IFNESyBmcm9tICcuLi9TREsnO1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uLy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuaW1wb3J0IERpc3Bvc2FibGVMaXN0IGZyb20gJy4uLy4uL2xhbmcvRGlzcG9zYWJsZUxpc3QnO1xuaW1wb3J0IHtCaXRzUGVyU2Vjb25kLCBNaWxsaXNlY29uZH0gZnJvbSAnLi4vLi4vdW5pdHMvVW5pdHMnO1xuXG5jb25zdCBkZWZhdWx0VGFyZ2V0TGFnID0gMDtcblxuZXhwb3J0IHR5cGUgQ2hhbm5lbENvbnRleHRPcHRpb25zID0ge1xuICB0YXJnZXRMYWc/OiBudW1iZXI7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDaGFubmVsQ29udGV4dCB7XG4gIGNoYW5uZWxJbml0aWFsaXphdGlvbjogRGF0ZTtcbiAgZGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0O1xuICBjaGFubmVsRGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0O1xuICByZW5kZXJlckRpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdDtcbiAgdmlkZW9FbGVtZW50OiBTdWJqZWN0PEhUTUxWaWRlb0VsZW1lbnQ+O1xuICBzdGF0ZTogU3ViamVjdDxDaGFubmVsU3RhdGU+O1xuICBhdXRvTXV0ZWQ6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIGF1dG9QYXVzZWQ6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIGF1dGhvcml6ZWQ6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIG9ubGluZTogU3ViamVjdDxib29sZWFuPjtcbiAgbG9hZGluZzogU3ViamVjdDxib29sZWFuPjtcbiAgcGxheWluZzogU3ViamVjdDxib29sZWFuPjtcbiAgc3RhbmRieTogU3ViamVjdDxib29sZWFuPjtcbiAgc3RvcHBlZDogU3ViamVjdDxib29sZWFuPjtcbiAgdGFyZ2V0TGFnOiBTdWJqZWN0PE1pbGxpc2Vjb25kPjtcbiAgbGFnOiBTdWJqZWN0PE1pbGxpc2Vjb25kPjtcbiAgYml0cmF0ZUxpbWl0OiBTdWJqZWN0PEJpdHNQZXJTZWNvbmQ+O1xuICByZXNvbHV0aW9uOiBTdWJqZWN0PERpbWVuc2lvbj47XG4gIGZhaWx1cmVDb3VudDogU3ViamVjdDxudW1iZXI+O1xuICBlbmRQb2ludDogU3ViamVjdDxFbmRQb2ludD47XG4gIHN0cmVhbTogU3ViamVjdDxJU3RyZWFtPjtcbiAgcnRjU3RhdGlzdGljczogU3ViamVjdDxJUnRjTW9uaXRvclN0YXRpc3RpYz47XG4gIHZpZGVvVGVsZW1ldHJ5OiBWaWRlb1RlbGVtZXRyeTtcbiAgcnRjQXVkaW9TdGF0aXN0aWM6IElSdGNTdGF0aXN0aWM7XG4gIHJ0Y1ZpZGVvU3RhdGlzdGljOiBJUnRjU3RhdGlzdGljO1xuICBjbGVhckZhaWx1cmVDb3VudFRpbWVvdXQ6IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zPzogQ2hhbm5lbENvbnRleHRPcHRpb25zKSB7XG4gICAgdGhpcy5kaXNwb3NhYmxlcyA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICAgIHRoaXMuY2hhbm5lbERpc3Bvc2FibGVzID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG4gICAgdGhpcy5yZW5kZXJlckRpc3Bvc2FibGVzID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG4gICAgdGhpcy5jaGFubmVsSW5pdGlhbGl6YXRpb24gPSBuZXcgRGF0ZSgpO1xuICAgIHRoaXMudmlkZW9FbGVtZW50ID0gbmV3IFN1YmplY3Q8SFRNTFZpZGVvRWxlbWVudD4obnVsbCk7XG4gICAgdGhpcy5zdGF0ZSA9IG5ldyBTdWJqZWN0PENoYW5uZWxTdGF0ZT4oQ2hhbm5lbFN0YXRlLlN0YXJ0aW5nKTtcbiAgICB0aGlzLmF1dG9NdXRlZCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICB0aGlzLmF1dG9QYXVzZWQgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy5hdXRob3JpemVkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG4gICAgdGhpcy5vbmxpbmUgPSBuZXcgU3ViamVjdDxib29sZWFuPih0cnVlKTtcbiAgICB0aGlzLmxvYWRpbmcgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy5wbGF5aW5nID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHRoaXMuc3RhbmRieSA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICB0aGlzLnN0b3BwZWQgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy50YXJnZXRMYWcgPSBuZXcgU3ViamVjdDxNaWxsaXNlY29uZD4ob3B0aW9ucz8udGFyZ2V0TGFnID8/IGRlZmF1bHRUYXJnZXRMYWcpO1xuICAgIHRoaXMubGFnID0gbmV3IFN1YmplY3Q8TWlsbGlzZWNvbmQ+KDApO1xuICAgIHRoaXMuYml0cmF0ZUxpbWl0ID0gbmV3IFN1YmplY3Q8Qml0c1BlclNlY29uZD4oMCk7XG4gICAgdGhpcy5yZXNvbHV0aW9uID0gbmV3IFN1YmplY3Q8RGltZW5zaW9uPihEaW1lbnNpb24uZW1wdHkpO1xuICAgIHRoaXMuZmFpbHVyZUNvdW50ID0gbmV3IFN1YmplY3Q8bnVtYmVyPigwKTtcbiAgICB0aGlzLmVuZFBvaW50ID0gbmV3IFN1YmplY3Q8RW5kUG9pbnQ+KG51bGwpO1xuICAgIHRoaXMuc3RyZWFtID0gbmV3IFN1YmplY3Q8SVN0cmVhbT4obnVsbCk7XG4gICAgdGhpcy5ydGNTdGF0aXN0aWNzID0gbmV3IFN1YmplY3Q8SVJ0Y01vbml0b3JTdGF0aXN0aWM+KG51bGwpO1xuICB9XG5cbiAgZ2V0IHN0cmVhbUlkKCk6IHN0cmluZyB7XG4gICAgY29uc3Qgc3RyZWFtID0gdGhpcy5zdHJlYW0udmFsdWU7XG5cbiAgICBpZiAoIXN0cmVhbSkge1xuICAgICAgcmV0dXJuICctJztcbiAgICB9XG5cbiAgICByZXR1cm4gc3RyZWFtLnN0cmVhbUlkO1xuICB9XG5cbiAgYXBwbHlTdGF0dXMoc3RhdHVzOiBTdWJzY3JpYmVTdGF0dXMpOiB2b2lkIHtcbiAgICBzd2l0Y2ggKHN0YXR1cykge1xuICAgICAgY2FzZSAnb2snOlxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3VuYXV0aG9yaXplZCc6XG4gICAgICBjYXNlICdnZW8tcmVzdHJpY3RlZCc6XG4gICAgICBjYXNlICdnZW8tYmxvY2tlZCc6XG4gICAgICAgIHRoaXMuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZmFsbHRocm91Z2hcbiAgICAgIGNhc2UgJ25vLXN0cmVhbSc6XG4gICAgICBjYXNlICdub3QtZm91bmQnOlxuICAgICAgICB0aGlzLmZhaWx1cmVDb3VudC52YWx1ZSA9IDA7XG4gICAgICAgIHRoaXMucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnN0YW5kYnkudmFsdWUgPSB0cnVlO1xuICAgICAgICB0aGlzLnN0b3BwZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zdHJlYW0udmFsdWUgPSBudWxsO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRoaXMuZmFpbHVyZUNvdW50LnZhbHVlKys7XG4gICAgICAgIHRoaXMucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnN0YW5kYnkudmFsdWUgPSB0cnVlO1xuICAgICAgICB0aGlzLnN0b3BwZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zdHJlYW0udmFsdWUgPSBudWxsO1xuXG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBhcHBseVNlc3Npb25BbmRTdHJlYW1Qcm9wZXJ0aWVzVG9WaWRlb0VsZW1lbnQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMudmlkZW9FbGVtZW50LnZhbHVlICYmIHRoaXMudmlkZW9FbGVtZW50LnZhbHVlLmRhdGFzZXQpIHtcbiAgICAgIHRoaXMudmlkZW9FbGVtZW50LnZhbHVlLmRhdGFzZXQuc2Vzc2lvbklkID0gU0RLLmNsaWVudFNlc3Npb25JZDtcbiAgICAgIHRoaXMudmlkZW9FbGVtZW50LnZhbHVlLmRhdGFzZXQuc3RyZWFtSWQgPSB0aGlzLnN0cmVhbUlkO1xuICAgIH1cbiAgfVxuXG4gIG1hcFN1YnNjcmliZVN0YXR1c1RvQ2hhbm5lbFN0YXR1cyhzdGF0dXM6IFN1YnNjcmliZVN0YXR1cyk6IENoYW5uZWxTdGF0ZSB7XG4gICAgc3dpdGNoIChzdGF0dXMpIHtcbiAgICAgIGNhc2UgJ29rJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5TdGFydGluZztcbiAgICAgIGNhc2UgJ25vLXN0cmVhbSc6XG4gICAgICBjYXNlICdub3QtZm91bmQnOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLlN0YW5kQnk7XG4gICAgICBjYXNlICdnZW8tcmVzdHJpY3RlZCc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuR2VvUmVzdHJpY3RlZDtcbiAgICAgIGNhc2UgJ2dlby1ibG9ja2VkJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5HZW9CbG9ja2VkO1xuICAgICAgY2FzZSAndW5hdXRob3JpemVkJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5VbmF1dGhvcml6ZWQ7XG4gICAgICBjYXNlICdjYXBhY2l0eSc6XG4gICAgICBjYXNlICdyYXRlLWxpbWl0ZWQnOlxuICAgICAgY2FzZSAndGltZW91dCc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuUmVjb3ZlcmluZztcbiAgICAgIGNhc2UgJ2ZvcmJpZGRlbi10YWcnOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLkNvbmZpZ3VyYXRpb25FcnJvcjtcbiAgICAgIGNhc2UgJ3BvcnQtaW4tcmFuZ2Utbm90LWZvdW5kJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5UcmFuc2llbnRDb25maWd1cmF0aW9uRXJyb3I7XG4gICAgICBjYXNlICdmYWlsZWQnOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLkVycm9yO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUoc3RhdHVzKTtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uLy4uL3J4L1N1YmplY3QnO1xuaW1wb3J0IElQZWVyQ29ubmVjdGlvbiBmcm9tICcuLi8uLi9ydGMvSVBlZXJDb25uZWN0aW9uJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGVlckNvbm5lY3Rpb25Db250ZXh0IHtcbiAgbWVkaWFTdHJlYW06IFN1YmplY3Q8TWVkaWFTdHJlYW0+O1xuICBwZWVyQ29ubmVjdGlvbjogU3ViamVjdDxJUGVlckNvbm5lY3Rpb24+O1xuICBwZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5tZWRpYVN0cmVhbSA9IG5ldyBTdWJqZWN0PE1lZGlhU3RyZWFtPihudWxsKTtcbiAgICB0aGlzLnBlZXJDb25uZWN0aW9uID0gbmV3IFN1YmplY3Q8SVBlZXJDb25uZWN0aW9uPihudWxsKTtcbiAgICB0aGlzLnBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMgPSAwO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi8uLi9yeC9TdWJqZWN0JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3RhdGVDb250ZXh0IHtcbiAgaXNTdGFydGluZzogU3ViamVjdDxib29sZWFuPjtcbiAgaXNEaXNwb3NlZDogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmlzU3RhcnRpbmcgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy5pc0Rpc3Bvc2VkID0gZmFsc2U7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uLy4uL3J4L1N1YmplY3QnO1xuaW1wb3J0IHtJU3RyZWFtVHJhY2tUcmFuc2Zvcm19IGZyb20gJy4uL3RyYW5zZm9ybWF0aW9uL1N0cmVhbVRyYWNrVHJhbnNmb3JtJztcbmltcG9ydCB7SUVuY29kZWRTdHJlYW1TaW5rfSBmcm9tICcuLi90cmFuc2Zvcm1hdGlvbi9FbmNvZGVkU3RyZWFtU2luayc7XG5cbmV4cG9ydCB0eXBlIFN0cmVhbVRyYW5zZm9ybUNvbnRleHRPcHRpb25zID0ge1xuICBoYXNJbnNlcnRhYmxlU3RyZWFtczogYm9vbGVhbjtcbiAgaGFzRW5jb2RlZEluc2VydGFibGVTdHJlYW1zOiBib29sZWFuO1xuICB2aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrOiBJU3RyZWFtVHJhY2tUcmFuc2Zvcm08VmlkZW9GcmFtZT4gfCB1bmRlZmluZWQ7XG4gIGF1ZGlvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s6IElTdHJlYW1UcmFja1RyYW5zZm9ybTxBdWRpb0RhdGE+IHwgdW5kZWZpbmVkO1xuICBlbmNvZGVkVmlkZW9TdHJlYW1TaW5rOiBJRW5jb2RlZFN0cmVhbVNpbms8UlRDRW5jb2RlZFZpZGVvRnJhbWU+IHwgdW5kZWZpbmVkO1xuICBlbmNvZGVkQXVkaW9TdHJlYW1TaW5rOiBJRW5jb2RlZFN0cmVhbVNpbms8UlRDRW5jb2RlZEF1ZGlvRnJhbWU+IHwgdW5kZWZpbmVkO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3RyZWFtVHJhbnNmb3JtQ29udGV4dCB7XG4gIHJlYWRvbmx5IGhhc0luc2VydGFibGVTdHJlYW1zOiBTdWJqZWN0PGJvb2xlYW4+O1xuICByZWFkb25seSBoYXNFbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXM6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIHJlYWRvbmx5IHZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s6IElTdHJlYW1UcmFja1RyYW5zZm9ybTxWaWRlb0ZyYW1lPiB8IHVuZGVmaW5lZDtcbiAgcmVhZG9ubHkgYXVkaW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjazogSVN0cmVhbVRyYWNrVHJhbnNmb3JtPEF1ZGlvRGF0YT4gfCB1bmRlZmluZWQ7XG4gIHJlYWRvbmx5IGVuY29kZWRWaWRlb1N0cmVhbVNpbms6IElFbmNvZGVkU3RyZWFtU2luazxSVENFbmNvZGVkVmlkZW9GcmFtZT4gfCB1bmRlZmluZWQ7XG4gIHJlYWRvbmx5IGVuY29kZWRBdWRpb1N0cmVhbVNpbms6IElFbmNvZGVkU3RyZWFtU2luazxSVENFbmNvZGVkQXVkaW9GcmFtZT4gfCB1bmRlZmluZWQ7XG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczogU3RyZWFtVHJhbnNmb3JtQ29udGV4dE9wdGlvbnMpIHtcbiAgICB0aGlzLmhhc0luc2VydGFibGVTdHJlYW1zID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4ob3B0aW9ucy5oYXNJbnNlcnRhYmxlU3RyZWFtcyk7XG4gICAgdGhpcy5oYXNFbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXMgPSBuZXcgU3ViamVjdDxib29sZWFuPihvcHRpb25zLmhhc0VuY29kZWRJbnNlcnRhYmxlU3RyZWFtcyk7XG4gICAgdGhpcy52aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrID0gb3B0aW9ucy52aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrO1xuICAgIHRoaXMuYXVkaW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjayA9IG9wdGlvbnMuYXVkaW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjaztcbiAgICB0aGlzLmVuY29kZWRWaWRlb1N0cmVhbVNpbmsgPSBvcHRpb25zLmVuY29kZWRWaWRlb1N0cmVhbVNpbms7XG4gICAgdGhpcy5lbmNvZGVkQXVkaW9TdHJlYW1TaW5rID0gb3B0aW9ucy5lbmNvZGVkQXVkaW9TdHJlYW1TaW5rO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi8uLi9yeC9TdWJqZWN0JztcbmltcG9ydCB7RW5jb2RlZEVkZ2VUb2tlbn0gZnJvbSAnLi4vLi4vZWRnZUF1dGgvRW5jb2RlZEVkZ2VUb2tlbic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRva2VuQ29udGV4dCB7XG4gIHRva2VuOiBTdWJqZWN0PEVuY29kZWRFZGdlVG9rZW4+O1xuICB0b2tlbkV4cGlyaW5nOiBTdWJqZWN0PGJvb2xlYW4+O1xuXG4gIGNvbnN0cnVjdG9yKHRva2VuOiBFbmNvZGVkRWRnZVRva2VuKSB7XG4gICAgdGhpcy50b2tlbiA9IG5ldyBTdWJqZWN0PEVuY29kZWRFZGdlVG9rZW4+KHRva2VuKTtcbiAgICB0aGlzLnRva2VuRXhwaXJpbmcgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuY29uc3QgZGVmYXVsdERpc2NvdmVyeVVyaSA9ICdodHRwczovL3BjYXN0LnBoZW5peHJ0cy5jb20vcGNhc3QvZW5kUG9pbnRzJztcblxuZXhwb3J0IHtkZWZhdWx0RGlzY292ZXJ5VXJpfTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7Qml0cmF0ZU1vZGUsIEJpdHJhdGVNb2RlVHlwZX0gZnJvbSAnLi4vYXBpL1NldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlJztcbmltcG9ydCBhc3NlcnRVbnJlYWNoYWJsZSBmcm9tICcuLi8uLi9sYW5nL2Fzc2VydFVucmVhY2hhYmxlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQml0cmF0ZU1vZGVNYXBwaW5nIHtcbiAgc3RhdGljIGNvbnZlcnRCaXRyYXRlTW9kZVRvQml0cmF0ZU1vZGVUeXBlKGJpdHJhdGVNb2RlOiBCaXRyYXRlTW9kZSk6IEJpdHJhdGVNb2RlVHlwZSB7XG4gICAgc3dpdGNoIChiaXRyYXRlTW9kZSkge1xuICAgICAgY2FzZSBCaXRyYXRlTW9kZS5Ob3JtYWw6XG4gICAgICAgIHJldHVybiAnTm9ybWFsJztcbiAgICAgIGNhc2UgQml0cmF0ZU1vZGUuRm9yY2U6XG4gICAgICAgIHJldHVybiAnRm9yY2UnO1xuICAgICAgY2FzZSBCaXRyYXRlTW9kZS5SZXNldDpcbiAgICAgICAgcmV0dXJuICdSZXNldCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZShiaXRyYXRlTW9kZSk7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0JpdHJhdGVTdGF0ZSwgQml0cmF0ZVN0YXRlVHlwZX0gZnJvbSAnLi4vYXBpL1NldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlJztcbmltcG9ydCBhc3NlcnRVbnJlYWNoYWJsZSBmcm9tICcuLi8uLi9sYW5nL2Fzc2VydFVucmVhY2hhYmxlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQml0cmF0ZVN0YXRlTWFwcGluZyB7XG4gIHN0YXRpYyBjb252ZXJ0Qml0cmF0ZVN0YXRlVG9CaXRyYXRlU3RhdGVUeXBlKGJpdHJhdGVTdGF0ZTogQml0cmF0ZVN0YXRlKTogQml0cmF0ZVN0YXRlVHlwZSB7XG4gICAgc3dpdGNoIChiaXRyYXRlU3RhdGUpIHtcbiAgICAgIGNhc2UgQml0cmF0ZVN0YXRlLktlZXA6XG4gICAgICAgIHJldHVybiAnS2VlcCc7XG4gICAgICBjYXNlIEJpdHJhdGVTdGF0ZS5SZXNldDpcbiAgICAgICAgcmV0dXJuICdSZXNldCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZShiaXRyYXRlU3RhdGUpO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IEVuZFBvaW50IGZyb20gJy4vRW5kUG9pbnQnO1xuaW1wb3J0IFNESyBmcm9tICcuLi9TREsnO1xuaW1wb3J0IERpc2NvdmVyeVNlcnZpY2UgZnJvbSAnLi9EaXNjb3ZlcnlTZXJ2aWNlJztcblxuY29uc3QgZGlzY292ZXJ5Q2FjaGVJbnRlcnZhbCA9IDYwMDAwO1xuXG5pbnRlcmZhY2UgSVBlclVSSUVuZHBvaW50IHsgW3g6IHN0cmluZ106IFByb21pc2U8RW5kUG9pbnQ+IH1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGlzY292ZXJ5IHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2NhY2hlOiBJUGVyVVJJRW5kcG9pbnQgPSB7fTtcblxuICBzdGF0aWMgYXN5bmMgcHJlY2FjaGVDbG9zZXN0RW5kUG9pbnREaXNjb3ZlcnkoKTogUHJvbWlzZTxFbmRQb2ludD4ge1xuICAgIGNvbnN0IHVyaSA9IG5ldyBVUkwoU0RLLmRpc2NvdmVyeVVyaS52YWx1ZSk7XG5cbiAgICByZXR1cm4gRGlzY292ZXJ5LmRpc2NvdmVyQ2xvc2VzdEVuZFBvaW50V2l0aENhY2hpbmcodXJpKTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBkaXNjb3ZlckNsb3Nlc3RFbmRQb2ludFdpdGhDYWNoaW5nKHVyaTogVVJMKTogUHJvbWlzZTxFbmRQb2ludD4ge1xuICAgIGNvbnN0IHVybCA9IHVyaS50b1N0cmluZygpO1xuXG4gICAgaWYgKERpc2NvdmVyeS5fY2FjaGVbdXJsXSkge1xuICAgICAgcmV0dXJuIERpc2NvdmVyeS5fY2FjaGVbdXJsXTtcbiAgICB9XG5cbiAgICBjb25zdCBkaXNjb3ZlcnlTZXJ2aWNlID0gbmV3IERpc2NvdmVyeVNlcnZpY2UodXJpKTtcbiAgICBjb25zdCBjYWNoZWRWYWx1ZSA9IERpc2NvdmVyeS5fY2FjaGVbdXJsXSA9IGRpc2NvdmVyeVNlcnZpY2UuZGlzY292ZXJDbG9zZXN0RW5kUG9pbnQoKTtcbiAgICBjb25zdCBpZ25vcmVkID0gRGlzY292ZXJ5Ll9jYWNoZVt1cmxdLnRoZW4oKCkgPT4ge1xuICAgICAgY29uc3QgaWdub3JlZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpZiAoRGlzY292ZXJ5Ll9jYWNoZVt1cmxdID09PSBjYWNoZWRWYWx1ZSkge1xuICAgICAgICAgIGRlbGV0ZSBEaXNjb3ZlcnkuX2NhY2hlW3VybF07XG4gICAgICAgIH1cbiAgICAgIH0sIGRpc2NvdmVyeUNhY2hlSW50ZXJ2YWwpO1xuICAgIH0pLmNhdGNoKCgpID0+IHtcbiAgICAgIGRlbGV0ZSBEaXNjb3ZlcnkuX2NhY2hlW3VybF07XG4gICAgfSk7XG5cbiAgICByZXR1cm4gY2FjaGVkVmFsdWU7XG4gIH1cblxuICBzdGF0aWMgY2xlYXJDYWNoZWRDbG9zZXN0RW5kcG9pbnQodXJpOiBVUkwpOiB2b2lkIHtcbiAgICBjb25zdCB1cmwgPSB1cmkudG9TdHJpbmcoKTtcblxuICAgIGlmIChEaXNjb3ZlcnkuX2NhY2hlW3VybF0pIHtcbiAgICAgIGRlbGV0ZSBEaXNjb3ZlcnkuX2NhY2hlW3VybF07XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Rpc2NvdmVyeSBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn1cblxuY29uc3QgaWdub3JlZCA9IERpc2NvdmVyeS5wcmVjYWNoZUNsb3Nlc3RFbmRQb2ludERpc2NvdmVyeSgpOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IEVuZFBvaW50IGZyb20gJy4vRW5kUG9pbnQnO1xuaW1wb3J0IFNESyBmcm9tICcuLi9TREsnO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBNZXRyaWNzVHlwZSBmcm9tICcuLi8uLi9tZXRyaWNzL01ldHJpY3NUeXBlJztcbmltcG9ydCBEaXNjb3ZlcnlVcmkgZnJvbSAnLi9EaXNjb3ZlcnlVcmknO1xuaW1wb3J0IE1ldHJpY3NTZXJ2aWNlIGZyb20gJy4uLy4uL21ldHJpY3MvTWV0cmljc1NlcnZpY2UnO1xuaW1wb3J0IE1ldHJpY3NGYWN0b3J5IGZyb20gJy4uLy4uL21ldHJpY3MvTWV0cmljc0ZhY3RvcnknO1xuXG5jb25zdCBkZWZhdWx0VGltZW91dCA9IDIwMDAwO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaXNjb3ZlcnlTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ0Rpc2NvdmVyeScpO1xuICBwcml2YXRlIF9tZXRyaWNzU2VydmljZTogTWV0cmljc1NlcnZpY2U7XG4gIHByaXZhdGUgX3VyaTogVVJMO1xuXG4gIGNvbnN0cnVjdG9yKHVyaTogVVJMKSB7XG4gICAgaWYgKCF1cmkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRGlzY292ZXJ5IHJlcXVpcmVzIHVyaScpO1xuICAgIH1cblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlID0gTWV0cmljc0ZhY3RvcnkuZ2V0TWV0cmljc1NlcnZpY2UodXJpLnRvU3RyaW5nKCkpO1xuICAgIHRoaXMuX3VyaSA9IHVyaTtcbiAgfVxuXG4gIGFzeW5jIGRpc2NvdmVyTmVhcmJ5RW5kUG9pbnRzKHVyaTogVVJMLCB0aW1lb3V0OiBudW1iZXIpOiBQcm9taXNlPEVuZFBvaW50W10+IHtcbiAgICBpZiAoIXRpbWVvdXQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRGlzY292ZXJ5IHJlcXVpcmVzIHRpbWVvdXQnKTtcbiAgICB9XG5cbiAgICBjb25zdCB1cmwgPSB1cmkudG9TdHJpbmcoKTtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICBmZXRjaCh1cmwsIHtcbiAgICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgICAgY2FjaGU6ICduby1jYWNoZSdcbiAgICAgIH0pLFxuICAgICAgbmV3IFByb21pc2U8UmVzcG9uc2U+KChfLCByZWplY3QpID0+XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gcmVqZWN0KG5ldyBFcnJvcihgRGlzY292ZXJ5IHRpbWVkIG91dCBbJHt1cmx9XWApKSwgdGltZW91dClcbiAgICAgIClcbiAgICBdKTtcblxuICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRGlzY292ZXJ5IGZhaWxlZCBbJHt1cmx9XSBbJHtyZXNwb25zZS5zdGF0dXN9XWApO1xuICAgIH1cblxuICAgIGlmIChyZXNwb25zZS5ib2R5ID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYERpc2NvdmVyeSBmYWlsZWQgd2l0aCBubyBkYXRhIFske3VybH1dYCk7XG4gICAgfVxuXG4gICAgY29uc3QgYXNTdHJpbmcgPSBhd2FpdCByZXNwb25zZS50ZXh0KCk7XG4gICAgY29uc3QgZW5kUG9pbnRzID0gYXNTdHJpbmcuc3BsaXQoJywnKTtcblxuICAgIHJldHVybiBlbmRQb2ludHMubWFwKGVuZFBvaW50ID0+IG5ldyBFbmRQb2ludChlbmRQb2ludCwgdGltZW91dCkpO1xuICB9XG5cbiAgYXN5bmMgZGlzY292ZXJDbG9zZXN0RW5kUG9pbnQodGltZW91dDogbnVtYmVyID0gZGVmYXVsdFRpbWVvdXQpOiBQcm9taXNlPEVuZFBvaW50PiB7XG4gICAgY29uc3QgdXJsID0gRGlzY292ZXJ5VXJpLmJ1aWxkRGlzY292ZXJ5VXJsKHRoaXMuX3VyaSk7XG4gICAgY29uc3QgZW5kUG9pbnRzID0gYXdhaXQgdGhpcy5kaXNjb3Zlck5lYXJieUVuZFBvaW50cyhuZXcgVVJMKHVybCksIHRpbWVvdXQpO1xuICAgIGxldCBmYWlsZWRSZXF1ZXN0cyA9IDA7XG4gICAgY29uc3QgcHJvcGFnYXRlRmFpbHVyZUlmQWxsUmVxdWVzdHNGYWlsZWQgPSAoKTogUHJvbWlzZTx2b2lkPiA9PiBuZXcgUHJvbWlzZSgoXywgcmVqZWN0KSA9PiB7XG4gICAgICBpZiAoZmFpbGVkUmVxdWVzdHMgPj0gZW5kUG9pbnRzLmxlbmd0aCkge1xuICAgICAgICByZWplY3QoYERpc2NvdmVyeSBvZiBbJHtlbmRQb2ludHMubGVuZ3RofV0gZW5kcG9pbnRzIGZyb20gWyR7dXJsfV0gZmFpbGVkLCBwcmV2ZW50aW5nIGl0IGZyb20gY29tcGxldGluZ2ApO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IGVuZFBvaW50ID0gYXdhaXQgUHJvbWlzZS5yYWNlKGVuZFBvaW50cy5tYXAoZW5kUG9pbnQgPT4gZW5kUG9pbnRcbiAgICAgIC5waW5nKClcbiAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLndhcm4oJ0ZhaWxlZCB0byBwaW5nIGVuZCBwb2ludCBbJXNdJywgZW5kUG9pbnQsIGUpO1xuXG4gICAgICAgIGZhaWxlZFJlcXVlc3RzKys7XG5cbiAgICAgICAgcmV0dXJuIHByb3BhZ2F0ZUZhaWx1cmVJZkFsbFJlcXVlc3RzRmFpbGVkKCk7XG4gICAgICB9KVxuICAgICAgLnRoZW4odGltZSA9PiB7XG4gICAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG5cbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0Rpc2NvdmVyZWQgZW5kIHBvaW50IFslc10gd2l0aCB0aW1lIFslc10nLCBlbmRQb2ludC50b1N0cmluZygpLCB0aW1lKTtcbiAgICAgICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICAgICAgbWV0cmljVHlwZTogTWV0cmljc1R5cGUuUm91bmRUcmlwVGltZSxcbiAgICAgICAgICBydW50aW1lOiAobm93IC0gU0RLLnBhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgICAgIHZhbHVlOiB7dWludDY0OiB0aW1lIHx8IDB9LFxuICAgICAgICAgIHJlc291cmNlOiBlbmRQb2ludC50b1N0cmluZygpLFxuICAgICAgICAgIGtpbmQ6ICdwaW5nJ1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gZW5kUG9pbnQ7XG4gICAgICB9KSkpO1xuXG4gICAgcmV0dXJuIGVuZFBvaW50O1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCB7ZGVmYXVsdERpc2NvdmVyeVVyaX0gZnJvbSAnLi4vZGVmYXVsdHMnO1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vLi4vcngvU3ViamVjdCc7XG5pbXBvcnQgVmVyc2lvbk1hbmFnZXIgZnJvbSAnLi4vdmVyc2lvbi9WZXJzaW9uTWFuYWdlcic7XG5pbXBvcnQgUGFyYW1ldGVycyBmcm9tICcuLi8uLi9lbnZpcm9ubWVudC9QYXJhbWV0ZXJzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGlzY292ZXJ5VXJpIHtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2Rpc2NvdmVyeVVyaTogU3ViamVjdDxzdHJpbmc+ID0gbmV3IFN1YmplY3Q8c3RyaW5nPihkZWZhdWx0RGlzY292ZXJ5VXJpKTtcblxuICBzdGF0aWMgZ2V0IHVyaSgpOiBTdWJqZWN0PHN0cmluZz4ge1xuICAgIHJldHVybiBEaXNjb3ZlcnlVcmkuX2Rpc2NvdmVyeVVyaTtcbiAgfVxuXG4gIHN0YXRpYyBidWlsZERpc2NvdmVyeVVybCh1cmk6IFVSTCk6IHN0cmluZyB7XG4gICAgY29uc3QgdXJsID0gbmV3IFVSTCh1cmkudG9TdHJpbmcoKSk7XG4gICAgY29uc3Qgc2RrVmVyc2lvbiA9IFZlcnNpb25NYW5hZ2VyLnNka1ZlcnNpb247XG4gICAgY29uc3QgaW50ZW50aW9ucyA9IFBhcmFtZXRlcnMuZGlzY292ZXJ5UGFyYW1ldGVycy5pbnRlbnRpb25zO1xuXG4gICAgdXJsLnNlYXJjaFBhcmFtcy5zZXQoJ3ZlcnNpb24nLCBzZGtWZXJzaW9uKTtcbiAgICB1cmwuc2VhcmNoUGFyYW1zLnNldCgnaW50ZW50aW9ucycsIGludGVudGlvbnMpO1xuICAgIHVybC5zZWFyY2hQYXJhbXMuc2V0KCdfJywgYCR7RGF0ZS5ub3coKX1gKTtcblxuICAgIGlmICh1cmwucGF0aG5hbWUgPT09ICcvJykge1xuICAgICAgdXJsLnBhdGhuYW1lID0gJy9wY2FzdC9lbmRQb2ludHMnO1xuICAgIH1cblxuICAgIHJldHVybiB1cmwudG9TdHJpbmcoKTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdEaXNjb3ZlcnlVcmkgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IEVkZ2VBdXRoUGFyc2VyIGZyb20gJy4uLy4uL2VkZ2VBdXRoL0VkZ2VBdXRoUGFyc2VyJztcbmltcG9ydCB7RW5jb2RlZEVkZ2VUb2tlbn0gZnJvbSAnLi4vLi4vZWRnZUF1dGgvRW5jb2RlZEVkZ2VUb2tlbic7XG5cbmltcG9ydCB7XG4gIElTdWJzY3JpYmVSZXNwb25zZSxcbiAgSVN1YnNjcmliZVdpdGhPZmZlclJlcXVlc3QsXG4gIElTdWJzY3JpYmVXaXRob3V0T2ZmZXJSZXF1ZXN0XG59IGZyb20gJy4uL2FwaS9TdWJzY3JpYmUnO1xuaW1wb3J0IHtJU2V0UmVtb3RlRGVzY3JpcHRpb25SZXF1ZXN0LCBJU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZX0gZnJvbSAnLi4vYXBpL1NldFJlbW90ZURlc2NyaXB0aW9uJztcbmltcG9ydCB7SURlc3Ryb3lTdHJlYW1SZXF1ZXN0LCBJRGVzdHJveVN0cmVhbVJlc3BvbnNlfSBmcm9tICcuLi9hcGkvRGVzdHJveVN0cmVhbSc7XG5pbXBvcnQge0lBZGRJY2VDYW5kaWRhdGVzUmVxdWVzdCwgSUFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZX0gZnJvbSAnLi4vYXBpL0FkZEljZUNhbmRpZGF0ZXMnO1xuaW1wb3J0IFZlcnNpb25NYW5hZ2VyIGZyb20gJy4uL3ZlcnNpb24vVmVyc2lvbk1hbmFnZXInO1xuaW1wb3J0IFBhcmFtZXRlcnMgZnJvbSAnLi4vLi4vZW52aXJvbm1lbnQvUGFyYW1ldGVycyc7XG5pbXBvcnQge0JpdHJhdGVNb2RlLCBCaXRyYXRlU3RhdGUsIElTZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZX0gZnJvbSAnLi4vYXBpL1NldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlJztcbmltcG9ydCBCaXRyYXRlTW9kZU1hcHBpbmcgZnJvbSAnLi9CaXRyYXRlTW9kZU1hcHBpbmcnO1xuaW1wb3J0IEJpdHJhdGVTdGF0ZU1hcHBpbmcgZnJvbSAnLi9CaXRyYXRlU3RhdGVNYXBwaW5nJztcbmltcG9ydCB7Qml0c1BlclNlY29uZCwgTWlsbGlzZWNvbmR9IGZyb20gJy4uLy4uL3VuaXRzL1VuaXRzJztcbmltcG9ydCB7XG4gIElQdWJsaXNoUmVzcG9uc2UsXG4gIElQdWJsaXNoV2l0aE9mZmVyUmVxdWVzdCxcbiAgSVB1Ymxpc2hXaXRob3V0T2ZmZXJSZXF1ZXN0LFxuICBQdWJsaXNoU3RhdHVzXG59IGZyb20gJy4uL2FwaS9QdWJsaXNoJztcblxuY29uc3QgYXBpVmVyc2lvbiA9IDc7XG5cbmV4cG9ydCB0eXBlIFN1YnNjcmliZVN0YXR1cyA9ICdvaycgfCAnbm8tc3RyZWFtJyB8ICdub3QtZm91bmQnIHwgJ3VuYXV0aG9yaXplZCcgfCAnZ2VvLXJlc3RyaWN0ZWQnIHwgJ2dlby1ibG9ja2VkJyB8ICdyYXRlLWxpbWl0ZWQnIHwgJ2NhcGFjaXR5JyB8ICd0aW1lb3V0JyB8ICdmb3JiaWRkZW4tdGFnJyB8ICdwb3J0LWluLXJhbmdlLW5vdC1mb3VuZCcgfCAnZmFpbGVkJztcbmV4cG9ydCB0eXBlIFNldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzID0gJ29rJyB8ICdub3QtZm91bmQnIHwgJ3VuYXV0aG9yaXplZCcgfCAncmF0ZS1saW1pdGVkJyB8ICdjYXBhY2l0eScgfCAndGltZW91dCcgfCAnZmFpbGVkJztcbmV4cG9ydCB0eXBlIFNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlU3RhdHVzID0gJ29rJyB8ICdub3QtZm91bmQnIHwgJ3VuYXV0aG9yaXplZCcgfCAncmF0ZS1saW1pdGVkJyB8ICdjYXBhY2l0eScgfCAndGltZW91dCcgfCAnZmFpbGVkJztcbmV4cG9ydCB0eXBlIFJlbW92ZVRlbXBvcmFyeU1heGltYWxCaXRyYXRlU3RhdHVzID0gJ29rJyB8ICdub3QtZm91bmQnIHwgJ3VuYXV0aG9yaXplZCcgfCAncmF0ZS1saW1pdGVkJyB8ICdjYXBhY2l0eScgfCAndGltZW91dCcgfCAnZmFpbGVkJztcbmV4cG9ydCB0eXBlIEFkZEljZUNhbmRpZGF0ZXNTdGF0dXMgPSAnb2snIHwgJ25vdC1mb3VuZCcgfCAndW5hdXRob3JpemVkJyB8ICdyYXRlLWxpbWl0ZWQnIHwgJ2NhcGFjaXR5JyB8ICd0aW1lb3V0JyB8ICdmYWlsZWQnO1xuZXhwb3J0IHR5cGUgRGVzdHJveVN0cmVhbVN0YXR1cyA9ICdvaycgfCAnbm90LWZvdW5kJyB8ICd1bmF1dGhvcml6ZWQnIHwgJ3JhdGUtbGltaXRlZCcgfCAnY2FwYWNpdHknIHwgJ3RpbWVvdXQnIHwgJ2ZhaWxlZCc7XG5leHBvcnQgaW50ZXJmYWNlIElTdHJlYW0ge1xuICBzdHJlYW1JZDogc3RyaW5nO1xuICBzaGFyZWRTZWNyZXQ6IHN0cmluZztcbiAgdGVuYW5jeTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElTdWJzY3JpYmVSZXNwb25zZUluaXQge1xuICBzdGF0dXM6IFN1YnNjcmliZVN0YXR1cztcbiAgc3RyZWFtPzogSVN0cmVhbTtcbiAgbGFnPzogTWlsbGlzZWNvbmQ7XG4gIHJ0Y0NvbmZpZ3VyYXRpb24/OiBSVENDb25maWd1cmF0aW9uO1xuICBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlPzoge1xuICAgIHNlc3Npb25EZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdDtcbiAgfTtcbiAgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlPzoge1xuICAgIHNlc3Npb25EZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdDtcbiAgfTtcbiAgY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZT86IHtcbiAgICBzZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ7XG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIElQdWJsaXNoUmVzcG9uc2VJbml0ID0ge1xuICBzdGF0dXM6IFB1Ymxpc2hTdGF0dXM7XG4gIHN0cmVhbT86IElTdHJlYW07XG4gIGxhZz86IE1pbGxpc2Vjb25kO1xuICBydGNDb25maWd1cmF0aW9uPzogUlRDQ29uZmlndXJhdGlvbjtcbiAgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZT86IHtcbiAgICBzZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ7XG4gIH07XG4gIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZT86IHtcbiAgICBzZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ7XG4gIH07XG4gIGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2U/OiB7XG4gICAgc2Vzc2lvbkRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0O1xuICB9O1xufTtcblxuaW50ZXJmYWNlIElTZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlSW5pdCB7XG4gIHN0YXR1czogU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXM7XG4gIHNlc3Npb25EZXNjcmlwdGlvbj86IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ7XG59XG5cbmludGVyZmFjZSBJQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlSW5pdCB7XG4gIHN0YXR1czogQWRkSWNlQ2FuZGlkYXRlc1N0YXR1cztcbiAgb3B0aW9ucz86IHN0cmluZ1tdO1xufVxuXG5pbnRlcmZhY2UgSVNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlUmVzcG9uc2VJbml0IHtcbiAgc3RhdHVzOiBTZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVN0YXR1cztcbn1cblxuaW50ZXJmYWNlIElEZXN0cm95U3RyZWFtUmVzcG9uc2VJbml0IHtcbiAgc3RhdHVzOiBEZXN0cm95U3RyZWFtU3RhdHVzO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFbmRQb2ludCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdFbmRQb2ludCcpO1xuICBwcml2YXRlIHJlYWRvbmx5IF91cmk6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfdGltZW91dDogbnVtYmVyO1xuICBwcml2YXRlIF9yb3VuZFRyaXBUaW1lOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IodXJpOiBzdHJpbmcsIHRpbWVvdXQ6IG51bWJlcikge1xuICAgIHRoaXMuX3VyaSA9IHVyaTtcbiAgICB0aGlzLl90aW1lb3V0ID0gdGltZW91dDtcblxuICAgIGlmICghdGltZW91dCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFbmQgcG9pbnQgcmVxdWlyZXMgYSB0aW1lb3V0YCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHJvdW5kVHJpcFRpbWUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fcm91bmRUcmlwVGltZTtcbiAgfVxuXG4gIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBFbmRQb2ludFt1cmk9JHt0aGlzLl91cml9XWA7XG4gIH1cblxuICBhc3luYyBwaW5nKCk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgY29uc3QgdXJsID0gdGhpcy5idWlsZFBpbmdVcmwoKTtcbiAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgZmV0Y2godXJsLCB7XG4gICAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICAgIGNhY2hlOiAnbm8tY2FjaGUnXG4gICAgICB9KSxcbiAgICAgIG5ldyBQcm9taXNlPFJlc3BvbnNlPigoXywgcmVqZWN0KSA9PlxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHJlamVjdChuZXcgRXJyb3IoYFBpbmcgdGltZWQgb3V0IFske3VybH1dYCkpLCB0aGlzLl90aW1lb3V0KVxuICAgICAgKVxuICAgIF0pO1xuICAgIGNvbnN0IGZpbmlzaGVkID0gRGF0ZS5ub3coKTtcblxuICAgIGlmICghcmVzcG9uc2Uub2spIHsgLyogSGFuZGxlICovXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFBpbmcgZmFpbGVkIFske3VybH1dIFske3Jlc3BvbnNlLnN0YXR1c31dYCk7XG4gICAgfVxuXG4gICAgdGhpcy5fcm91bmRUcmlwVGltZSA9IGZpbmlzaGVkIC0gc3RhcnQ7XG5cbiAgICByZXR1cm4gdGhpcy5fcm91bmRUcmlwVGltZTtcbiAgfVxuXG4gIGFzeW5jIHN1YnNjcmliZSh0b2tlbjogRW5jb2RlZEVkZ2VUb2tlbiwgbG9jYWxTZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQsIGZhaWx1cmVDb3VudDogbnVtYmVyKTogUHJvbWlzZTxJU3Vic2NyaWJlUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgdGVuYW5jeSA9IEVkZ2VBdXRoUGFyc2VyLnBhcnNlVG9rZW4odG9rZW4pLnRlbmFuY3k7XG5cbiAgICBpZiAoIXRlbmFuY3kpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHBhcnNlIHRva2VuIFslc10nLCB0b2tlbik7XG5cbiAgICAgIHJldHVybiB7c3RhdHVzOiAndW5hdXRob3JpemVkJ307XG4gICAgfVxuXG4gICAgY29uc3QgdXJsID0gdGhpcy5idWlsZFVybChbdGVuYW5jeSwgJ3N0cmVhbScsICdzdWJzY3JpYmUnXSkudG9TdHJpbmcoKTtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgIGNvbnN0IGNsaWVudFZlcnNpb24gPSBWZXJzaW9uTWFuYWdlci5zZGtWZXJzaW9uO1xuXG4gICAgaWYgKGZhaWx1cmVDb3VudCA9PT0gMCAmJiBsb2NhbFNlc3Npb25EZXNjcmlwdGlvbikge1xuICAgICAgY29uc3QgYm9keVdpdGhPZmZlcjogSVN1YnNjcmliZVdpdGhPZmZlclJlcXVlc3QgPSB7XG4gICAgICAgIGFwaVZlcnNpb24sXG4gICAgICAgIGNsaWVudFZlcnNpb24sXG4gICAgICAgIGJlYXJlclRva2VuOiB0b2tlbixcbiAgICAgICAgZmFpbHVyZUNvdW50LFxuICAgICAgICBodHRwUm91bmRUcmlwVGltZTogdGhpcy5fcm91bmRUcmlwVGltZSxcbiAgICAgICAgc2V0UmVtb3RlRGVzY3JpcHRpb246IHtcbiAgICAgICAgICBhcGlWZXJzaW9uLFxuICAgICAgICAgIHNlc3Npb25EZXNjcmlwdGlvbjoge1xuICAgICAgICAgICAgdHlwZTogbG9jYWxTZXNzaW9uRGVzY3JpcHRpb24udHlwZSxcbiAgICAgICAgICAgIHNkcDogbG9jYWxTZXNzaW9uRGVzY3JpcHRpb24uc2RwXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvbjoge2FwaVZlcnNpb259XG4gICAgICB9O1xuXG4gICAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoYm9keVdpdGhPZmZlcikpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBib2R5V2l0aG91dE9mZmVyOiBJU3Vic2NyaWJlV2l0aG91dE9mZmVyUmVxdWVzdCA9IHtcbiAgICAgICAgYXBpVmVyc2lvbixcbiAgICAgICAgY2xpZW50VmVyc2lvbixcbiAgICAgICAgYmVhcmVyVG9rZW46IHRva2VuLFxuICAgICAgICBmYWlsdXJlQ291bnQsXG4gICAgICAgIGh0dHBSb3VuZFRyaXBUaW1lOiB0aGlzLl9yb3VuZFRyaXBUaW1lLFxuICAgICAgICBjcmVhdGVPZmZlckRlc2NyaXB0aW9uOiB7YXBpVmVyc2lvbn1cbiAgICAgIH07XG5cbiAgICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeShib2R5V2l0aG91dE9mZmVyKSk7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGxldCBodHRwUmVzcG9uc2U6IFJlc3BvbnNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIGxldCB0aW1lb3V0ID0gbnVsbDtcblxuICAgICAgaHR0cFJlc3BvbnNlID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICAgICAgZmV0Y2godXJsLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgYm9keTogZm9ybURhdGFcbiAgICAgICAgfSksXG4gICAgICAgIG5ldyBQcm9taXNlPFJlc3BvbnNlPihyZXNvbHZlID0+XG4gICAgICAgICAgdGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHN1YnNjcmliZScsIG5ldyBFcnJvcihgU3Vic2NyaWJlIHRpbWVkIG91dCBbJHt1cmx9XWApKTtcbiAgICAgICAgICAgIHJlc29sdmUoe3N0YXR1czogNDA4fSBhcyBSZXNwb25zZSk7XG4gICAgICAgICAgfSwgdGhpcy5fdGltZW91dClcbiAgICAgICAgKVxuICAgICAgXSlcbiAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBzdWJzY3JpYmUnLCBlKTtcblxuICAgICAgcmV0dXJuIHtzdGF0dXM6ICdmYWlsZWQnfTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0dXM6IFN1YnNjcmliZVN0YXR1cyA9IHRoaXMubWFwSHR0cFN0YXR1c1RvU3Vic2NyaWJlU3RhdHVzKGh0dHBSZXNwb25zZSk7XG5cbiAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICByZXR1cm4ge3N0YXR1c307XG4gICAgfVxuXG4gICAgY29uc3QgZmluaXNoZWQgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHN1YnNjcmliZVJlc3BvbnNlID0gYXdhaXQgdGhpcy5jb252ZXJ0SHR0cFJlc3BvbnNlVG9TdWJzY3JpYmVSZXNwb25zZSh0ZW5hbmN5LCBodHRwUmVzcG9uc2UpO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmRlYnVnKCdHb3Qgc3Vic2NyaWJlIHJlc3BvbnNlIFslal0gaW4gWyVzXSBtcycsIHN1YnNjcmliZVJlc3BvbnNlLCBmaW5pc2hlZCAtIHN0YXJ0KTtcblxuICAgIHJldHVybiBzdWJzY3JpYmVSZXNwb25zZTtcbiAgfVxuXG4gIGFzeW5jIHB1Ymxpc2gobmFtZTogc3RyaW5nLCB0b2tlbjogRW5jb2RlZEVkZ2VUb2tlbiwgbG9jYWxTZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQsIGZhaWx1cmVDb3VudDogbnVtYmVyKTogUHJvbWlzZTxJUHVibGlzaFJlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IHRlbmFuY3kgPSBFZGdlQXV0aFBhcnNlci5wYXJzZVRva2VuKHRva2VuKS50ZW5hbmN5O1xuXG4gICAgaWYgKCF0ZW5hbmN5KSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBwYXJzZSB0b2tlbiBbJXNdJywgdG9rZW4pO1xuXG4gICAgICByZXR1cm4ge3N0YXR1czogJ3VuYXV0aG9yaXplZCd9O1xuICAgIH1cblxuICAgIGNvbnN0IHVybCA9IHRoaXMuYnVpbGRVcmwoW3RlbmFuY3ksICdzdHJlYW0nLCAncHVibGlzaCddKS50b1N0cmluZygpO1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgY29uc3QgY2xpZW50VmVyc2lvbiA9IFZlcnNpb25NYW5hZ2VyLnNka1ZlcnNpb247XG5cbiAgICBpZiAoZmFpbHVyZUNvdW50ID09PSAwICYmIGxvY2FsU2Vzc2lvbkRlc2NyaXB0aW9uKSB7XG4gICAgICBjb25zdCBib2R5V2l0aE9mZmVyOiBJUHVibGlzaFdpdGhPZmZlclJlcXVlc3QgPSB7XG4gICAgICAgIGFwaVZlcnNpb24sXG4gICAgICAgIGNsaWVudFZlcnNpb24sXG4gICAgICAgIGJlYXJlclRva2VuOiB0b2tlbixcbiAgICAgICAgZmFpbHVyZUNvdW50LFxuICAgICAgICBodHRwUm91bmRUcmlwVGltZTogdGhpcy5fcm91bmRUcmlwVGltZSxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgc2V0UmVtb3RlRGVzY3JpcHRpb246IHtcbiAgICAgICAgICBhcGlWZXJzaW9uLFxuICAgICAgICAgIHNlc3Npb25EZXNjcmlwdGlvbjoge1xuICAgICAgICAgICAgdHlwZTogbG9jYWxTZXNzaW9uRGVzY3JpcHRpb24udHlwZSxcbiAgICAgICAgICAgIHNkcDogbG9jYWxTZXNzaW9uRGVzY3JpcHRpb24uc2RwXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvbjoge1xuICAgICAgICAgIHN0cmVhbUlkOiAnJyxcbiAgICAgICAgICBhcGlWZXJzaW9uXG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeShib2R5V2l0aE9mZmVyKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGJvZHlXaXRob3V0T2ZmZXI6IElQdWJsaXNoV2l0aG91dE9mZmVyUmVxdWVzdCA9IHtcbiAgICAgICAgYXBpVmVyc2lvbixcbiAgICAgICAgY2xpZW50VmVyc2lvbixcbiAgICAgICAgYmVhcmVyVG9rZW46IHRva2VuLFxuICAgICAgICBmYWlsdXJlQ291bnQsXG4gICAgICAgIGh0dHBSb3VuZFRyaXBUaW1lOiB0aGlzLl9yb3VuZFRyaXBUaW1lLFxuICAgICAgICBuYW1lLFxuICAgICAgICBjcmVhdGVPZmZlckRlc2NyaXB0aW9uOiB7XG4gICAgICAgICAgc3RyZWFtSWQ6ICcnLFxuICAgICAgICAgIGFwaVZlcnNpb25cbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KGJvZHlXaXRob3V0T2ZmZXIpKTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgbGV0IGh0dHBSZXNwb25zZTogUmVzcG9uc2U7XG5cbiAgICB0cnkge1xuICAgICAgbGV0IHRpbWVvdXQgPSBudWxsO1xuXG4gICAgICBodHRwUmVzcG9uc2UgPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgICBmZXRjaCh1cmwsIHtcbiAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICBib2R5OiBmb3JtRGF0YVxuICAgICAgICB9KSxcbiAgICAgICAgbmV3IFByb21pc2U8UmVzcG9uc2U+KHJlc29sdmUgPT5cbiAgICAgICAgICB0aW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gcHVibGlzaCcsIG5ldyBFcnJvcihgUHVibGlzaCB0aW1lZCBvdXQgWyR7dXJsfV1gKSk7XG4gICAgICAgICAgICByZXNvbHZlKHtzdGF0dXM6IDQwOH0gYXMgUmVzcG9uc2UpO1xuICAgICAgICAgIH0sIHRoaXMuX3RpbWVvdXQpXG4gICAgICAgIClcbiAgICAgIF0pXG4gICAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgICBpZiAodGltZW91dCkge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gcHVibGlzaCcsIGUpO1xuXG4gICAgICByZXR1cm4ge3N0YXR1czogJ2ZhaWxlZCd9O1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXR1czogUHVibGlzaFN0YXR1cyA9IHRoaXMubWFwSHR0cFN0YXR1c1RvUHVibGlzaFN0YXR1cyhodHRwUmVzcG9uc2UpO1xuXG4gICAgaWYgKHN0YXR1cyAhPT0gJ29rJykge1xuICAgICAgcmV0dXJuIHtzdGF0dXN9O1xuICAgIH1cblxuICAgIGNvbnN0IGZpbmlzaGVkID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBzdWJzY3JpYmVSZXNwb25zZSA9IGF3YWl0IHRoaXMuY29udmVydEh0dHBSZXNwb25zZVRvUHVibGlzaFJlc3BvbnNlKHRlbmFuY3ksIGh0dHBSZXNwb25zZSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuZGVidWcoJ0dvdCBwdWJsaXNoIHJlc3BvbnNlIFslal0gaW4gWyVzXSBtcycsIHN1YnNjcmliZVJlc3BvbnNlLCBmaW5pc2hlZCAtIHN0YXJ0KTtcblxuICAgIHJldHVybiBzdWJzY3JpYmVSZXNwb25zZTtcbiAgfVxuXG4gIGFzeW5jIHNldFJlbW90ZURlc2NyaXB0aW9uKHN0cmVhbTogSVN0cmVhbSwgc2Vzc2lvbkRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0KTogUHJvbWlzZTxJU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCB1cmwgPSB0aGlzLmJ1aWxkVXJsKFtzdHJlYW0udGVuYW5jeSwgJ3N0cmVhbScsIHN0cmVhbS5zdHJlYW1JZCwgJ2Rlc2NyaXB0aW9uJywgJ3JlbW90ZSddKS50b1N0cmluZygpO1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgY29uc3QgYm9keTogSVNldFJlbW90ZURlc2NyaXB0aW9uUmVxdWVzdCA9IHtcbiAgICAgIGFwaVZlcnNpb24sXG4gICAgICBzaGFyZWRTZWNyZXQ6IHN0cmVhbS5zaGFyZWRTZWNyZXQsXG4gICAgICBzZXNzaW9uRGVzY3JpcHRpb246IHtcbiAgICAgICAgdHlwZTogc2Vzc2lvbkRlc2NyaXB0aW9uLnR5cGUsXG4gICAgICAgIHNkcDogc2Vzc2lvbkRlc2NyaXB0aW9uLnNkcFxuICAgICAgfVxuICAgIH07XG5cbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoYm9keSkpO1xuXG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGxldCBodHRwUmVzcG9uc2U6IFJlc3BvbnNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIGxldCB0aW1lb3V0ID0gbnVsbDtcblxuICAgICAgaHR0cFJlc3BvbnNlID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICAgICAgZmV0Y2godXJsLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgYm9keTogZm9ybURhdGFcbiAgICAgICAgfSksXG4gICAgICAgIG5ldyBQcm9taXNlPFJlc3BvbnNlPihyZXNvbHZlID0+XG4gICAgICAgICAgdGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHNldCByZW1vdGUgZGVzY3JpcHRpb24nLCBuZXcgRXJyb3IoYFNldCByZW1vdGUgZGVzY3JpcHRpb24gdGltZWQgb3V0IFske3VybH1dYCkpO1xuICAgICAgICAgICAgcmVzb2x2ZSh7c3RhdHVzOiA0MDh9IGFzIFJlc3BvbnNlKTtcbiAgICAgICAgICB9LCB0aGlzLl90aW1lb3V0KVxuICAgICAgICApXG4gICAgICBdKVxuICAgICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHNldCByZW1vdGUgZGVzY3JpcHRpb24nLCBlKTtcblxuICAgICAgcmV0dXJuIHtzdGF0dXM6ICdmYWlsZWQnfTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0dXM6IFNldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzID0gdGhpcy5tYXBIdHRwU3RhdHVzVG9TZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1cyhodHRwUmVzcG9uc2UpO1xuXG4gICAgaWYgKHN0YXR1cyAhPT0gJ29rJykge1xuICAgICAgcmV0dXJuIHtzdGF0dXN9O1xuICAgIH1cblxuICAgIGNvbnN0IGZpbmlzaGVkID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlID0gYXdhaXQgdGhpcy5jb252ZXJ0SHR0cFJlc3BvbnNlVG9TZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlKGh0dHBSZXNwb25zZSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuZGVidWcoJ0dvdCBzZXQgcmVtb3RlIGRlc2NyaXB0aW9uIHJlc3BvbnNlIFslal0gaW4gWyVzXSBtcycsIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UsIGZpbmlzaGVkIC0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2U7XG4gIH1cblxuICBhc3luYyBsaW1pdEJpdHJhdGUoXG4gICAgc3RyZWFtOiBJU3RyZWFtLFxuICAgIGVsYXBzZWRJbk1pbGxpc2Vjb25kczogbnVtYmVyLFxuICAgIGJpdHJhdGVJbkJpdHNQZXJTZWNvbmQ6IEJpdHNQZXJTZWNvbmQsXG4gICAgYml0cmF0ZVN0YXRlOiBCaXRyYXRlU3RhdGUsXG4gICAgYml0cmF0ZU1vZGU6IEJpdHJhdGVNb2RlLFxuICApOiBQcm9taXNlPElTZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVJlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IHVybCA9IHRoaXMuYnVpbGRVcmwoW3N0cmVhbS50ZW5hbmN5LCAnc3RyZWFtJywgc3RyZWFtLnN0cmVhbUlkLCAnYml0cmF0ZSddKS50b1N0cmluZygpO1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgY29uc3QgYm9keTogSVNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlID0ge1xuICAgICAgYXBpVmVyc2lvbixcbiAgICAgIHNoYXJlZFNlY3JldDogc3RyZWFtLnNoYXJlZFNlY3JldCxcbiAgICAgIGVsYXBzZWRJbk1pbGxpc2Vjb25kcyxcbiAgICAgIGJpdHJhdGVJbkJpdHNQZXJTZWNvbmQsXG4gICAgICBiaXRyYXRlU3RhdGU6IEJpdHJhdGVTdGF0ZU1hcHBpbmcuY29udmVydEJpdHJhdGVTdGF0ZVRvQml0cmF0ZVN0YXRlVHlwZShiaXRyYXRlU3RhdGUpLFxuICAgICAgYml0cmF0ZU1vZGU6IEJpdHJhdGVNb2RlTWFwcGluZy5jb252ZXJ0Qml0cmF0ZU1vZGVUb0JpdHJhdGVNb2RlVHlwZShiaXRyYXRlTW9kZSlcbiAgICB9O1xuXG4gICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KGJvZHkpKTtcblxuICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICBsZXQgaHR0cFJlc3BvbnNlOiBSZXNwb25zZTtcblxuICAgIHRyeSB7XG4gICAgICBsZXQgdGltZW91dCA9IG51bGw7XG5cbiAgICAgIGh0dHBSZXNwb25zZSA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICAgIGZldGNoKHVybCwge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIGJvZHk6IGZvcm1EYXRhXG4gICAgICAgIH0pLFxuICAgICAgICBuZXcgUHJvbWlzZTxSZXNwb25zZT4ocmVzb2x2ZSA9PlxuICAgICAgICAgIHRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBzZXQgbGltaXQgYml0cmF0ZSB0aW1lZCcsIG5ldyBFcnJvcihgU2V0IGxpbWl0IGJpdHJhdGUgdGltZWQgb3V0IFske3VybH1dYCkpO1xuICAgICAgICAgICAgcmVzb2x2ZSh7c3RhdHVzOiA0MDh9IGFzIFJlc3BvbnNlKTtcbiAgICAgICAgICB9LCB0aGlzLl90aW1lb3V0KVxuICAgICAgICApXG4gICAgICBdKVxuICAgICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHNldCBsaW1pdCBiaXRyYXRlIHRpbWVkJywgZSk7XG5cbiAgICAgIHJldHVybiB7c3RhdHVzOiAnZmFpbGVkJ307XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdHVzOiBTZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVN0YXR1cyA9IHRoaXMubWFwSHR0cFN0YXR1c1RvU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVTdGF0dXMoaHR0cFJlc3BvbnNlKTtcbiAgICBjb25zdCBmaW5pc2hlZCA9IERhdGUubm93KCk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnR290IHNldCBsaW1pdCBiaXRyYXRlIHJlc3BvbnNlIFslc10gaW4gWyVzXSBtcycsIHN0YXR1cywgZmluaXNoZWQgLSBzdGFydCk7XG5cbiAgICByZXR1cm4ge3N0YXR1c307XG4gIH1cblxuICBhc3luYyBhZGRJY2VDYW5kaWRhdGVzKHN0cmVhbTogSVN0cmVhbSwgY2FuZGlkYXRlczogUlRDSWNlQ2FuZGlkYXRlW10sIGRpc2NvdmVyeUNvbXBsZXRlZDogYm9vbGVhbiwgb3B0aW9uczogc3RyaW5nW10gPSBbXSk6IFByb21pc2U8SUFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCB1cmwgPSB0aGlzLmJ1aWxkVXJsKFtzdHJlYW0udGVuYW5jeSwgJ3N0cmVhbScsIHN0cmVhbS5zdHJlYW1JZCwgJ2ljZScsICdjYW5kaWRhdGVzJ10pLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBjb25zdCBib2R5OiBJQWRkSWNlQ2FuZGlkYXRlc1JlcXVlc3QgPSB7XG4gICAgICBhcGlWZXJzaW9uLFxuICAgICAgc2hhcmVkU2VjcmV0OiBzdHJlYW0uc2hhcmVkU2VjcmV0LFxuICAgICAgY2FuZGlkYXRlcyxcbiAgICAgIGRpc2NvdmVyeUNvbXBsZXRlZCxcbiAgICAgIG9wdGlvbnNcbiAgICB9O1xuXG4gICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KGJvZHkpKTtcblxuICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICBsZXQgaHR0cFJlc3BvbnNlOiBSZXNwb25zZTtcblxuICAgIHRyeSB7XG4gICAgICBsZXQgdGltZW91dCA9IG51bGw7XG5cbiAgICAgIGh0dHBSZXNwb25zZSA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICAgIGZldGNoKHVybCwge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIGJvZHk6IGZvcm1EYXRhXG4gICAgICAgIH0pLFxuICAgICAgICBuZXcgUHJvbWlzZTxSZXNwb25zZT4ocmVzb2x2ZSA9PlxuICAgICAgICAgIHRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBhZGQgaWNlIGNhbmRpZGF0ZXMnLCBuZXcgRXJyb3IoYEFkZCBpY2UgY2FuZGlkYXRlcyB0aW1lZCBvdXQgWyR7dXJsfV1gKSk7XG4gICAgICAgICAgICByZXNvbHZlKHtzdGF0dXM6IDQwOH0gYXMgUmVzcG9uc2UpO1xuICAgICAgICAgIH0sIHRoaXMuX3RpbWVvdXQpXG4gICAgICAgIClcbiAgICAgIF0pXG4gICAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgICBpZiAodGltZW91dCkge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gYWRkIGljZSBjYW5kaWRhdGVzJywgZSk7XG5cbiAgICAgIHJldHVybiB7c3RhdHVzOiAnZmFpbGVkJ307XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdHVzOiBBZGRJY2VDYW5kaWRhdGVzU3RhdHVzID0gdGhpcy5tYXBIdHRwU3RhdHVzVG9BZGRJY2VDYW5kaWRhdGVzU3RhdHVzKGh0dHBSZXNwb25zZSk7XG5cbiAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICByZXR1cm4ge3N0YXR1c307XG4gICAgfVxuXG4gICAgY29uc3QgZmluaXNoZWQgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IGFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZSA9IGF3YWl0IHRoaXMuY29udmVydEh0dHBSZXNwb25zZVRvQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlKGh0dHBSZXNwb25zZSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnR290IGFkZCBJQ0UgY2FuZGlkYXRlcyByZXNwb25zZSBbJWpdIGluIFslc10gbXMnLCBhZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2UsIGZpbmlzaGVkIC0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIGFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZTtcbiAgfVxuXG4gIGFzeW5jIGRlc3Ryb3lTdHJlYW0oc3RyZWFtOiBJU3RyZWFtLCByZWFzb246IHN0cmluZyk6IFByb21pc2U8SURlc3Ryb3lTdHJlYW1SZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCB1cmwgPSB0aGlzLmJ1aWxkVXJsKFtzdHJlYW0udGVuYW5jeSwgJ3N0cmVhbScsIHN0cmVhbS5zdHJlYW1JZCwgJ2Rlc3Ryb3knXSkudG9TdHJpbmcoKTtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgIGNvbnN0IGJvZHk6IElEZXN0cm95U3RyZWFtUmVxdWVzdCA9IHtcbiAgICAgIGFwaVZlcnNpb24sXG4gICAgICBzaGFyZWRTZWNyZXQ6IHN0cmVhbS5zaGFyZWRTZWNyZXQsXG4gICAgICByZWFzb24sXG4gICAgICBvcHRpb25zOiBbXVxuICAgIH07XG5cbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoYm9keSkpO1xuXG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGxldCBodHRwUmVzcG9uc2U6IFJlc3BvbnNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIGxldCB0aW1lb3V0ID0gbnVsbDtcblxuICAgICAgaHR0cFJlc3BvbnNlID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICAgICAgZmV0Y2godXJsLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgYm9keTogZm9ybURhdGEsXG4gICAgICAgICAgY2FjaGU6ICduby1jYWNoZSdcbiAgICAgICAgfSksXG4gICAgICAgIG5ldyBQcm9taXNlPFJlc3BvbnNlPihyZXNvbHZlID0+XG4gICAgICAgICAgdGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHN1YnNjcmliZScsIG5ldyBFcnJvcihgRGVsZXRlIHN0cmVhbSB0aW1lZCBvdXQgWyR7dXJsfV1gKSk7XG4gICAgICAgICAgICByZXNvbHZlKHtzdGF0dXM6IDQwOH0gYXMgUmVzcG9uc2UpO1xuICAgICAgICAgIH0sIHRoaXMuX3RpbWVvdXQpXG4gICAgICAgIClcbiAgICAgIF0pXG4gICAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgICBpZiAodGltZW91dCkge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gZGVsZXRlIHN0cmVhbScsIGUpO1xuXG4gICAgICByZXR1cm4ge3N0YXR1czogJ2ZhaWxlZCd9O1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXR1czogRGVzdHJveVN0cmVhbVN0YXR1cyA9IHRoaXMubWFwSHR0cFN0YXR1c1RvU2V0RGVzdHJveVN0cmVhbVN0YXR1cyhodHRwUmVzcG9uc2UpO1xuXG4gICAgaWYgKHN0YXR1cyAhPT0gJ29rJykge1xuICAgICAgcmV0dXJuIHtzdGF0dXN9O1xuICAgIH1cblxuICAgIGNvbnN0IGZpbmlzaGVkID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBkZXN0cm95U3RyZWFtUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNvbnZlcnRIdHRwUmVzcG9uc2VUb0Rlc3Ryb3lTdHJlYW1SZXNwb25zZShodHRwUmVzcG9uc2UpO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0dvdCBkZXN0cm95IHN0cmVhbSByZXNwb25zZSBbJWpdIGluIFslc10gbXMnLCBkZXN0cm95U3RyZWFtUmVzcG9uc2UsIGZpbmlzaGVkIC0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIGRlc3Ryb3lTdHJlYW1SZXNwb25zZTtcbiAgfVxuXG4gIGFzeW5jIGRlc3Ryb3lTdHJlYW1PblVubW91bnQoc3RyZWFtOiBJU3RyZWFtLCByZWFzb246IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghbmF2aWdhdG9yPy5zZW5kQmVhY29uKSB7XG4gICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5kZXN0cm95U3RyZWFtKHN0cmVhbSwgcmVhc29uKTtcbiAgICB9XG5cbiAgICBjb25zdCB1cmwgPSB0aGlzLmJ1aWxkVXJsKFtzdHJlYW0udGVuYW5jeSwgJ3N0cmVhbScsIHN0cmVhbS5zdHJlYW1JZCwgJ2Rlc3Ryb3knXSkudG9TdHJpbmcoKTtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgIGNvbnN0IGJvZHk6IElEZXN0cm95U3RyZWFtUmVxdWVzdCA9IHtcbiAgICAgIGFwaVZlcnNpb24sXG4gICAgICBzaGFyZWRTZWNyZXQ6IHN0cmVhbS5zaGFyZWRTZWNyZXQsXG4gICAgICByZWFzb24sXG4gICAgICBvcHRpb25zOiBbXVxuICAgIH07XG5cbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoYm9keSkpO1xuXG4gICAgbmF2aWdhdG9yLnNlbmRCZWFjb24odXJsLCBmb3JtRGF0YSk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkVXJsKHBhdGg6IHN0cmluZ1tdKTogVVJMIHtcbiAgICBjb25zdCB1cmkgPSBuZXcgVVJMKHRoaXMuX3VyaSk7XG4gICAgY29uc3QgcGF0aEFzQXJyYXkgPSB1cmkucGF0aG5hbWUuc3BsaXQoJy8nKTtcblxuICAgIHBhdGhBc0FycmF5Lmxlbmd0aCA9IHBhdGhBc0FycmF5Lmxlbmd0aCAtIDE7XG5cbiAgICB1cmkucGF0aG5hbWUgPSBwYXRoQXNBcnJheS5jb25jYXQoLi4ucGF0aCkuam9pbignLycpO1xuXG4gICAgcmV0dXJuIHVyaTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRQaW5nVXJsKCk6IHN0cmluZyB7XG4gICAgY29uc3QgdXJpID0gbmV3IFVSTCh0aGlzLl91cmkpO1xuICAgIGNvbnN0IHNka1ZlcnNpb24gPSBWZXJzaW9uTWFuYWdlci5zZGtWZXJzaW9uO1xuICAgIGNvbnN0IGludGVudGlvbnMgPSBQYXJhbWV0ZXJzLmRpc2NvdmVyeVBhcmFtZXRlcnMuaW50ZW50aW9ucztcblxuICAgIHVyaS5zZWFyY2hQYXJhbXMuc2V0KCd0eXBlJywgJ2h0dHAnKTtcbiAgICB1cmkuc2VhcmNoUGFyYW1zLnNldCgndmVyc2lvbicsIHNka1ZlcnNpb24pO1xuICAgIHVyaS5zZWFyY2hQYXJhbXMuc2V0KCdpbnRlbnRpb25zJywgaW50ZW50aW9ucyk7XG4gICAgdXJpLnNlYXJjaFBhcmFtcy5zZXQoJ18nLCBgJHtEYXRlLm5vdygpfWApO1xuXG4gICAgcmV0dXJuIHVyaS50b1N0cmluZygpO1xuICB9XG5cbiAgcHJpdmF0ZSBtYXBIdHRwU3RhdHVzVG9QdWJsaXNoU3RhdHVzKHJlc3BvbnNlOiBSZXNwb25zZSk6IFB1Ymxpc2hTdGF0dXMge1xuICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHJlc3BvbnNlLnN0YXR1cykge1xuICAgICAgY2FzZSAyMDA6XG4gICAgICAgIHJldHVybiAnb2snO1xuICAgICAgY2FzZSA0MDE6XG4gICAgICAgIHJldHVybiAndW5hdXRob3JpemVkJztcbiAgICAgIGNhc2UgNDAyOlxuICAgICAgICByZXR1cm4gJ2dlby1yZXN0cmljdGVkJztcbiAgICAgIGNhc2UgNDAzOlxuICAgICAgICByZXR1cm4gJ2dlby1ibG9ja2VkJztcbiAgICAgIGNhc2UgNDA2OlxuICAgICAgICByZXR1cm4gJ21pc3NpbmctY2hhbm5lbC1vci1yb29tLWlkJztcbiAgICAgIGNhc2UgNDA4OlxuICAgICAgICByZXR1cm4gJ3RpbWVvdXQnO1xuICAgICAgY2FzZSA0MDk6XG4gICAgICAgIHJldHVybiAncG9ydC1pbi1yYW5nZS1ub3QtZm91bmQnO1xuICAgICAgY2FzZSA0MTU6XG4gICAgICAgIHJldHVybiAnZm9yYmlkZGVuLXRhZyc7XG4gICAgICBjYXNlIDUwMzpcbiAgICAgICAgcmV0dXJuICdjYXBhY2l0eSc7XG4gICAgICBjYXNlIDUwNDpcbiAgICAgICAgcmV0dXJuICdyYXRlLWxpbWl0ZWQnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbWFwSHR0cFN0YXR1c1RvU3Vic2NyaWJlU3RhdHVzKHJlc3BvbnNlOiBSZXNwb25zZSk6IFN1YnNjcmliZVN0YXR1cyB7XG4gICAgaWYgKCFyZXNwb25zZSkge1xuICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cblxuICAgIHN3aXRjaCAocmVzcG9uc2Uuc3RhdHVzKSB7XG4gICAgICBjYXNlIDIwMDpcbiAgICAgICAgcmV0dXJuICdvayc7XG4gICAgICBjYXNlIDQwMTpcbiAgICAgICAgcmV0dXJuICd1bmF1dGhvcml6ZWQnO1xuICAgICAgY2FzZSA0MDI6XG4gICAgICAgIHJldHVybiAnZ2VvLXJlc3RyaWN0ZWQnO1xuICAgICAgY2FzZSA0MDM6XG4gICAgICAgIHJldHVybiAnZ2VvLWJsb2NrZWQnO1xuICAgICAgY2FzZSA0MDg6XG4gICAgICAgIHJldHVybiAndGltZW91dCc7XG4gICAgICBjYXNlIDQwOTpcbiAgICAgICAgcmV0dXJuICdwb3J0LWluLXJhbmdlLW5vdC1mb3VuZCc7XG4gICAgICBjYXNlIDQxNTpcbiAgICAgICAgcmV0dXJuICdmb3JiaWRkZW4tdGFnJztcbiAgICAgIGNhc2UgNTAzOlxuICAgICAgICByZXR1cm4gJ2NhcGFjaXR5JztcbiAgICAgIGNhc2UgNTA0OlxuICAgICAgICByZXR1cm4gJ3JhdGUtbGltaXRlZCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBtYXBIdHRwU3RhdHVzVG9TZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1cyhyZXNwb25zZTogUmVzcG9uc2UpOiBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1cyB7XG4gICAgaWYgKCFyZXNwb25zZSkge1xuICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cblxuICAgIHN3aXRjaCAocmVzcG9uc2Uuc3RhdHVzKSB7XG4gICAgICBjYXNlIDIwMDpcbiAgICAgICAgcmV0dXJuICdvayc7XG4gICAgICBjYXNlIDQwMTpcbiAgICAgICAgcmV0dXJuICd1bmF1dGhvcml6ZWQnO1xuICAgICAgY2FzZSA0MDg6XG4gICAgICAgIHJldHVybiAndGltZW91dCc7XG4gICAgICBjYXNlIDUwMzpcbiAgICAgICAgcmV0dXJuICdjYXBhY2l0eSc7XG4gICAgICBjYXNlIDUwNDpcbiAgICAgICAgcmV0dXJuICdyYXRlLWxpbWl0ZWQnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbWFwSHR0cFN0YXR1c1RvU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVTdGF0dXMocmVzcG9uc2U6IFJlc3BvbnNlKTogU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVTdGF0dXMge1xuICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHJlc3BvbnNlLnN0YXR1cykge1xuICAgICAgY2FzZSAyMDA6XG4gICAgICAgIHJldHVybiAnb2snO1xuICAgICAgY2FzZSA0MDE6XG4gICAgICAgIHJldHVybiAndW5hdXRob3JpemVkJztcbiAgICAgIGNhc2UgNDA4OlxuICAgICAgICByZXR1cm4gJ3RpbWVvdXQnO1xuICAgICAgY2FzZSA1MDM6XG4gICAgICAgIHJldHVybiAnY2FwYWNpdHknO1xuICAgICAgY2FzZSA1MDQ6XG4gICAgICAgIHJldHVybiAncmF0ZS1saW1pdGVkJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1hcEh0dHBTdGF0dXNUb0FkZEljZUNhbmRpZGF0ZXNTdGF0dXMocmVzcG9uc2U6IFJlc3BvbnNlKTogQWRkSWNlQ2FuZGlkYXRlc1N0YXR1cyB7XG4gICAgaWYgKCFyZXNwb25zZSkge1xuICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cblxuICAgIHN3aXRjaCAocmVzcG9uc2Uuc3RhdHVzKSB7XG4gICAgICBjYXNlIDIwMDpcbiAgICAgICAgcmV0dXJuICdvayc7XG4gICAgICBjYXNlIDQwMTpcbiAgICAgICAgcmV0dXJuICd1bmF1dGhvcml6ZWQnO1xuICAgICAgY2FzZSA0MDg6XG4gICAgICAgIHJldHVybiAndGltZW91dCc7XG4gICAgICBjYXNlIDUwMzpcbiAgICAgICAgcmV0dXJuICdjYXBhY2l0eSc7XG4gICAgICBjYXNlIDUwNDpcbiAgICAgICAgcmV0dXJuICdyYXRlLWxpbWl0ZWQnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbWFwSHR0cFN0YXR1c1RvU2V0RGVzdHJveVN0cmVhbVN0YXR1cyhyZXNwb25zZTogUmVzcG9uc2UpOiBEZXN0cm95U3RyZWFtU3RhdHVzIHtcbiAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuXG4gICAgc3dpdGNoIChyZXNwb25zZS5zdGF0dXMpIHtcbiAgICAgIGNhc2UgMjAwOlxuICAgICAgICByZXR1cm4gJ29rJztcbiAgICAgIGNhc2UgNDAxOlxuICAgICAgICByZXR1cm4gJ3VuYXV0aG9yaXplZCc7XG4gICAgICBjYXNlIDQwODpcbiAgICAgICAgcmV0dXJuICd0aW1lb3V0JztcbiAgICAgIGNhc2UgNTAzOlxuICAgICAgICByZXR1cm4gJ2NhcGFjaXR5JztcbiAgICAgIGNhc2UgNTA0OlxuICAgICAgICByZXR1cm4gJ3JhdGUtbGltaXRlZCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjb252ZXJ0SHR0cFJlc3BvbnNlVG9TdWJzY3JpYmVSZXNwb25zZSh0ZW5hbmN5OiBzdHJpbmcsIHJlc3BvbnNlOiBSZXNwb25zZSk6IFByb21pc2U8SVN1YnNjcmliZVJlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCkgYXMgSVN1YnNjcmliZVJlc3BvbnNlO1xuICAgIGNvbnN0IHN1YnNjcmliZVJlc3BvbnNlOiBJU3Vic2NyaWJlUmVzcG9uc2VJbml0ID0ge3N0YXR1czogZGF0YS5zdGF0dXN9O1xuXG4gICAgc3Vic2NyaWJlUmVzcG9uc2Uuc3RyZWFtID0ge1xuICAgICAgdGVuYW5jeSxcbiAgICAgIHN0cmVhbUlkOiBkYXRhLnN0cmVhbUlkLFxuICAgICAgc2hhcmVkU2VjcmV0OiBkYXRhLnNoYXJlZFNlY3JldFxuICAgIH07XG5cbiAgICBzdWJzY3JpYmVSZXNwb25zZS5sYWcgPSBkYXRhLmxhZztcblxuICAgIGlmIChkYXRhKSB7XG4gICAgICBpZiAoZGF0YS5ydGNDb25maWd1cmF0aW9uKSB7XG4gICAgICAgIHN1YnNjcmliZVJlc3BvbnNlLnJ0Y0NvbmZpZ3VyYXRpb24gPSB0aGlzLmNvbnZlcnRJUnRjQ29uZmlndXJhdGlvblRvUlRDQ29uZmlndXJhdGlvbihkYXRhLnJ0Y0NvbmZpZ3VyYXRpb24pO1xuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YS5zZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlICYmIGRhdGEuc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24pIHtcbiAgICAgICAgc3Vic2NyaWJlUmVzcG9uc2Uuc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSA9IHtzZXNzaW9uRGVzY3JpcHRpb246IGRhdGEuc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb259O1xuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YS5jcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlICYmIGRhdGEuY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24pIHtcbiAgICAgICAgc3Vic2NyaWJlUmVzcG9uc2UuY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZSA9IHtzZXNzaW9uRGVzY3JpcHRpb246IGRhdGEuY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb259O1xuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YS5jcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UgJiYgZGF0YS5jcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKSB7XG4gICAgICAgIHN1YnNjcmliZVJlc3BvbnNlLmNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSA9IHtzZXNzaW9uRGVzY3JpcHRpb246IGRhdGEuY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbn07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1YnNjcmliZVJlc3BvbnNlO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjb252ZXJ0SHR0cFJlc3BvbnNlVG9QdWJsaXNoUmVzcG9uc2UodGVuYW5jeTogc3RyaW5nLCByZXNwb25zZTogUmVzcG9uc2UpOiBQcm9taXNlPElQdWJsaXNoUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKSBhcyBJUHVibGlzaFJlc3BvbnNlO1xuICAgIGNvbnN0IHB1Ymxpc2hSZXNwb25zZTogSVB1Ymxpc2hSZXNwb25zZUluaXQgPSB7c3RhdHVzOiBkYXRhLnN0YXR1c307XG5cbiAgICBwdWJsaXNoUmVzcG9uc2Uuc3RyZWFtID0ge1xuICAgICAgdGVuYW5jeSxcbiAgICAgIHN0cmVhbUlkOiBkYXRhLnN0cmVhbUlkLFxuICAgICAgc2hhcmVkU2VjcmV0OiBkYXRhLnNoYXJlZFNlY3JldFxuICAgIH07XG5cbiAgICBpZiAoZGF0YSkge1xuICAgICAgaWYgKGRhdGEucnRjQ29uZmlndXJhdGlvbikge1xuICAgICAgICBwdWJsaXNoUmVzcG9uc2UucnRjQ29uZmlndXJhdGlvbiA9IHRoaXMuY29udmVydElSdGNDb25maWd1cmF0aW9uVG9SVENDb25maWd1cmF0aW9uKGRhdGEucnRjQ29uZmlndXJhdGlvbik7XG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhLnNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UgJiYgZGF0YS5zZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbikge1xuICAgICAgICBwdWJsaXNoUmVzcG9uc2Uuc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSA9IHtzZXNzaW9uRGVzY3JpcHRpb246IGRhdGEuc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb259O1xuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YS5jcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlICYmIGRhdGEuY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24pIHtcbiAgICAgICAgcHVibGlzaFJlc3BvbnNlLmNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2UgPSB7c2Vzc2lvbkRlc2NyaXB0aW9uOiBkYXRhLmNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9ufTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRhdGEuY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlICYmIGRhdGEuY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbikge1xuICAgICAgICBwdWJsaXNoUmVzcG9uc2UuY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlID0ge3Nlc3Npb25EZXNjcmlwdGlvbjogZGF0YS5jcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9ufTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcHVibGlzaFJlc3BvbnNlO1xuICB9XG5cbiAgcHJpdmF0ZSBjb252ZXJ0SVJ0Y0NvbmZpZ3VyYXRpb25Ub1JUQ0NvbmZpZ3VyYXRpb24oY29uZmlndXJhdGlvbjogUlRDQ29uZmlndXJhdGlvbik6IFJUQ0NvbmZpZ3VyYXRpb24ge1xuICAgIGNvbnN0IHJ0Y0NvbmZpZ3VyYXRpb246IFJUQ0NvbmZpZ3VyYXRpb24gPSB7aWNlU2VydmVyczogW119O1xuXG4gICAgaWYgKGNvbmZpZ3VyYXRpb24uYnVuZGxlUG9saWN5KSB7XG4gICAgICBydGNDb25maWd1cmF0aW9uLmJ1bmRsZVBvbGljeSA9IGNvbmZpZ3VyYXRpb24uYnVuZGxlUG9saWN5O1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY29uZmlndXJhdGlvbi5pY2VDYW5kaWRhdGVQb29sU2l6ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgIHJ0Y0NvbmZpZ3VyYXRpb24uaWNlQ2FuZGlkYXRlUG9vbFNpemUgPSBjb25maWd1cmF0aW9uLmljZUNhbmRpZGF0ZVBvb2xTaXplO1xuICAgIH1cblxuICAgIGlmIChjb25maWd1cmF0aW9uLmljZVNlcnZlcnMpIHtcbiAgICAgIGNvbnN0IGljZVNlcnZlcnM6IFJUQ0ljZVNlcnZlcltdID0gW107XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGljZVNlcnZlcnMucHVzaCh7XG4gICAgICAgICAgdXJsczogY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzW2ldLnVybHMsXG4gICAgICAgICAgdXNlcm5hbWU6IGNvbmZpZ3VyYXRpb24uaWNlU2VydmVyc1tpXS51c2VybmFtZSxcbiAgICAgICAgICBjcmVkZW50aWFsOiBjb25maWd1cmF0aW9uLmljZVNlcnZlcnNbaV0uY3JlZGVudGlhbFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcnRjQ29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzID0gaWNlU2VydmVycztcbiAgICB9XG5cbiAgICBpZiAoY29uZmlndXJhdGlvbi5pY2VUcmFuc3BvcnRQb2xpY3kpIHtcbiAgICAgIHJ0Y0NvbmZpZ3VyYXRpb24uaWNlVHJhbnNwb3J0UG9saWN5ID0gY29uZmlndXJhdGlvbi5pY2VUcmFuc3BvcnRQb2xpY3k7XG4gICAgfVxuXG4gICAgaWYgKGNvbmZpZ3VyYXRpb24ucnRjcE11eFBvbGljeSkge1xuICAgICAgcnRjQ29uZmlndXJhdGlvbi5ydGNwTXV4UG9saWN5ID0gY29uZmlndXJhdGlvbi5ydGNwTXV4UG9saWN5O1xuICAgIH1cblxuICAgIHJldHVybiBydGNDb25maWd1cmF0aW9uO1xuICB9XG4gIHByaXZhdGUgYXN5bmMgY29udmVydEh0dHBSZXNwb25zZVRvU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZShyZXNwb25zZTogUmVzcG9uc2UpOiBQcm9taXNlPElTZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCkgYXMgSVNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2U7XG4gICAgY29uc3Qgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZTogSVNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2VJbml0ID0ge3N0YXR1czogZGF0YS5zdGF0dXN9O1xuXG4gICAgaWYgKGRhdGEgJiYgZGF0YS5zZXNzaW9uRGVzY3JpcHRpb24pIHtcbiAgICAgIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uID0gZGF0YS5zZXNzaW9uRGVzY3JpcHRpb247XG4gICAgfVxuXG4gICAgcmV0dXJuIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2U7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNvbnZlcnRIdHRwUmVzcG9uc2VUb0FkZEljZUNhbmRpZGF0ZXNSZXNwb25zZShyZXNwb25zZTogUmVzcG9uc2UpOiBQcm9taXNlPElBZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKSBhcyBJQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlO1xuICAgIGNvbnN0IGFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZTogSUFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZUluaXQgPSB7XG4gICAgICBzdGF0dXM6IGRhdGEuc3RhdHVzLFxuICAgICAgb3B0aW9uczogW11cbiAgICB9O1xuXG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIGlmIChkYXRhLm9wdGlvbnMpIHtcbiAgICAgICAgYWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlLm9wdGlvbnMgPSBkYXRhLm9wdGlvbnM7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY29udmVydEh0dHBSZXNwb25zZVRvRGVzdHJveVN0cmVhbVJlc3BvbnNlKHJlc3BvbnNlOiBSZXNwb25zZSk6IFByb21pc2U8SURlc3Ryb3lTdHJlYW1SZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpIGFzIElEZXN0cm95U3RyZWFtUmVzcG9uc2U7XG4gICAgY29uc3QgZGVzdHJveVN0cmVhbTogSURlc3Ryb3lTdHJlYW1SZXNwb25zZUluaXQgPSB7c3RhdHVzOiBkYXRhLnN0YXR1c307XG5cbiAgICByZXR1cm4gZGVzdHJveVN0cmVhbTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uLy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuaW1wb3J0IFJlYWRPbmx5U3ViamVjdCBmcm9tICcuLi8uLi9yeC9SZWFkT25seVN1YmplY3QnO1xuaW1wb3J0IEV4cG9uZW50aWFsQmFja29mZiBmcm9tICcuLi8uLi90aW1lL0V4cG9uZW50aWFsQmFja29mZic7XG5pbXBvcnQgRW5kUG9pbnQsIHtJU3RyZWFtfSBmcm9tICcuLi9kaXNjb3ZlcnkvRW5kUG9pbnQnO1xuaW1wb3J0IFNESyBmcm9tICcuLi9TREsnO1xuaW1wb3J0IEdhcmJhZ2VDb2xsZWN0b3JNYW5hZ2VyIGZyb20gJy4uLy4uL2RvbS9HYXJiYWdlQ29sbGVjdG9yTWFuYWdlcic7XG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uIGZyb20gJy4uLy4uL3J0Yy9JUGVlckNvbm5lY3Rpb24nO1xuaW1wb3J0IFB1Ymxpc2hlclN0YXRlIGZyb20gJy4vUHVibGlzaGVyU3RhdGUnO1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uLy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuaW1wb3J0IERpc3Bvc2FibGUgZnJvbSAnLi4vLi4vbGFuZy9EaXNwb3NhYmxlJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgU2Vzc2lvblRlbGVtZXRyeSBmcm9tICcuLi8uLi92aWRlby9TZXNzaW9uVGVsZW1ldHJ5JztcbmltcG9ydCB7SVJ0Y01vbml0b3JTdGF0aXN0aWN9IGZyb20gJy4uLy4uL3J0Yy9SdGNDb25uZWN0aW9uTW9uaXRvcic7XG5pbXBvcnQgRWRnZUF1dGhQYXJzZXIgZnJvbSAnLi4vLi4vZWRnZUF1dGgvRWRnZUF1dGhQYXJzZXInO1xuaW1wb3J0IHtFbmNvZGVkRWRnZVRva2VufSBmcm9tICcuLi8uLi9lZGdlQXV0aC9FbmNvZGVkRWRnZVRva2VuJztcblxuaW1wb3J0IFRva2VuQ29udGV4dCBmcm9tICcuLi9jb250ZXh0L1Rva2VuQ29udGV4dCc7XG5pbXBvcnQgUHVibGlzaGVyQ29udGV4dCBmcm9tICcuL1B1Ymxpc2hlckNvbnRleHQnO1xuaW1wb3J0IFBlZXJDb25uZWN0aW9uQ29udGV4dCBmcm9tICcuLi9jb250ZXh0L1BlZXJDb25uZWN0aW9uQ29udGV4dCc7XG5pbXBvcnQgU3RhdGVDb250ZXh0IGZyb20gJy4uL2NvbnRleHQvU3RhdGVDb250ZXh0JztcbmltcG9ydCBEaXNjb3ZlcnkgZnJvbSAnLi4vZGlzY292ZXJ5L0Rpc2NvdmVyeSc7XG5pbXBvcnQgRGlzY292ZXJ5VXJpIGZyb20gJy4uL2Rpc2NvdmVyeS9EaXNjb3ZlcnlVcmknO1xuaW1wb3J0IE1ldHJpY3NGYWN0b3J5IGZyb20gJy4uLy4uL21ldHJpY3MvTWV0cmljc0ZhY3RvcnknO1xuaW1wb3J0IE1ldHJpY3NTZXJ2aWNlIGZyb20gJy4uLy4uL21ldHJpY3MvTWV0cmljc1NlcnZpY2UnO1xuaW1wb3J0IFJlYWxUaW1lUHVibGlzaGVyIGZyb20gJy4vUmVhbFRpbWVQdWJsaXNoZXInO1xuaW1wb3J0IEZlYXR1cmVFbmFibGVtZW50IGZyb20gJy4uLy4uL2Vudmlyb25tZW50L0ZlYXR1cmVFbmFibGVtZW50JztcblxuY29uc3QgZGVmYXVsdFN0cmVhbVRlcm1pbmF0aW9uUmVhc29uID0gJ2NsaWVudDp0ZXJtaW5hdGlvbic7XG5jb25zdCBmYWlsdXJlQ291bnRDbGVhblVwSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcyA9IDMwMDA7XG5jb25zdCBzdGFuZGJ5UG9sbGluZ0ludGVydmFsSW5NaWxsaXNlY29uZHMgPSAxNTAwMDtcbmNvbnN0IG9uZUhvdXJJbk1pbGxpc2Vjb25kcyA9IDM2MDAgKiAxMDAwO1xuY29uc3QgbWF4UmVjb25uZWN0aW5nQXR0ZW1wdHNJbnRlcnZhbEluTWlsbGlzZWNvbmRzID0gMiAqIG9uZUhvdXJJbk1pbGxpc2Vjb25kcztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUHVibGlzaGVyIGltcGxlbWVudHMgSURpc3Bvc2FibGUge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignUHVibGlzaGVyJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3Rva2VuQ29udGV4dDogVG9rZW5Db250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9wdWJsaXNoZXJDb250ZXh0OiBQdWJsaXNoZXJDb250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9wZWVyQ29ubmVjdGlvbkNvbnRleHQ6IFBlZXJDb25uZWN0aW9uQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfc3RhdGVDb250ZXh0OiBTdGF0ZUNvbnRleHQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2V4cG9uZW50aWFsQmFja29mZjogRXhwb25lbnRpYWxCYWNrb2ZmO1xuICBwcml2YXRlIHJlYWRvbmx5IF9wdWJsaXNoZXJTdGFydFRpbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlUb2tlbjogUmVhZE9ubHlTdWJqZWN0PEVuY29kZWRFZGdlVG9rZW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVBlZXJDb25uZWN0aW9uOiBSZWFkT25seVN1YmplY3Q8SVBlZXJDb25uZWN0aW9uPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlTdGF0ZTogUmVhZE9ubHlTdWJqZWN0PFB1Ymxpc2hlclN0YXRlPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlUb2tlbkV4cGlyaW5nOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5QXV0aG9yaXplZDogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seU9ubGluZTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUxvYWRpbmc6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlQdWJsaXNoaW5nOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5U3RhbmRieTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVN0b3BwZWQ6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlGYWlsdXJlQ291bnQ6IFJlYWRPbmx5U3ViamVjdDxudW1iZXI+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUVuZFBvaW50OiBSZWFkT25seVN1YmplY3Q8RW5kUG9pbnQ+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVN0cmVhbTogUmVhZE9ubHlTdWJqZWN0PElTdHJlYW0+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVJ0Y1N0YXRpc3RpY3M6IFJlYWRPbmx5U3ViamVjdDxJUnRjTW9uaXRvclN0YXRpc3RpYz47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5TWVkaWFTdHJlYW06IFJlYWRPbmx5U3ViamVjdDxNZWRpYVN0cmVhbT47XG5cbiAgcHJpdmF0ZSBfbWV0cmljc1NlcnZpY2U6IE1ldHJpY3NTZXJ2aWNlO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zZXNzaW9uVGVsZW1ldHJ5OiBTZXNzaW9uVGVsZW1ldHJ5O1xuXG4gIGNvbnN0cnVjdG9yKG1lZGlhU3RyZWFtOiBNZWRpYVN0cmVhbSwgdG9rZW46IEVuY29kZWRFZGdlVG9rZW4sIG5hbWU/OiBzdHJpbmcpIHtcbiAgICB0aGlzLl90b2tlbkNvbnRleHQgPSBuZXcgVG9rZW5Db250ZXh0KHRva2VuKTtcbiAgICB0aGlzLl9wdWJsaXNoZXJDb250ZXh0ID0gbmV3IFB1Ymxpc2hlckNvbnRleHQobmFtZSk7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0ID0gbmV3IFBlZXJDb25uZWN0aW9uQ29udGV4dCgpO1xuICAgIHRoaXMuX3N0YXRlQ29udGV4dCA9IG5ldyBTdGF0ZUNvbnRleHQoKTtcbiAgICB0aGlzLl9leHBvbmVudGlhbEJhY2tvZmYgPSBuZXcgRXhwb25lbnRpYWxCYWNrb2ZmKCk7XG4gICAgdGhpcy5fcHVibGlzaGVyU3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICB0aGlzLl9yZWFkT25seVRva2VuID0gbmV3IFJlYWRPbmx5U3ViamVjdDxzdHJpbmc+KHRoaXMuX3Rva2VuQ29udGV4dC50b2tlbik7XG4gICAgdGhpcy5fcmVhZE9ubHlQZWVyQ29ubmVjdGlvbiA9IG5ldyBSZWFkT25seVN1YmplY3Q8SVBlZXJDb25uZWN0aW9uPih0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb24pO1xuICAgIHRoaXMuX3JlYWRPbmx5U3RhdGUgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PFB1Ymxpc2hlclN0YXRlPih0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0YXRlKTtcbiAgICB0aGlzLl9yZWFkT25seVRva2VuRXhwaXJpbmcgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX3Rva2VuQ29udGV4dC50b2tlbkV4cGlyaW5nKTtcbiAgICB0aGlzLl9yZWFkT25seUF1dGhvcml6ZWQgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuYXV0aG9yaXplZCk7XG4gICAgdGhpcy5fcmVhZE9ubHlPbmxpbmUgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX3B1Ymxpc2hlckNvbnRleHQub25saW5lKTtcbiAgICB0aGlzLl9yZWFkT25seUxvYWRpbmcgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX3B1Ymxpc2hlckNvbnRleHQubG9hZGluZyk7XG4gICAgdGhpcy5fcmVhZE9ubHlQdWJsaXNoaW5nID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnB1Ymxpc2hpbmcpO1xuICAgIHRoaXMuX3JlYWRPbmx5U3RhbmRieSA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4odGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdGFuZGJ5KTtcbiAgICB0aGlzLl9yZWFkT25seVN0b3BwZWQgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RvcHBlZCk7XG4gICAgdGhpcy5fcmVhZE9ubHlGYWlsdXJlQ291bnQgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PG51bWJlcj4odGhpcy5fcHVibGlzaGVyQ29udGV4dC5mYWlsdXJlQ291bnQpO1xuICAgIHRoaXMuX3JlYWRPbmx5RW5kUG9pbnQgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PEVuZFBvaW50Pih0aGlzLl9wdWJsaXNoZXJDb250ZXh0LmVuZFBvaW50KTtcbiAgICB0aGlzLl9yZWFkT25seVN0cmVhbSA9IG5ldyBSZWFkT25seVN1YmplY3Q8SVN0cmVhbT4odGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdHJlYW0pO1xuICAgIHRoaXMuX3JlYWRPbmx5UnRjU3RhdGlzdGljcyA9IG5ldyBSZWFkT25seVN1YmplY3Q8SVJ0Y01vbml0b3JTdGF0aXN0aWM+KHRoaXMuX3B1Ymxpc2hlckNvbnRleHQucnRjU3RhdGlzdGljcyk7XG4gICAgdGhpcy5fcmVhZE9ubHlNZWRpYVN0cmVhbSA9IG5ldyBSZWFkT25seVN1YmplY3Q8TWVkaWFTdHJlYW0+KHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5tZWRpYVN0cmVhbSk7XG5cbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQubWVkaWFTdHJlYW0udmFsdWUgPSBtZWRpYVN0cmVhbTtcblxuICAgIGNvbnN0IGVkZ2VUb2tlbiA9IEVkZ2VBdXRoUGFyc2VyLnBhcnNlVG9rZW4odGhpcy5fdG9rZW5Db250ZXh0LnRva2VuLnZhbHVlKTtcbiAgICBjb25zdCBkaXNjb3ZlcnlVcmkgPSAoZWRnZVRva2VuLnVyaSB8fCBTREsuZGlzY292ZXJ5VXJpLnZhbHVlKS50b1N0cmluZygpO1xuXG4gICAgU0RLLnRlbmFuY3kudmFsdWUgPSBlZGdlVG9rZW4udGVuYW5jeSB8fCBTREsudGVuYW5jeS52YWx1ZTtcbiAgICBEaXNjb3ZlcnlVcmkudXJpLnZhbHVlID0gZGlzY292ZXJ5VXJpO1xuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlID0gTWV0cmljc0ZhY3RvcnkuZ2V0TWV0cmljc1NlcnZpY2UoZGlzY292ZXJ5VXJpKTtcbiAgICB0aGlzLl9zZXNzaW9uVGVsZW1ldHJ5ID0gbmV3IFNlc3Npb25UZWxlbWV0cnkoU0RLLnBhZ2VMb2FkVGltZSwgdGhpcy5fbWV0cmljc1NlcnZpY2UpO1xuICAgIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQucHVibGlzaGVyRGlzcG9zYWJsZXMuYWRkKHRoaXMuX3Nlc3Npb25UZWxlbWV0cnkpO1xuXG4gICAgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5wdWJsaXNoZXJEaXNwb3NhYmxlcy5hZGQoXG4gICAgICB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0YXRlLnN1YnNjcmliZShzdGF0ZSA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9wdWJsaXNoZXJDb250ZXh0LmNsZWFyRmFpbHVyZUNvdW50VGltZW91dCkge1xuICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9wdWJsaXNoZXJDb250ZXh0LmNsZWFyRmFpbHVyZUNvdW50VGltZW91dCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuX3B1Ymxpc2hlckNvbnRleHQuZmFpbHVyZUNvdW50LnZhbHVlKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0YXRlICE9PSBQdWJsaXNoZXJTdGF0ZS5QdWJsaXNoaW5nKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5jbGVhckZhaWx1cmVDb3VudFRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5mYWlsdXJlQ291bnQudmFsdWUgPSAwO1xuICAgICAgICB9LCBmYWlsdXJlQ291bnRDbGVhblVwSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcyk7XG4gICAgICB9KSk7XG5cbiAgICBjb25zdCBkZXN0cm95U3RyZWFtT25Vbm1vdW50ID0gKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RyZWFtLnZhbHVlICYmIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuZW5kUG9pbnQudmFsdWUpIHtcbiAgICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuZW5kUG9pbnQudmFsdWUuZGVzdHJveVN0cmVhbU9uVW5tb3VudCh0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0cmVhbS52YWx1ZSwgJ2NsaWVudDp0ZXJtaW5hdGlvbi1vbi13aW5kb3ctdW5sb2FkJyk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdiZWZvcmV1bmxvYWQnLCBkZXN0cm95U3RyZWFtT25Vbm1vdW50KTtcblxuICAgIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQucHVibGlzaGVyRGlzcG9zYWJsZXMuYWRkKG5ldyBEaXNwb3NhYmxlKCgpID0+IHtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdiZWZvcmV1bmxvYWQnLCBkZXN0cm95U3RyZWFtT25Vbm1vdW50KTtcbiAgICB9KSk7XG5cbiAgICB0aGlzLnN0YXJ0KCk7XG4gIH1cblxuICBnZXQgdG9rZW4oKTogRW5jb2RlZEVkZ2VUb2tlbiB7XG4gICAgcmV0dXJuIHRoaXMuX3Rva2VuQ29udGV4dC50b2tlbi52YWx1ZTtcbiAgfVxuXG4gIHNldCB0b2tlbih0b2tlbjogRW5jb2RlZEVkZ2VUb2tlbikge1xuICAgIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuZGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuXG4gICAgdGhpcy5fdG9rZW5Db250ZXh0LnRva2VuLnZhbHVlID0gdG9rZW47XG4gICAgdGhpcy5fdG9rZW5Db250ZXh0LnRva2VuRXhwaXJpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgIGNvbnN0IGVkZ2VUb2tlbiA9IEVkZ2VBdXRoUGFyc2VyLnBhcnNlVG9rZW4odGhpcy5fdG9rZW5Db250ZXh0LnRva2VuLnZhbHVlKTtcbiAgICBjb25zdCBkaXNjb3ZlcnlVcmkgPSAoZWRnZVRva2VuLnVyaSB8fCBTREsuZGlzY292ZXJ5VXJpLnZhbHVlKS50b1N0cmluZygpO1xuXG4gICAgU0RLLnRlbmFuY3kudmFsdWUgPSBlZGdlVG9rZW4udGVuYW5jeSB8fCBTREsudGVuYW5jeS52YWx1ZTtcbiAgICBEaXNjb3ZlcnlVcmkudXJpLnZhbHVlID0gZGlzY292ZXJ5VXJpO1xuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UgPSBNZXRyaWNzRmFjdG9yeS5nZXRNZXRyaWNzU2VydmljZShkaXNjb3ZlcnlVcmkpO1xuXG4gICAgdGhpcy5zdGFydCgpO1xuICB9XG5cbiAgZ2V0IHBlZXJDb25uZWN0aW9uKCk6IFJlYWRPbmx5U3ViamVjdDxJUGVlckNvbm5lY3Rpb24+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlQZWVyQ29ubmVjdGlvbjtcbiAgfVxuXG4gIGdldCBzdGF0ZSgpOiBSZWFkT25seVN1YmplY3Q8UHVibGlzaGVyU3RhdGU+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlTdGF0ZTtcbiAgfVxuXG4gIGdldCB0b2tlbkV4cGlyaW5nKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5VG9rZW5FeHBpcmluZztcbiAgfVxuXG4gIGdldCBhdXRob3JpemVkKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5QXV0aG9yaXplZDtcbiAgfVxuXG4gIGdldCBvbmxpbmUoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlPbmxpbmU7XG4gIH1cblxuICBnZXQgbG9hZGluZygpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seUxvYWRpbmc7XG4gIH1cblxuICBnZXQgcHVibGlzaGluZygpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVB1Ymxpc2hpbmc7XG4gIH1cblxuICBnZXQgc3RhbmRieSgpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVN0YW5kYnk7XG4gIH1cblxuICBnZXQgc3RvcHBlZCgpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVN0b3BwZWQ7XG4gIH1cblxuICBnZXQgZmFpbHVyZUNvdW50KCk6IFJlYWRPbmx5U3ViamVjdDxudW1iZXI+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlGYWlsdXJlQ291bnQ7XG4gIH1cblxuICBnZXQgZW5kUG9pbnQoKTogUmVhZE9ubHlTdWJqZWN0PEVuZFBvaW50PiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5RW5kUG9pbnQ7XG4gIH1cblxuICBnZXQgc3RyZWFtKCk6IFJlYWRPbmx5U3ViamVjdDxJU3RyZWFtPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5U3RyZWFtO1xuICB9XG5cbiAgZ2V0IHN0cmVhbUlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RyZWFtSWQ7XG4gIH1cblxuICBnZXQgcnRjU3RhdGlzdGljcygpOiBSZWFkT25seVN1YmplY3Q8SVJ0Y01vbml0b3JTdGF0aXN0aWM+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlSdGNTdGF0aXN0aWNzO1xuICB9XG5cbiAgZ2V0IG1lZGlhU3RyZWFtKCk6IFJlYWRPbmx5U3ViamVjdDxNZWRpYVN0cmVhbT4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seU1lZGlhU3RyZWFtO1xuICB9XG5cbiAgYXN5bmMgc3RvcChyZWFzb246IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgIGlmICghdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUpIHtcbiAgICAgICAgdGhpcy5wcm9jZXNzU3RvcChyZWFzb24pO1xuXG4gICAgICAgIHJlc29sdmUoKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuZGlzcG9zYWJsZXMuYWRkKHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnN1YnNjcmliZShpc1N0YXJ0aW5nID0+IHtcbiAgICAgICAgaWYgKCFpc1N0YXJ0aW5nKSB7XG4gICAgICAgICAgdGhpcy5wcm9jZXNzU3RvcChyZWFzb24pO1xuICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfVxuICAgICAgfSkpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBwcm9jZXNzU3RvcChyZWFzb246IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuY2xlYW5VcFJlc291cmNlcyhyZWFzb24pO1xuXG4gICAgaWYgKHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZSkge1xuICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlLmNsb3NlKCk7XG4gICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWUgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RhdGUudmFsdWUgPSBQdWJsaXNoZXJTdGF0ZS5TdG9wcGVkO1xuICB9XG5cbiAgYXN5bmMgZGlzcG9zZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5zdG9wKCdjbGllbnQ6Y2hhbm5lbC1kaXNwb3NlJykudGhlbigoKSA9PiB7XG4gICAgICB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnB1Ymxpc2hlckRpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcbiAgICAgIHRoaXMuX3N0YXRlQ29udGV4dC5pc0Rpc3Bvc2VkID0gdHJ1ZTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldFVyaSh0b2tlbjogRW5jb2RlZEVkZ2VUb2tlbik6IFVSTCB7XG4gICAgY29uc3QgdXJsID0gRWRnZUF1dGhQYXJzZXIucGFyc2VUb2tlbih0b2tlbikudXJpO1xuXG4gICAgaWYgKHVybCkge1xuICAgICAgcmV0dXJuIHVybDtcbiAgICB9XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnRmFsbCBiYWNrIHRvIHRoZSBkZWZhdWx0IGRpc2NvdmVyIFVSSSBbJXNdJywgU0RLLmRpc2NvdmVyeVVyaS52YWx1ZSk7XG5cbiAgICByZXR1cm4gbmV3IFVSTChTREsuZGlzY292ZXJ5VXJpLnZhbHVlKTtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9zdGF0ZUNvbnRleHQuaXNEaXNwb3NlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDaGFubmVsIHdhcyBhbHJlYWR5IGRpc3Bvc2VkJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuaW5mbygnUHVibGlzaGVyIGlzIGFscmVhZHkgc3RhcnRpbmcsIHNraXBwaW5nIHN0YXJ0Jyk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcy5wcm9jZXNzU3RhcnQoKTtcbiAgfVxuXG4gIHNldE1lZGlhU3RyZWFtKG1lZGlhU3RyZWFtOiBNZWRpYVN0cmVhbSkge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5tZWRpYVN0cmVhbS52YWx1ZSA9IG1lZGlhU3RyZWFtO1xuXG4gICAgaWYgKHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZSkge1xuICAgICAgbWVkaWFTdHJlYW0uZ2V0VHJhY2tzKCkuZm9yRWFjaChtZWRpYVRyYWNrID0+IHtcbiAgICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlLmdldFNlbmRlcnMoKS5mb3JFYWNoKHNlbmRlciA9PiB7XG4gICAgICAgICAgaWYgKG1lZGlhVHJhY2sua2luZCA9PT0gc2VuZGVyPy50cmFjaz8ua2luZCAmJiBtZWRpYVRyYWNrLmlkICE9PSBzZW5kZXIudHJhY2suaWQpIHtcbiAgICAgICAgICAgIHNlbmRlci5yZXBsYWNlVHJhY2sobWVkaWFUcmFjayk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcHJvY2Vzc1N0YXJ0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHRva2VuOiBFbmNvZGVkRWRnZVRva2VuID0gdGhpcy5fdG9rZW5Db250ZXh0LnRva2VuLnZhbHVlO1xuICAgIGNvbnN0IGxpc3Rlbk9uU3RyZWFtU2V0dXAgPSB0aGlzLl9zZXNzaW9uVGVsZW1ldHJ5Lmxpc3Rlbk9uU3RyZWFtU2V0dXAoKTtcblxuICAgIGlmICghRWRnZUF1dGhQYXJzZXIuaXNFbmNvZGVkRWRnZVRva2VuVmFsaWQodG9rZW4pKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBwYXJzZSB0b2tlbiBbJXNdJywgdG9rZW4pO1xuICAgICAgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdGF0ZS52YWx1ZSA9IFB1Ymxpc2hlclN0YXRlLlVuYXV0aG9yaXplZDtcbiAgICAgIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuY2xlYW5VcFJlc291cmNlcygnY2xpZW50OnN0YXJ0Jyk7XG4gICAgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdGF0ZS52YWx1ZSA9IFB1Ymxpc2hlclN0YXRlLlN0YXJ0aW5nO1xuICAgIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQubG9hZGluZy52YWx1ZSA9IHRydWU7XG5cbiAgICBjb25zdCB1cmkgPSB0aGlzLmdldFVyaSh0b2tlbik7XG5cbiAgICB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LmRpc3Bvc2FibGVzLmFkZChcbiAgICAgIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RhdGUuc3Vic2NyaWJlKHN0YXRlID0+IHtcbiAgICAgICAgaWYgKHN0YXRlID09PSBQdWJsaXNoZXJTdGF0ZS5FcnJvciB8fCBzdGF0ZSA9PT0gUHVibGlzaGVyU3RhdGUuUmVjb3ZlcmluZykge1xuICAgICAgICAgIERpc2NvdmVyeS5jbGVhckNhY2hlZENsb3Nlc3RFbmRwb2ludCh1cmkpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG5cbiAgICBjb25zdCBoYW5kbGVTdHJlYW1GYWlsdXJlQ2FsbGJhY2s6ICgpID0+IFByb21pc2U8dm9pZD4gPSAoKSA9PiBuZXcgUHJvbWlzZSgocmVzb2x2ZSk6IHZvaWQgPT4ge1xuICAgICAgLy8gTmVlZCB0byBzZXQgaXNTdGFydGluZyB0byBmYWxzZSBhbmQgY2FsbCBoYW5kbGVTdHJlYW1GYWlsdXJlIGlmIHN0cmVhbSBtb25pdG9ycyBmb3VuZCBhbiBpc3N1ZVxuICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgcmV0dXJuIHJlc29sdmUodGhpcy5oYW5kbGVTdHJlYW1GYWlsdXJlKCkpO1xuICAgIH0pO1xuICAgIGNvbnN0IHN0cmVhbVB1Ymxpc2hlciA9IG5ldyBSZWFsVGltZVB1Ymxpc2hlcih0aGlzLl9wdWJsaXNoZXJDb250ZXh0LCB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQsIGhhbmRsZVN0cmVhbUZhaWx1cmVDYWxsYmFjayk7XG5cbiAgICByZXR1cm4gc3RyZWFtUHVibGlzaGVyLnN0YXJ0KFxuICAgICAgdXJpLFxuICAgICAgdG9rZW4sXG4gICAgICBsaXN0ZW5PblN0cmVhbVNldHVwKVxuICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgIGxpc3Rlbk9uU3RyZWFtU2V0dXAuZmFpbCgpO1xuXG4gICAgICAgIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuZmFpbHVyZUNvdW50LnZhbHVlKys7XG5cbiAgICAgICAgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5vbmxpbmUudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLmNsZWFuVXBSZXNvdXJjZXMoJ2NsaWVudDpjbGVhbnVwLWFmdGVyLWZhaWxlZC1zZXR1cCcpO1xuXG4gICAgICAgIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RhdGUudmFsdWUgPSBQdWJsaXNoZXJTdGF0ZS5DbGllbnRTdGFydEVycm9yO1xuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHN0YXJ0IHB1Ymxpc2hpbmcnLCBlKTtcbiAgICAgIH0pXG4gICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgIHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RhdGUudmFsdWUgPT09IFB1Ymxpc2hlclN0YXRlLlB1Ymxpc2hpbmcgfHwgIVNESy5hdXRvbWF0aWNSZXRyeU9uRmFpbHVyZSkge1xuICAgICAgICAgIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RhcnRSZWNvbm5lY3Rpb25BdHRlbXB0c1RpbWVJbk1pbGxpc2Vjb25kcyA9IDA7XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5oYW5kbGVTdHJlYW1GYWlsdXJlKClcbiAgICAgICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgaGFuZGxpbmcgc3RyZWFtIGZhaWx1cmUnLCBlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCB0aGlzLmdldFJldHJ5SW50ZXJ2YWwoKSk7XG5cbiAgICAgICAgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5kaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4ge1xuICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgICAgICB9KSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UmV0cnlJbnRlcnZhbCgpOiBudW1iZXIge1xuICAgIHN3aXRjaCAodGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdGF0ZS52YWx1ZSkge1xuICAgICAgY2FzZSBQdWJsaXNoZXJTdGF0ZS5PZmZsaW5lOlxuICAgICAgICByZXR1cm4gc3RhbmRieVBvbGxpbmdJbnRlcnZhbEluTWlsbGlzZWNvbmRzO1xuICAgICAgY2FzZSBQdWJsaXNoZXJTdGF0ZS5Ob3RGb3VuZDpcbiAgICAgIGNhc2UgUHVibGlzaGVyU3RhdGUuRXJyb3I6XG4gICAgICBjYXNlIFB1Ymxpc2hlclN0YXRlLlJlY292ZXJpbmc6XG4gICAgICBjYXNlIFB1Ymxpc2hlclN0YXRlLlVuYXV0aG9yaXplZDpcbiAgICAgIGNhc2UgUHVibGlzaGVyU3RhdGUuR2VvUmVzdHJpY3RlZDpcbiAgICAgIGNhc2UgUHVibGlzaGVyU3RhdGUuR2VvQmxvY2tlZDpcbiAgICAgIGNhc2UgUHVibGlzaGVyU3RhdGUuU3RvcHBlZDpcbiAgICAgIGNhc2UgUHVibGlzaGVyU3RhdGUuU3RhcnRpbmc6XG4gICAgICBjYXNlIFB1Ymxpc2hlclN0YXRlLlB1Ymxpc2hpbmc6XG4gICAgICBjYXNlIFB1Ymxpc2hlclN0YXRlLlJlY29ubmVjdGluZzpcbiAgICAgIGNhc2UgUHVibGlzaGVyU3RhdGUuVW5zdXBwb3J0ZWRGZWF0dXJlOlxuICAgICAgY2FzZSBQdWJsaXNoZXJTdGF0ZS5Db25maWd1cmF0aW9uRXJyb3I6XG4gICAgICBjYXNlIFB1Ymxpc2hlclN0YXRlLlRyYW5zaWVudENvbmZpZ3VyYXRpb25FcnJvcjpcbiAgICAgIGNhc2UgUHVibGlzaGVyU3RhdGUuQ29ubmVjdGlvbkVycm9yOlxuICAgICAgY2FzZSBQdWJsaXNoZXJTdGF0ZS5DbGllbnRTdGFydEVycm9yOlxuICAgICAgICAvLyBGaXJzdCBhbmQgc2Vjb25kIGF0dGVtcHQgZmFzdCwgYWZ0ZXIgdGhhdCBleHBvbmVudGlhbCB3aXRoIGJhY2tvZmYgaW50ZXJ2YWxcbiAgICAgICAgcmV0dXJuIHRoaXMuX2V4cG9uZW50aWFsQmFja29mZi5nZXRFeHBvbmVudGlhbEJhY2tvZmZJbnRlcnZhbEJ5RmFpbHVyZUNvdW50KHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuZmFpbHVyZUNvdW50LnZhbHVlKTtcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUodGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdGF0ZS52YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBoYW5kbGVTdHJlYW1GYWlsdXJlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGxldCByZWNvbm5lY3RpbmdBdHRlbXB0c0ludGVydmFsID0gMDtcblxuICAgIHN3aXRjaCAodGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdGF0ZS52YWx1ZSkge1xuICAgICAgY2FzZSBQdWJsaXNoZXJTdGF0ZS5FcnJvcjpcbiAgICAgIGNhc2UgUHVibGlzaGVyU3RhdGUuUmVjb25uZWN0aW5nOlxuICAgICAgY2FzZSBQdWJsaXNoZXJTdGF0ZS5PZmZsaW5lOlxuICAgICAgY2FzZSBQdWJsaXNoZXJTdGF0ZS5SZWNvdmVyaW5nOlxuICAgICAgY2FzZSBQdWJsaXNoZXJTdGF0ZS5UcmFuc2llbnRDb25maWd1cmF0aW9uRXJyb3I6XG4gICAgICBjYXNlIFB1Ymxpc2hlclN0YXRlLkNvbm5lY3Rpb25FcnJvcjpcbiAgICAgIGNhc2UgUHVibGlzaGVyU3RhdGUuQ2xpZW50U3RhcnRFcnJvcjpcbiAgICAgICAgaWYgKCF0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0YXJ0UmVjb25uZWN0aW9uQXR0ZW1wdHNUaW1lSW5NaWxsaXNlY29uZHMpIHtcbiAgICAgICAgICB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0YXJ0UmVjb25uZWN0aW9uQXR0ZW1wdHNUaW1lSW5NaWxsaXNlY29uZHMgPSBEYXRlLm5vdygpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVjb25uZWN0aW5nQXR0ZW1wdHNJbnRlcnZhbCA9IERhdGUubm93KCkgLSB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0YXJ0UmVjb25uZWN0aW9uQXR0ZW1wdHNUaW1lSW5NaWxsaXNlY29uZHM7XG5cbiAgICAgICAgaWYgKG1heFJlY29ubmVjdGluZ0F0dGVtcHRzSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcyA8PSByZWNvbm5lY3RpbmdBdHRlbXB0c0ludGVydmFsKSB7XG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1B1Ymxpc2hlciBzdG9wcGVkIHdpdGggc3RhdGUgWyVzXSBbJXNdIGFmdGVyIGV4Y2VlZGluZyB0aW1lb3V0JywgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdGF0ZS52YWx1ZSwgUHVibGlzaGVyU3RhdGVbdGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdGF0ZS52YWx1ZV0pO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1JldHJ5IHN0YXJ0IHdpdGggaW5pdGlhbCBzdGF0ZSBbJXNdIFslc10nLCB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0YXRlLnZhbHVlLCBQdWJsaXNoZXJTdGF0ZVt0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0YXRlLnZhbHVlXSk7XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFB1Ymxpc2hlclN0YXRlLlVuYXV0aG9yaXplZDpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1B1Ymxpc2hlciBpcyB1bmF1dGhvcml6ZWQsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0LiBQbGVhc2UgcHJvdmlkZSBhIG5ldyB0b2tlbiBhbmQgaW52b2tlIHN0YXJ0KCknKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIFB1Ymxpc2hlclN0YXRlLkdlb1Jlc3RyaWN0ZWQ6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdQdWJsaXNoZXIgaXMgZ2VvIHJlc3RyaWN0ZWQsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0LiBQbGVhc2UgcHJvdmlkZSBhIG5ldyB0b2tlbiBhbmQgaW52b2tlIHN0YXJ0KCknKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIFB1Ymxpc2hlclN0YXRlLkdlb0Jsb2NrZWQ6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdQdWJsaXNoZXIgaXMgZ2VvIGJsb2NrZWQsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0LiBQbGVhc2UgcHJvdmlkZSBhIG5ldyB0b2tlbiBhbmQgaW52b2tlIHN0YXJ0KCknKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIFB1Ymxpc2hlclN0YXRlLlN0b3BwZWQ6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdQdWJsaXNoZXIgaXMgc3RvcHBlZCwgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQuJyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSBQdWJsaXNoZXJTdGF0ZS5QdWJsaXNoaW5nOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnUHVibGlzaGVyIGlzIHB1Ymxpc2hpbmcsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0Jyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSBQdWJsaXNoZXJTdGF0ZS5TdGFydGluZzpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1B1Ymxpc2hlciBpcyBhbHJlYWR5IHN0YXJ0aW5nLCBza2lwcGluZyByZXRyeSBvZiBzdGFydCcpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgUHVibGlzaGVyU3RhdGUuVW5zdXBwb3J0ZWRGZWF0dXJlOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnUHVibGlzaGVyIGlzIHN0b3BwZWQgZHVlIHRvIHVuc3VwcG9ydGVkIGZlYXR1cmUsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0LicpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgUHVibGlzaGVyU3RhdGUuTm90Rm91bmQ6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdQdWJsaXNoZXIgaXMgc3RvcHBlZCBkdWUgdG8gY2hhbm5lbCBub3QgZm91bmQsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0LicpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgUHVibGlzaGVyU3RhdGUuQ29uZmlndXJhdGlvbkVycm9yOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnUHVibGlzaGVyIGlzIHN0b3BwZWQgZHVlIHRvIGNvbmZpZ3VyYXRpb24gZXJyb3IsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0LicpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RhdGUudmFsdWUpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnN0YXJ0KCk7XG4gIH1cblxuICBwcml2YXRlIGNsZWFuVXBSZXNvdXJjZXMocmVhc29uOiBzdHJpbmcgPSBkZWZhdWx0U3RyZWFtVGVybWluYXRpb25SZWFzb24pOiB2b2lkIHtcbiAgICB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LmRpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcblxuICAgIGNvbnN0IHBlZXJDb25uZWN0aW9uID0gdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlO1xuXG4gICAgaWYgKHBlZXJDb25uZWN0aW9uKSB7XG4gICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWUgPSBudWxsO1xuICAgICAgcGVlckNvbm5lY3Rpb24uY2xvc2UoKTtcbiAgICAgIHBlZXJDb25uZWN0aW9uLmRpc3Bvc2UoKTtcblxuICAgICAgaWYgKFNESy5mb3JjZUdhcmJhZ2VDb2xsZWN0aW9uT25SZXN0YXJ0ICYmICEoRmVhdHVyZUVuYWJsZW1lbnQuaXNNb2JpbGUgJiYgU0RLLnNraXBHYXJiYWdlQ29sbGVjdGlvbk9uTW9iaWxlRGV2aWNlcykpIHtcbiAgICAgICAgR2FyYmFnZUNvbGxlY3Rvck1hbmFnZXIuZm9yY2VHYXJiYWdlQ29sbGVjdGlvbigpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQucHVibGlzaGluZy52YWx1ZSA9IGZhbHNlO1xuICAgIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RvcHBlZC52YWx1ZSA9IHRydWU7XG4gICAgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdGFuZGJ5LnZhbHVlID0gZmFsc2U7XG5cbiAgICBpZiAodGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdHJlYW0udmFsdWUgJiYgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5lbmRQb2ludC52YWx1ZSkge1xuICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuZW5kUG9pbnQudmFsdWUuZGVzdHJveVN0cmVhbSh0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0cmVhbS52YWx1ZSwgcmVhc29uKVxuICAgICAgICAudGhlbigoe3N0YXR1c30pID0+IHtcbiAgICAgICAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIud2FybignWyVzXSBGYWlsZWQgdG8gZGVzdHJveSBzdHJlYW0gd2l0aCByZWFzb24gWyVzXScsIHRoaXMuc3RyZWFtSWQsIHN0YXR1cyk7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBEZXN0cm95ZWQgc3RyZWFtIHdpdGggcmVhc29uIFslc10nLCB0aGlzLnN0cmVhbUlkLCBzdGF0dXMpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdbJXNdIEZhaWxlZCB0byBkZXN0cm95IHN0cmVhbScsIHRoaXMuc3RyZWFtSWQsIGUpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0cmVhbS52YWx1ZSA9IG51bGw7XG4gICAgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5lbmRQb2ludC52YWx1ZSA9IG51bGw7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMgPSAwO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi8uLi9yeC9TdWJqZWN0JztcbmltcG9ydCBQdWJsaXNoZXJTdGF0ZSBmcm9tICcuL1B1Ymxpc2hlclN0YXRlJztcbmltcG9ydCBFbmRQb2ludCwge0lTdHJlYW19IGZyb20gJy4uL2Rpc2NvdmVyeS9FbmRQb2ludCc7XG5pbXBvcnQgYXNzZXJ0VW5yZWFjaGFibGUgZnJvbSAnLi4vLi4vbGFuZy9hc3NlcnRVbnJlYWNoYWJsZSc7XG5pbXBvcnQgRGlzcG9zYWJsZUxpc3QgZnJvbSAnLi4vLi4vbGFuZy9EaXNwb3NhYmxlTGlzdCc7XG5pbXBvcnQge1B1Ymxpc2hTdGF0dXN9IGZyb20gJy4uL2FwaS9QdWJsaXNoJztcbmltcG9ydCBTdHJpbmdzIGZyb20gJy4uLy4uL2xhbmcvU3RyaW5ncyc7XG5pbXBvcnQge0lSdGNQdWJsaXNoTW9uaXRvclN0YXRpc3RpY30gZnJvbSAnLi4vLi4vcnRjL1J0Y1B1Ymxpc2hNb25pdG9yJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUHVibGlzaGVyQ29udGV4dCB7XG4gIHB1Ymxpc2hlckluaXRpYWxpemF0aW9uOiBEYXRlO1xuICBkaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3Q7XG4gIHB1Ymxpc2hlckRpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdDtcbiAgc3RhdGU6IFN1YmplY3Q8UHVibGlzaGVyU3RhdGU+O1xuICBhdXRob3JpemVkOiBTdWJqZWN0PGJvb2xlYW4+O1xuICBvbmxpbmU6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIGxvYWRpbmc6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIHB1Ymxpc2hpbmc6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIHN0YW5kYnk6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIHN0b3BwZWQ6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIGZhaWx1cmVDb3VudDogU3ViamVjdDxudW1iZXI+O1xuICBlbmRQb2ludDogU3ViamVjdDxFbmRQb2ludD47XG4gIHN0cmVhbTogU3ViamVjdDxJU3RyZWFtPjtcbiAgcnRjU3RhdGlzdGljczogU3ViamVjdDxJUnRjUHVibGlzaE1vbml0b3JTdGF0aXN0aWM+O1xuICBjbGVhckZhaWx1cmVDb3VudFRpbWVvdXQ6IG51bWJlcjtcbiAgc3RhcnRSZWNvbm5lY3Rpb25BdHRlbXB0c1RpbWVJbk1pbGxpc2Vjb25kczogbnVtYmVyO1xuICBuYW1lOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IobmFtZT86IHN0cmluZykge1xuICAgIHRoaXMuZGlzcG9zYWJsZXMgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgICB0aGlzLnB1Ymxpc2hlckRpc3Bvc2FibGVzID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG4gICAgdGhpcy5wdWJsaXNoZXJJbml0aWFsaXphdGlvbiA9IG5ldyBEYXRlKCk7XG4gICAgdGhpcy5zdGF0ZSA9IG5ldyBTdWJqZWN0PFB1Ymxpc2hlclN0YXRlPihQdWJsaXNoZXJTdGF0ZS5TdGFydGluZyk7XG4gICAgdGhpcy5hdXRob3JpemVkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG4gICAgdGhpcy5vbmxpbmUgPSBuZXcgU3ViamVjdDxib29sZWFuPih0cnVlKTtcbiAgICB0aGlzLmxvYWRpbmcgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy5wdWJsaXNoaW5nID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHRoaXMuc3RhbmRieSA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICB0aGlzLnN0b3BwZWQgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy5mYWlsdXJlQ291bnQgPSBuZXcgU3ViamVjdDxudW1iZXI+KDApO1xuICAgIHRoaXMuZW5kUG9pbnQgPSBuZXcgU3ViamVjdDxFbmRQb2ludD4obnVsbCk7XG4gICAgdGhpcy5zdHJlYW0gPSBuZXcgU3ViamVjdDxJU3RyZWFtPihudWxsKTtcbiAgICB0aGlzLnJ0Y1N0YXRpc3RpY3MgPSBuZXcgU3ViamVjdDxJUnRjUHVibGlzaE1vbml0b3JTdGF0aXN0aWM+KG51bGwpO1xuICAgIHRoaXMubmFtZSA9IG5hbWUgJiYgbmFtZS5sZW5ndGggPyBuYW1lIDogdGhpcy5nZW5lcmF0ZVNjcmVlbk5hbWUoKTtcbiAgICB0aGlzLnN0YXJ0UmVjb25uZWN0aW9uQXR0ZW1wdHNUaW1lSW5NaWxsaXNlY29uZHMgPSAwO1xuICB9XG5cbiAgZ2V0IHN0cmVhbUlkKCk6IHN0cmluZyB7XG4gICAgY29uc3Qgc3RyZWFtID0gdGhpcy5zdHJlYW0udmFsdWU7XG5cbiAgICBpZiAoIXN0cmVhbSkge1xuICAgICAgcmV0dXJuICctJztcbiAgICB9XG5cbiAgICByZXR1cm4gc3RyZWFtLnN0cmVhbUlkO1xuICB9XG5cbiAgYXBwbHlTdGF0dXMoc3RhdHVzOiBQdWJsaXNoU3RhdHVzKTogdm9pZCB7XG4gICAgc3dpdGNoIChzdGF0dXMpIHtcbiAgICAgIGNhc2UgJ29rJzpcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd1bmF1dGhvcml6ZWQnOlxuICAgICAgY2FzZSAnZ2VvLXJlc3RyaWN0ZWQnOlxuICAgICAgY2FzZSAnZ2VvLWJsb2NrZWQnOlxuICAgICAgICB0aGlzLmF1dGhvcml6ZWQudmFsdWUgPSBmYWxzZTtcblxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWZhbGx0aHJvdWdoXG4gICAgICBjYXNlICdub3QtZm91bmQnOlxuICAgICAgICB0aGlzLmZhaWx1cmVDb3VudC52YWx1ZSA9IDA7XG4gICAgICAgIHRoaXMucHVibGlzaGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnN0YW5kYnkudmFsdWUgPSB0cnVlO1xuICAgICAgICB0aGlzLnN0b3BwZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zdHJlYW0udmFsdWUgPSBudWxsO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRoaXMuZmFpbHVyZUNvdW50LnZhbHVlKys7XG4gICAgICAgIHRoaXMucHVibGlzaGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnN0YW5kYnkudmFsdWUgPSB0cnVlO1xuICAgICAgICB0aGlzLnN0b3BwZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zdHJlYW0udmFsdWUgPSBudWxsO1xuXG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBtYXBQdWJsaXNoU3RhdHVzVG9QdWJsaXNoZXJTdGF0dXMoc3RhdHVzOiBQdWJsaXNoU3RhdHVzKTogUHVibGlzaGVyU3RhdGUge1xuICAgIHN3aXRjaCAoc3RhdHVzKSB7XG4gICAgICBjYXNlICdvayc6XG4gICAgICAgIHJldHVybiBQdWJsaXNoZXJTdGF0ZS5TdGFydGluZztcbiAgICAgIGNhc2UgJ25vdC1mb3VuZCc6XG4gICAgICAgIHJldHVybiBQdWJsaXNoZXJTdGF0ZS5Ob3RGb3VuZDtcbiAgICAgIGNhc2UgJ2dlby1yZXN0cmljdGVkJzpcbiAgICAgICAgcmV0dXJuIFB1Ymxpc2hlclN0YXRlLkdlb1Jlc3RyaWN0ZWQ7XG4gICAgICBjYXNlICdnZW8tYmxvY2tlZCc6XG4gICAgICAgIHJldHVybiBQdWJsaXNoZXJTdGF0ZS5HZW9CbG9ja2VkO1xuICAgICAgY2FzZSAndW5hdXRob3JpemVkJzpcbiAgICAgICAgcmV0dXJuIFB1Ymxpc2hlclN0YXRlLlVuYXV0aG9yaXplZDtcbiAgICAgIGNhc2UgJ2NhcGFjaXR5JzpcbiAgICAgIGNhc2UgJ3JhdGUtbGltaXRlZCc6XG4gICAgICBjYXNlICd0aW1lb3V0JzpcbiAgICAgICAgcmV0dXJuIFB1Ymxpc2hlclN0YXRlLlJlY292ZXJpbmc7XG4gICAgICBjYXNlICdtaXNzaW5nLWNoYW5uZWwtb3Itcm9vbS1pZCc6XG4gICAgICBjYXNlICdmb3JiaWRkZW4tdGFnJzpcbiAgICAgICAgcmV0dXJuIFB1Ymxpc2hlclN0YXRlLkNvbmZpZ3VyYXRpb25FcnJvcjtcbiAgICAgIGNhc2UgJ3BvcnQtaW4tcmFuZ2Utbm90LWZvdW5kJzpcbiAgICAgICAgcmV0dXJuIFB1Ymxpc2hlclN0YXRlLlRyYW5zaWVudENvbmZpZ3VyYXRpb25FcnJvcjtcbiAgICAgIGNhc2UgJ2ZhaWxlZCc6XG4gICAgICAgIHJldHVybiBQdWJsaXNoZXJTdGF0ZS5FcnJvcjtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHN0YXR1cyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZW5lcmF0ZVNjcmVlbk5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gU3RyaW5ncy5yYW5kb20oMTIpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5lbnVtIFB1Ymxpc2hlclN0YXRlIHtcbiAgT2ZmbGluZSA9IDEsXG4gIFN0YXJ0aW5nLFxuICBQdWJsaXNoaW5nLFxuICBSZWNvdmVyaW5nLFxuICBSZWNvbm5lY3RpbmcsXG4gIFN0b3BwZWQsXG4gIFVuYXV0aG9yaXplZCxcbiAgR2VvUmVzdHJpY3RlZCxcbiAgR2VvQmxvY2tlZCxcbiAgVW5zdXBwb3J0ZWRGZWF0dXJlLFxuICBOb3RGb3VuZCxcbiAgQ29uZmlndXJhdGlvbkVycm9yLFxuICBUcmFuc2llbnRDb25maWd1cmF0aW9uRXJyb3IsXG4gIENvbm5lY3Rpb25FcnJvcixcbiAgQ2xpZW50U3RhcnRFcnJvcixcbiAgRXJyb3Jcbn1cblxuZXhwb3J0IGRlZmF1bHQgUHVibGlzaGVyU3RhdGU7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcbmltcG9ydCB7RW5jb2RlZEVkZ2VUb2tlbn0gZnJvbSAnLi4vLi4vZWRnZUF1dGgvRW5jb2RlZEVkZ2VUb2tlbic7XG5pbXBvcnQgUHVibGlzaGVyIGZyb20gJy4vUHVibGlzaGVyJztcblxudHlwZSBDcmVhdGVQdWJsaXNoZXJPcHRpb25zID0ge1xuICBtZWRpYVN0cmVhbTogTWVkaWFTdHJlYW07XG4gIHRva2VuOiBFbmNvZGVkRWRnZVRva2VuO1xuICBuYW1lPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUHVibGlzaGVycyB7XG4gIHN0YXRpYyBjcmVhdGVQdWJsaXNoZXIob3B0aW9uczogQ3JlYXRlUHVibGlzaGVyT3B0aW9ucyk6IFB1Ymxpc2hlciB7XG4gICAgaWYgKCFTREsuaW5pdGlhbGl6ZWQudmFsdWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignU0RLIGlzIG5vdCBsb2FkZWQuJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBQdWJsaXNoZXIob3B0aW9ucy5tZWRpYVN0cmVhbSwgb3B0aW9ucy50b2tlbiwgb3B0aW9ucy5uYW1lKTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdQdWJsaXNoZXJzIGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uLy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuaW1wb3J0IERpc3Bvc2FibGUgZnJvbSAnLi4vLi4vbGFuZy9EaXNwb3NhYmxlJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQgU0RLIGZyb20gJy4uL1NESyc7XG5pbXBvcnQgR2FyYmFnZUNvbGxlY3Rvck1hbmFnZXIgZnJvbSAnLi4vLi4vZG9tL0dhcmJhZ2VDb2xsZWN0b3JNYW5hZ2VyJztcbmltcG9ydCBGZWF0dXJlRW5hYmxlbWVudCBmcm9tICcuLi8uLi9lbnZpcm9ubWVudC9GZWF0dXJlRW5hYmxlbWVudCc7XG5pbXBvcnQge1NldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzfSBmcm9tICcuLi9kaXNjb3ZlcnkvRW5kUG9pbnQnO1xuaW1wb3J0IERpc2NvdmVyeSBmcm9tICcuLi9kaXNjb3ZlcnkvRGlzY292ZXJ5JztcbmltcG9ydCBJUGVlckNvbm5lY3Rpb24gZnJvbSAnLi4vLi4vcnRjL0lQZWVyQ29ubmVjdGlvbic7XG5pbXBvcnQgUGVlckNvbm5lY3Rpb25TZXJ2aWNlIGZyb20gJy4uLy4uL3J0Yy9QZWVyQ29ubmVjdGlvblNlcnZpY2UnO1xuaW1wb3J0IFBlZXJDb25uZWN0aW9uQ29udGV4dCBmcm9tICcuLi9jb250ZXh0L1BlZXJDb25uZWN0aW9uQ29udGV4dCc7XG5pbXBvcnQgUnRjUHVibGlzaE1vbml0b3IgZnJvbSAnLi4vLi4vcnRjL1J0Y1B1Ymxpc2hNb25pdG9yJztcbmltcG9ydCBSdGNDb25maWd1cmF0aW9uTWFuYWdlciBmcm9tICcuLi8uLi9ydGMvUnRjQ29uZmlndXJhdGlvbk1hbmFnZXInO1xuaW1wb3J0IFB1Ymxpc2hlclN0YXRlIGZyb20gJy4vUHVibGlzaGVyU3RhdGUnO1xuaW1wb3J0IFB1Ymxpc2hlckNvbnRleHQgZnJvbSAnLi9QdWJsaXNoZXJDb250ZXh0JztcblxuY29uc3QgaWNlQ2FuZGlkYXRlQWNjdW11bGF0aW9uSW50ZXJ2YWwgPSAxMDA7XG5jb25zdCBzb2Z0UmVzdGFydEludGVydmFsID0gMTAwMDtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVhbFRpbWVQdWJsaXNoZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignUmVhbFRpbWVQdWJsaXNoZXInKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfcHVibGlzaGVyQ29udGV4dDogUHVibGlzaGVyQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGVlckNvbm5lY3Rpb25Db250ZXh0OiBQZWVyQ29ubmVjdGlvbkNvbnRleHQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2hhbmRsZVN0cmVhbUZhaWx1cmU6ICgpID0+IFByb21pc2U8dm9pZD47XG5cbiAgY29uc3RydWN0b3IocHVibGlzaGVyQ29udGV4dDogUHVibGlzaGVyQ29udGV4dCwgcGVlckNvbm5lY3Rpb25Db250ZXh0OiBQZWVyQ29ubmVjdGlvbkNvbnRleHQsIGhhbmRsZVN0cmVhbUZhaWx1cmU6ICgpID0+IFByb21pc2U8dm9pZD4pIHtcbiAgICB0aGlzLl9wdWJsaXNoZXJDb250ZXh0ID0gcHVibGlzaGVyQ29udGV4dDtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQgPSBwZWVyQ29ubmVjdGlvbkNvbnRleHQ7XG4gICAgdGhpcy5faGFuZGxlU3RyZWFtRmFpbHVyZSA9IGhhbmRsZVN0cmVhbUZhaWx1cmU7XG4gIH1cblxuICBzdGFydCh1cmksIHRva2VuLCBsaXN0ZW5PblN0cmVhbVNldHVwKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCFuYXZpZ2F0b3Iub25MaW5lKSB7XG4gICAgICB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0YXRlLnZhbHVlID0gUHVibGlzaGVyU3RhdGUuT2ZmbGluZTtcblxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH1cblxuICAgIHJldHVybiBQcm9taXNlLmFsbChbXG4gICAgICBEaXNjb3ZlcnkuZGlzY292ZXJDbG9zZXN0RW5kUG9pbnRXaXRoQ2FjaGluZyh1cmkpLFxuICAgICAgUGVlckNvbm5lY3Rpb25TZXJ2aWNlLmNyZWF0ZVBlZXJDb25uZWN0aW9uT2ZmZXIoJ3NlbmRvbmx5JylcbiAgICAgICAgLnRoZW4oKHtsb2NhbE9mZmVyLCBwZWVyQ29ubmVjdGlvbn0pID0+IHtcbiAgICAgICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWUgPSBwZWVyQ29ubmVjdGlvbjtcblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBsb2NhbE9mZmVyLFxuICAgICAgICAgICAgcGVlckNvbm5lY3Rpb25cbiAgICAgICAgICB9O1xuICAgICAgICB9KVxuICAgIF0pXG4gICAgICAudGhlbigoW2VuZFBvaW50LCB7bG9jYWxPZmZlciwgcGVlckNvbm5lY3Rpb259XSkgPT4ge1xuICAgICAgICB0aGlzLl9wdWJsaXNoZXJDb250ZXh0Lm9ubGluZS52YWx1ZSA9IHRydWU7XG4gICAgICAgIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuZW5kUG9pbnQudmFsdWUgPSBlbmRQb2ludDtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0Nvbm5lY3RpbmcgdG8gWyVzXScsIGVuZFBvaW50LnRvU3RyaW5nKCkpO1xuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnTG9jYWwgb2ZmZXI6XFxuJyArIGxvY2FsT2ZmZXIuc2RwKTtcblxuICAgICAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQuY2xpZW50T2ZmZXJEaXNhYmxlZCB8fCAhcGVlckNvbm5lY3Rpb24uc3VwcG9ydHNTZXRDb25maWd1cmF0aW9uIHx8ICFwZWVyQ29ubmVjdGlvbi5zdXBwb3J0c0dldENvbmZpZ3VyYXRpb24gfHwgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5mYWlsdXJlQ291bnQudmFsdWUgPiAwKSB7XG4gICAgICAgICAgcGVlckNvbm5lY3Rpb24uY2xvc2UoKTtcbiAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5kaXNwb3NlKCk7XG5cbiAgICAgICAgICBpZiAoU0RLLmZvcmNlR2FyYmFnZUNvbGxlY3Rpb25PblJlc3RhcnQgJiYgIShGZWF0dXJlRW5hYmxlbWVudC5pc01vYmlsZSAmJiBTREsuc2tpcEdhcmJhZ2VDb2xsZWN0aW9uT25Nb2JpbGVEZXZpY2VzKSkge1xuICAgICAgICAgICAgR2FyYmFnZUNvbGxlY3Rvck1hbmFnZXIuZm9yY2VHYXJiYWdlQ29sbGVjdGlvbigpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHBlZXJDb25uZWN0aW9uID0gbnVsbDtcbiAgICAgICAgICBsb2NhbE9mZmVyID0gbnVsbDtcbiAgICAgICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWUgPSBwZWVyQ29ubmVjdGlvbjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBlbmRQb2ludC5wdWJsaXNoKHRoaXMuX3B1Ymxpc2hlckNvbnRleHQubmFtZSwgdG9rZW4sIGxvY2FsT2ZmZXIsIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuZmFpbHVyZUNvdW50LnZhbHVlKTtcbiAgICAgIH0pXG4gICAgICAudGhlbigoe3N0YXR1cywgc3RyZWFtLCBydGNDb25maWd1cmF0aW9uLCBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLCBjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UsIGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2V9KSA9PiB7XG4gICAgICAgIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RyZWFtLnZhbHVlID0gc3RyZWFtO1xuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5kZWJ1ZyhcbiAgICAgICAgICAnWyVzXSBQdWJsaXNoIGNvbXBsZXRlZCBbJXNdIFslal0gWyVqXSBbJWpdIFslal0nLFxuICAgICAgICAgIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RyZWFtSWQsXG4gICAgICAgICAgc3RhdHVzLFxuICAgICAgICAgIHJ0Y0NvbmZpZ3VyYXRpb24sXG4gICAgICAgICAgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSxcbiAgICAgICAgICBjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UsXG4gICAgICAgICAgY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RhdGUudmFsdWUgPSB0aGlzLl9wdWJsaXNoZXJDb250ZXh0Lm1hcFB1Ymxpc2hTdGF0dXNUb1B1Ymxpc2hlclN0YXR1cyhzdGF0dXMpO1xuXG4gICAgICAgIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuYXBwbHlTdGF0dXMoc3RhdHVzKTtcblxuICAgICAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuYXBwbHlSdGNDb25maWd1cmF0aW9uKHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZSwgcnRjQ29uZmlndXJhdGlvbilcbiAgICAgICAgICAudGhlbihwZWVyQ29ubmVjdGlvbiA9PiB7XG4gICAgICAgICAgICBsZXQgc3VibWl0Q2FuZGlkYXRlc1RpbWVvdXQ7XG4gICAgICAgICAgICBsZXQgY2FuY2VsRGlzY292ZXJ5ID0gZmFsc2U7XG4gICAgICAgICAgICBsZXQgZGlzY292ZXJ5Q29tcGxldGVkID0gZmFsc2U7XG4gICAgICAgICAgICBjb25zdCBjYW5kaWRhdGVzOiBSVENJY2VDYW5kaWRhdGVbXSA9IFtdO1xuXG4gICAgICAgICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWUgPSBwZWVyQ29ubmVjdGlvbjtcblxuICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24uYWRkU3RyZWFtKHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5tZWRpYVN0cmVhbS52YWx1ZSk7XG5cbiAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLm9uaWNlY2FuZGlkYXRlID0gKGUpOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgaWYgKHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RyZWFtLnZhbHVlICE9PSBzdHJlYW0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAodGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlICE9PSBwZWVyQ29ubmVjdGlvbikge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChjYW5jZWxEaXNjb3ZlcnkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoIVNESy5zZW5kTG9jYWxDYW5kaWRhdGVzLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKGUuY2FuZGlkYXRlICYmIGUuY2FuZGlkYXRlLmNhbmRpZGF0ZSkge1xuICAgICAgICAgICAgICAgIGNhbmRpZGF0ZXMucHVzaChlLmNhbmRpZGF0ZSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZGlzY292ZXJ5Q29tcGxldGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICghc3VibWl0Q2FuZGlkYXRlc1RpbWVvdXQpIHtcbiAgICAgICAgICAgICAgICBzdWJtaXRDYW5kaWRhdGVzVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RyZWFtLnZhbHVlICE9PSBzdHJlYW0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICBpZiAoY2FuY2VsRGlzY292ZXJ5KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuZW5kUG9pbnQudmFsdWUuYWRkSWNlQ2FuZGlkYXRlcyhzdHJlYW0sIGNhbmRpZGF0ZXMsIGRpc2NvdmVyeUNvbXBsZXRlZClcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4oKHtzdGF0dXMsIG9wdGlvbnN9KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cyAhPT0gJ29rJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLndhcm4oJ1slc10gRmFpbGVkIHRvIGFkZCBJQ0UgY2FuZGlkYXRlcyB3aXRoIHJlYXNvbiBbJXNdJywgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdHJlYW1JZCwgc3RhdHVzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmluY2x1ZGVzKCdjYW5jZWwnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FuY2VsRGlzY292ZXJ5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBBZGRlZCBJQ0UgY2FuZGlkYXRlcyB3aXRoIHJlYXNvbiBbJXNdIGFuZCBvcHRpb25zIFslc10nLCB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0cmVhbUlkLCBzdGF0dXMsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdbJXNdIEZhaWxlZCB0byBhZGQgSUNFIGNhbmRpZGF0ZXMnLCB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0cmVhbUlkLCBlKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSwgaWNlQ2FuZGlkYXRlQWNjdW11bGF0aW9uSW50ZXJ2YWwpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5vbmljZWNvbm5lY3Rpb25zdGF0ZWNoYW5nZSA9ICgpOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgaWYgKHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RyZWFtLnZhbHVlICE9PSBzdHJlYW0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAodGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlICE9PSBwZWVyQ29ubmVjdGlvbikge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNvbnN0IHJldHJ5Q2FsbGJhY2sgPSAoKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgLy8gSWYgd2Ugc3RvcCBub3JtYWxseSB0aGUgcGVlciBjb25uZWN0aW9uIGlzIHVucmVnaXN0ZXJlZCBmaXJzdC5cbiAgICAgICAgICAgICAgICAvLyBUaHVzIGFueXRpbWUgd2Ugc2VlIGEgY2xvc2VkIHBlZXIgY29ubmVjdGlvbiB0aGF0IGlzIHN0aWxsIHZhbGlkLCBpdCBpcyBhbiBlcnJvci5cbiAgICAgICAgICAgICAgICB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0YXRlLnZhbHVlID0gUHVibGlzaGVyU3RhdGUuQ29ubmVjdGlvbkVycm9yO1xuICAgICAgICAgICAgICAgIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQucHVibGlzaGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQubG9hZGluZy52YWx1ZSA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5faGFuZGxlU3RyZWFtRmFpbHVyZSgpXG4gICAgICAgICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAnWyVzXSBGYWlsZWQgaGFuZGxpbmcgc3RyZWFtIGZhaWx1cmUgYWZ0ZXIgcGVlciBjb25uZWN0aW9uIHN0b3BwZWQgd2l0aCBzdGF0ZSBbJXNdJyxcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0cmVhbUlkLFxuICAgICAgICAgICAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLmljZUNvbm5lY3Rpb25TdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICBlXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICBzd2l0Y2ggKHBlZXJDb25uZWN0aW9uLmljZUNvbm5lY3Rpb25TdGF0ZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ2NoZWNraW5nJzpcbiAgICAgICAgICAgICAgICBjYXNlICdjb21wbGV0ZWQnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ2Nvbm5lY3RlZCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnbmV3JzpcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICAgICAgICAgIGNhc2UgJ2Rpc2Nvbm5lY3RlZCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnZmFpbGVkJzpcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIElDRSBjb25uZWN0aW9uIHN0YXRlIGNoYW5nZWQgdG8gWyVzXSwgdHJ5aW5nIHRvIHJlY29ubmVjdCcsIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RyZWFtSWQsIHBlZXJDb25uZWN0aW9uLmljZUNvbm5lY3Rpb25TdGF0ZSk7XG4gICAgICAgICAgICAgICAgICB0aGlzLnJlY29ubmVjdFBlZXJDb25uZWN0aW9uKHBlZXJDb25uZWN0aW9uLCByZXRyeUNhbGxiYWNrKTtcblxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGNhc2UgJ2Nsb3NlZCc6XG4gICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBJQ0UgY29ubmVjdGlvbiBzdGF0ZSBjaGFuZ2VkIHRvIFslc10sIHJldHJ5aW5nIHRvIGNvbm5lY3QnLCB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0cmVhbUlkLCBwZWVyQ29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGUpO1xuICAgICAgICAgICAgICAgICAgcmV0cnlDYWxsYmFjaygpO1xuXG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHBlZXJDb25uZWN0aW9uLmljZUNvbm5lY3Rpb25TdGF0ZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPihyZXNvbHZlID0+IHtcbiAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgIGlmICghc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIFNldCBsb2NhbCBTRFAgb2ZmZXIgWyVzXScsIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RyZWFtSWQsIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uLnNkcCk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIHBlZXJDb25uZWN0aW9uLnNldExvY2FsRGVzY3JpcHRpb24oc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24pXG4gICAgICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gRmFpbGVkIHRvIHNldCBsb2NhbCBkZXNjcmlwdGlvbiBbJWpdIHdpdGggbWVzc2FnZSBbJXNdJywgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdHJlYW1JZCwgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24sIGUubWVzc2FnZSk7XG5cbiAgICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gU2V0IHJlbW90ZSBTRFAgYW5zd2VyIFslc10nLCB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0cmVhbUlkLCBjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbi5zZHApO1xuXG4gICAgICAgICAgICAgIHJldHVybiBwZWVyQ29ubmVjdGlvbi5zZXRSZW1vdGVEZXNjcmlwdGlvbihjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbilcbiAgICAgICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBGYWlsZWQgdG8gc2V0IHJlbW90ZSBkZXNjcmlwdGlvbiBbJWpdIHdpdGggbWVzc2FnZSBbJXNdJywgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdHJlYW1JZCwgY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24sIGUubWVzc2FnZSk7XG5cbiAgICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBTZXQgcmVtb3RlIFNEUCBvZmZlciBbJXNdJywgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdHJlYW1JZCwgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbi5zZHApO1xuXG4gICAgICAgICAgICAgIHJldHVybiBwZWVyQ29ubmVjdGlvbi5zZXRSZW1vdGVEZXNjcmlwdGlvbihjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKVxuICAgICAgICAgICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIEZhaWxlZCB0byBzZXQgcmVtb3RlIGRlc2NyaXB0aW9uIFslal0gd2l0aCBtZXNzYWdlIFslc10nLCB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0cmVhbUlkLCBjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbiwgZS5tZXNzYWdlKTtcblxuICAgICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBwZWVyQ29ubmVjdGlvbi5jcmVhdGVBbnN3ZXIoe1xuICAgICAgICAgICAgICAgICAgICBvZmZlclRvUmVjZWl2ZUF1ZGlvOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgb2ZmZXJUb1JlY2VpdmVWaWRlbzogZmFsc2VcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pLnRoZW4oYW5zd2VyID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIFNldCBsb2NhbCBTRFAgYW5zd2VyIFslc10nLCB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0cmVhbUlkLCBhbnN3ZXIuc2RwKTtcblxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuZW5kUG9pbnQudmFsdWUuc2V0UmVtb3RlRGVzY3JpcHRpb24oc3RyZWFtLCBhbnN3ZXIpO1xuICAgICAgICAgICAgICAgIH0pLnRoZW4oKHtzdGF0dXMsIHNlc3Npb25EZXNjcmlwdGlvbn0pID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RhdGUudmFsdWUgPSB0aGlzLm1hcFNldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzVG9QdWJsaXNoZXJTdGF0dXMoc3RhdHVzKTtcblxuICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cyAhPT0gJ29rJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnB1Ymxpc2hpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdGFuZGJ5LnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdG9wcGVkLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBTZXQgbG9jYWwgU0RQIFslc10nLCB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0cmVhbUlkLCBzZXNzaW9uRGVzY3JpcHRpb24uc2RwKTtcblxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHBlZXJDb25uZWN0aW9uLnNldExvY2FsRGVzY3JpcHRpb24oc2Vzc2lvbkRlc2NyaXB0aW9uKVxuICAgICAgICAgICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gRmFpbGVkIHRvIHNldCBsb2NhbCBkZXNjcmlwdGlvbiBbJWpdIHdpdGggbWVzc2FnZSBbJXNdJywgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdHJlYW1JZCwgc2Vzc2lvbkRlc2NyaXB0aW9uLCBlLm1lc3NhZ2UpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgbGlzdGVuT25TdHJlYW1TZXR1cC5zdWNjZXNzKHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RyZWFtSWQpO1xuXG4gICAgICAgICAgICAgIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RhdGUudmFsdWUgPSBQdWJsaXNoZXJTdGF0ZS5QdWJsaXNoaW5nO1xuICAgICAgICAgICAgICB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnB1Ymxpc2hpbmcudmFsdWUgPSB0cnVlO1xuXG4gICAgICAgICAgICAgIGNvbnN0IHJ0Y1B1Ymxpc2hNb25pdG9yID0gbmV3IFJ0Y1B1Ymxpc2hNb25pdG9yKHBlZXJDb25uZWN0aW9uLCB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQubWVkaWFTdHJlYW0udmFsdWUsIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuZW5kUG9pbnQudmFsdWUucm91bmRUcmlwVGltZSAvIDQpO1xuXG4gICAgICAgICAgICAgIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuZGlzcG9zYWJsZXMuYWRkKHJ0Y1B1Ymxpc2hNb25pdG9yKTtcblxuICAgICAgICAgICAgICBjb25zdCBpZ25vcmVkID0gcnRjUHVibGlzaE1vbml0b3IucnRjU3RhdGlzdGljLnN1YnNjcmliZShzdGF0aXN0aWNzID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnJ0Y1N0YXRpc3RpY3MudmFsdWUgPSBzdGF0aXN0aWNzO1xuICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBhcHBseVJ0Y0NvbmZpZ3VyYXRpb24oXG4gICAgb3B0aW9uYWxQZWVyQ29ubmVjdGlvbjogSVBlZXJDb25uZWN0aW9uIHwgbnVsbCxcbiAgICBydGNDb25maWd1cmF0aW9uOiBSVENDb25maWd1cmF0aW9uKTogUHJvbWlzZTxJUGVlckNvbm5lY3Rpb24+IHtcbiAgICBpZiAoIW9wdGlvbmFsUGVlckNvbm5lY3Rpb24pIHtcbiAgICAgIHJ0Y0NvbmZpZ3VyYXRpb24gPSBSdGNDb25maWd1cmF0aW9uTWFuYWdlci50cnVuY2F0ZUljZVNlcnZlcnMocnRjQ29uZmlndXJhdGlvbik7XG5cbiAgICAgIHJldHVybiBTREsucGVlckNvbm5lY3Rpb25GYWN0b3J5LnZhbHVlLmNyZWF0ZVBlZXJDb25uZWN0aW9uKHJ0Y0NvbmZpZ3VyYXRpb24pO1xuICAgIH1cblxuICAgIGNvbnN0IG5ld1J0Y0NvbmZpZ3VyYXRpb24gPSB7XG4gICAgICAuLi5vcHRpb25hbFBlZXJDb25uZWN0aW9uLmdldENvbmZpZ3VyYXRpb24oKSxcbiAgICAgIC4uLnJ0Y0NvbmZpZ3VyYXRpb25cbiAgICB9O1xuXG4gICAgb3B0aW9uYWxQZWVyQ29ubmVjdGlvbi5zZXRDb25maWd1cmF0aW9uKG5ld1J0Y0NvbmZpZ3VyYXRpb24pO1xuXG4gICAgcmV0dXJuIG9wdGlvbmFsUGVlckNvbm5lY3Rpb247XG4gIH1cblxuICBwcml2YXRlIHJlY29ubmVjdFBlZXJDb25uZWN0aW9uKHBlZXJDb25uZWN0aW9uOiBJUGVlckNvbm5lY3Rpb24sIHJldHJ5Q2FsbGJhY2s6ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICBpZiAocGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlID09PSAnY2xvc2VkJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RhdGUudmFsdWUgPSBQdWJsaXNoZXJTdGF0ZS5SZWNvbm5lY3Rpbmc7XG5cbiAgICBpZiAodGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMgPCBTREsubWF4aW1hbE51bWJlck9mUGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyB8fCAhU0RLLmF1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbikge1xuICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMrKztcblxuICAgICAgY29uc3QgaXNDbGllbnRPZmZlckZsb3cgPSBwZWVyQ29ubmVjdGlvbi5jdXJyZW50TG9jYWxEZXNjcmlwdGlvbj8udHlwZSA9PT0gJ29mZmVyJztcblxuICAgICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LmNsaWVudE9mZmVyRGlzYWJsZWQgfHxcbiAgICAgICAgIXBlZXJDb25uZWN0aW9uLnN1cHBvcnRzU2V0Q29uZmlndXJhdGlvbiB8fFxuICAgICAgICAhcGVlckNvbm5lY3Rpb24uc3VwcG9ydHNHZXRDb25maWd1cmF0aW9uIHx8XG4gICAgICAgICFpc0NsaWVudE9mZmVyRmxvd1xuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IHJlY29ubmVjdFBlZXJDb25uZWN0aW9uVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMucmVjb25uZWN0UGVlckNvbm5lY3Rpb24ocGVlckNvbm5lY3Rpb24sIHJldHJ5Q2FsbGJhY2spO1xuICAgICAgICB9LCBzb2Z0UmVzdGFydEludGVydmFsKTtcblxuICAgICAgICB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LmRpc3Bvc2FibGVzLmFkZChuZXcgRGlzcG9zYWJsZSgoKSA9PiBjbGVhclRpbWVvdXQocmVjb25uZWN0UGVlckNvbm5lY3Rpb25UaW1lb3V0KSkpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1JlY29ubmVjdGluZyBwZWVyIGNvbm5lY3Rpb24gYnkgcmVzdGFydGluZyBJQ0UnKTtcblxuICAgICAgY29uc3QgY3VycmVudExvY2FsRGVzY3JpcHRpb24gPSBwZWVyQ29ubmVjdGlvbi5jdXJyZW50TG9jYWxEZXNjcmlwdGlvbjtcbiAgICAgIGNvbnN0IGlnbm9yZWQgPSBwZWVyQ29ubmVjdGlvbi5jcmVhdGVPZmZlcih7aWNlUmVzdGFydDogdHJ1ZX0pLnRoZW4ob2ZmZXIgPT4ge1xuICAgICAgICByZXR1cm4gcGVlckNvbm5lY3Rpb24uc2V0TG9jYWxEZXNjcmlwdGlvbihvZmZlcikudGhlbigoKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHBlZXJDb25uZWN0aW9uLnNldExvY2FsRGVzY3JpcHRpb24oY3VycmVudExvY2FsRGVzY3JpcHRpb24pXG4gICAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChwZWVyQ29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGUgPT09ICdkaXNjb25uZWN0ZWQnIHx8IHBlZXJDb25uZWN0aW9uLmljZUNvbm5lY3Rpb25TdGF0ZSA9PT0gJ2ZhaWxlZCcpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZWNvbm5lY3RQZWVyQ29ubmVjdGlvblRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMucmVjb25uZWN0UGVlckNvbm5lY3Rpb24ocGVlckNvbm5lY3Rpb24sIHJldHJ5Q2FsbGJhY2spO1xuICAgICAgICAgICAgICAgIH0sIHNvZnRSZXN0YXJ0SW50ZXJ2YWwpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5kaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4gY2xlYXJUaW1lb3V0KHJlY29ubmVjdFBlZXJDb25uZWN0aW9uVGltZW91dCkpKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0YXRlLnZhbHVlID0gUHVibGlzaGVyU3RhdGUuUHVibGlzaGluZztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHJlY29ubmVjdCBwZWVyIGNvbm5lY3Rpb24nLCBlKTtcbiAgICAgICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyA9IDA7XG4gICAgICAgICAgcmV0cnlDYWxsYmFjaygpO1xuICAgICAgICB9KTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdGYWlsZWQgdG8gcmVjb25uZWN0IHBlZXIgY29ubmVjdGlvbiBhZnRlciBbJXNdIGF0dGVtcHRzLCBwZXJmb3JtaW5nIGZ1bGwgcmVjb3ZlcnknLCB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyk7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMgPSAwO1xuICAgIHJldHJ5Q2FsbGJhY2soKTtcbiAgfVxuXG4gIHByaXZhdGUgbWFwU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXNUb1B1Ymxpc2hlclN0YXR1cyhzdGF0dXM6IFNldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzKTogUHVibGlzaGVyU3RhdGUge1xuICAgIHN3aXRjaCAoc3RhdHVzKSB7XG4gICAgICBjYXNlICdvayc6XG4gICAgICAgIHJldHVybiBQdWJsaXNoZXJTdGF0ZS5TdGFydGluZztcbiAgICAgIGNhc2UgJ3VuYXV0aG9yaXplZCc6XG4gICAgICAgIHJldHVybiBQdWJsaXNoZXJTdGF0ZS5VbmF1dGhvcml6ZWQ7XG4gICAgICBjYXNlICdub3QtZm91bmQnOlxuICAgICAgICByZXR1cm4gUHVibGlzaGVyU3RhdGUuTm90Rm91bmQ7XG4gICAgICBjYXNlICdjYXBhY2l0eSc6XG4gICAgICBjYXNlICdyYXRlLWxpbWl0ZWQnOlxuICAgICAgY2FzZSAndGltZW91dCc6XG4gICAgICAgIHJldHVybiBQdWJsaXNoZXJTdGF0ZS5SZWNvdmVyaW5nO1xuICAgICAgY2FzZSAnZmFpbGVkJzpcbiAgICAgICAgcmV0dXJuIFB1Ymxpc2hlclN0YXRlLkVycm9yO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUoc3RhdHVzKTtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBDaGFubmVsQ29udGV4dCBmcm9tICcuLi9jb250ZXh0L0NoYW5uZWxDb250ZXh0JztcbmltcG9ydCBEaXNjb3ZlcnkgZnJvbSAnLi4vZGlzY292ZXJ5L0Rpc2NvdmVyeSc7XG5pbXBvcnQgRGlzcG9zYWJsZSBmcm9tICcuLi8uLi9sYW5nL0Rpc3Bvc2FibGUnO1xuaW1wb3J0IERpc3Bvc2FibGVMaXN0IGZyb20gJy4uLy4uL2xhbmcvRGlzcG9zYWJsZUxpc3QnO1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IENoYW5uZWxTdGF0ZSBmcm9tICcuLi9jaGFubmVscy9DaGFubmVsU3RhdGUnO1xuaW1wb3J0IHtDaHVua2VkU3RyZWFtaW5nfSBmcm9tICcuL0NodW5rZWRTdHJlYW1pbmcnO1xuaW1wb3J0IHtDaHVua2VkU3RyZWFtaW5nU3RhdGlzdGljc30gZnJvbSAnLi9TdHJlYW1UeXBlcyc7XG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5pbXBvcnQge0lTdHJlYW19IGZyb20gJy4vSVN0cmVhbSc7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IHtOZXR3b3JrU3RhdGVzfSBmcm9tICcuL05ldHdvcmtTdGF0ZXMnO1xuaW1wb3J0IENodW5rZWRTdHJlYW1QbGF5YmFja01vZGUgZnJvbSAnLi9DaHVua2VkU3RyZWFtUGxheWJhY2tNb2RlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2h1bmtlZFN0cmVhbSBpbXBsZW1lbnRzIElTdHJlYW0ge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignQ2h1bmtlZFN0cmVhbScpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9jaGFubmVsQ29udGV4dDogQ2hhbm5lbENvbnRleHQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NodW5rZWRTdHJlYW1QbGF5YmFja01vZGU6IENodW5rZWRTdHJlYW1QbGF5YmFja01vZGU7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21vbml0b3JEaXNwb3NhYmxlcyA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9oYW5kbGVTdHJlYW1GYWlsdXJlOiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xuICBwcml2YXRlIF9zdHJlYW1TdGF0aXN0aWNzOiBDaHVua2VkU3RyZWFtaW5nU3RhdGlzdGljcztcbiAgcHJpdmF0ZSBfbW9uaXRvckZhaWx1cmVDb3VudCA9IDA7XG5cbiAgY29uc3RydWN0b3IoY2hhbm5lbENvbnRleHQsIGNodW5rZWRTdHJlYW1QbGF5YmFja01vZGU6IENodW5rZWRTdHJlYW1QbGF5YmFja01vZGUsIGhhbmRsZVN0cmVhbUZhaWx1cmU6ICgpID0+IFByb21pc2U8dm9pZD4pIHtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dCA9IGNoYW5uZWxDb250ZXh0O1xuICAgIHRoaXMuX2NodW5rZWRTdHJlYW1QbGF5YmFja01vZGUgPSBjaHVua2VkU3RyZWFtUGxheWJhY2tNb2RlO1xuICAgIHRoaXMuX2hhbmRsZVN0cmVhbUZhaWx1cmUgPSBoYW5kbGVTdHJlYW1GYWlsdXJlO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmRpc3Bvc2FibGVzLmFkZCh0aGlzKTtcbiAgfVxuXG4gIHN0YXJ0KHVyaTogVVJMLCB0b2tlbjogc3RyaW5nKTogUHJvbWlzZTx2b2lkIHwgSURpc3Bvc2FibGU+IHtcbiAgICByZXR1cm4gRGlzY292ZXJ5LmRpc2NvdmVyQ2xvc2VzdEVuZFBvaW50V2l0aENhY2hpbmcodXJpKVxuICAgICAgLnRoZW4oZW5kUG9pbnQgPT4ge1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5vbmxpbmUudmFsdWUgPSB0cnVlO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZSA9IGVuZFBvaW50O1xuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ29ubmVjdGluZyB0byBbJXNdJywgZW5kUG9pbnQudG9TdHJpbmcoKSk7XG5cbiAgICAgICAgcmV0dXJuIGVuZFBvaW50LnN1YnNjcmliZSh0b2tlbiwgbnVsbCwgdGhpcy5fY2hhbm5lbENvbnRleHQuZmFpbHVyZUNvdW50LnZhbHVlKTtcbiAgICAgIH0pXG4gICAgICAudGhlbigoe3N0YXR1cywgc3RyZWFtLCBjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UsIGxhZ30pID0+IHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlID0gc3RyZWFtO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sYWcudmFsdWUgPSBsYWc7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXBwbHlTZXNzaW9uQW5kU3RyZWFtUHJvcGVydGllc1RvVmlkZW9FbGVtZW50KCk7XG5cbiAgICAgICAgdGhpcy5fbG9nZ2VyLmRlYnVnKFxuICAgICAgICAgICdbJXNdIFN1YnNjcmliZSBjb21wbGV0ZWQgWyVzXSBbJWpdIFslal0gWyVqXSBbJWpdJyxcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCxcbiAgICAgICAgICBzdGF0dXMsXG4gICAgICAgICAgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLFxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gdGhpcy5fY2hhbm5lbENvbnRleHQubWFwU3Vic2NyaWJlU3RhdHVzVG9DaGFubmVsU3RhdHVzKHN0YXR1cyk7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXBwbHlTdGF0dXMoc3RhdHVzKTtcblxuICAgICAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgb2ZmZXJTZHAgPSBjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uLnNkcDtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgICBvcmlnaW5TdGFydFRpbWU6IERhdGUubm93KCkgLSBsYWcgKyB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZS5yb3VuZFRyaXBUaW1lIC8gMixcbiAgICAgICAgICBsYWdcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gQ2h1bmtlZFN0cmVhbWluZy5zdGFydCh0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBvZmZlclNkcCwgb3B0aW9ucylcbiAgICAgICAgICAudGhlbihwbGF5ZXIgPT4ge1xuICAgICAgICAgICAgdGhpcy5tb25pdG9yKHBsYXllcik7XG5cbiAgICAgICAgICAgIHJldHVybiBwbGF5ZXI7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0NodW5rZWRTdHJlYW1pbmcgZmFpbGVkJywgZSk7XG4gICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5TdG9wcGVkO1xuICAgICAgICAgIH0pO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIG1vbml0b3IocGxheWVyOiBJRGlzcG9zYWJsZSk6IHZvaWQge1xuICAgIHRoaXMuX21vbml0b3JEaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG5cbiAgICBjb25zdCB0aW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY29uc3QgbmV3U3RyZWFtU3RhdGlzdGljcyA9IENodW5rZWRTdHJlYW1pbmcuZ2V0U3RhdHMoKTtcblxuICAgICAgaWYgKHRoaXMuX2NodW5rZWRTdHJlYW1QbGF5YmFja01vZGUgPT09IENodW5rZWRTdHJlYW1QbGF5YmFja01vZGUuTGl2ZVxuICAgICAgICAgICYmIG5ld1N0cmVhbVN0YXRpc3RpY3MubmV0d29ya1N0YXRlID09PSBOZXR3b3JrU3RhdGVzLk5ldHdvcmtOb1NvdXJjZVxuICAgICAgICAgICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5jdXJyZW50VGltZSA9PT0gdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLmR1cmF0aW9uXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5fbW9uaXRvckZhaWx1cmVDb3VudCA9IDA7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkNvbm5lY3Rpb25FcnJvcjtcblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSB0cnVlO1xuICAgICAgICBwbGF5ZXIuZGlzcG9zZSgpO1xuICAgICAgICB0aGlzLl9tb25pdG9yRGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuXG4gICAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9oYW5kbGVTdHJlYW1GYWlsdXJlKClcbiAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCBoYW5kbGluZyBlbmQgb2Ygc3RyZWFtJywgZSk7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5fc3RyZWFtU3RhdGlzdGljcyAmJlxuICAgICAgICAhdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnBhdXNlZCAmJlxuICAgICAgICB0aGlzLl9zdHJlYW1TdGF0aXN0aWNzLmN1cnJlbnRUaW1lID49IG5ld1N0cmVhbVN0YXRpc3RpY3MuY3VycmVudFRpbWUgJiZcbiAgICAgICAgICAodGhpcy5fc3RyZWFtU3RhdGlzdGljcy5kYXRhQnVmZmVyZWQgPj0gbmV3U3RyZWFtU3RhdGlzdGljcy5kYXRhQnVmZmVyZWQgfHwgIW5ld1N0cmVhbVN0YXRpc3RpY3MuZGF0YUJ1ZmZlcmVkKVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuX21vbml0b3JGYWlsdXJlQ291bnQrKztcblxuICAgICAgICBpZiAodGhpcy5fbW9uaXRvckZhaWx1cmVDb3VudCA+IDQpIHtcbiAgICAgICAgICB0aGlzLl9tb25pdG9yRmFpbHVyZUNvdW50ID0gMDtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5Db25uZWN0aW9uRXJyb3I7XG5cbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgcGxheWVyLmRpc3Bvc2UoKTtcbiAgICAgICAgICB0aGlzLl9tb25pdG9yRGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuXG4gICAgICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX2hhbmRsZVN0cmVhbUZhaWx1cmUoKVxuICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCBoYW5kbGluZyBzdHJlYW0gZmFpbHVyZScsIGUpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX21vbml0b3JGYWlsdXJlQ291bnQgPSAwO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnBhdXNlZCAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9PT0gQ2hhbm5lbFN0YXRlLlBsYXlpbmcpIHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuUGF1c2VkO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5wYXVzZWQgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgIT09IENoYW5uZWxTdGF0ZS5QbGF5aW5nKSB7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlBsYXlpbmc7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3N0cmVhbVN0YXRpc3RpY3MgPSBuZXdTdHJlYW1TdGF0aXN0aWNzO1xuXG4gICAgICB0aGlzLm1vbml0b3IocGxheWVyKTtcbiAgICB9LCAxMDAwKTtcblxuICAgIHRoaXMuX21vbml0b3JEaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4ge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgIH0pKTtcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fbW9uaXRvckRpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuZW51bSBDaHVua2VkU3RyZWFtUGxheWJhY2tNb2RlIHtcbiAgICBMaXZlID0gMSxcbiAgICBPbmREZW1hbmQgPSAyXG59XG5cbmV4cG9ydCBkZWZhdWx0IENodW5rZWRTdHJlYW1QbGF5YmFja01vZGU7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgRmVhdHVyZUVuYWJsZW1lbnQgZnJvbSAnLi4vLi4vZW52aXJvbm1lbnQvRmVhdHVyZUVuYWJsZW1lbnQnO1xuaW1wb3J0IFdlYlBsYXllciBmcm9tICcuL1dlYlBsYXllcic7XG5pbXBvcnQgU0RLIGZyb20gJy4uL1NESyc7XG5pbXBvcnQgU2hha2FQbGF5ZXIgZnJvbSAnLi9TaGFrYVBsYXllcic7XG5pbXBvcnQgSGxzUGxheWVyIGZyb20gJy4vSGxzUGxheWVyJztcbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuLi8uLi9sYW5nL0lEaXNwb3NhYmxlJztcbmltcG9ydCB7SGxzUGxheWVyVHlwZSwgQ2h1bmtlZFN0cmVhbWluZ09wdGlvbnMsIENodW5rZWRTdHJlYW1pbmdTdGF0aXN0aWNzLCBTaGFrYVR5cGUsIFdlYlBsYXllclR5cGV9IGZyb20gJy4vU3RyZWFtVHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgQ2h1bmtlZFN0cmVhbWluZyB7XG4gIHByaXZhdGUgc3RhdGljIF9wZW5kaW5nID0gZmFsc2U7XG4gIHByaXZhdGUgc3RhdGljIF9obHNQbGF5ZXI6IEhsc1BsYXllclR5cGU7XG4gIHByaXZhdGUgc3RhdGljIF9waGVuaXhXZWJQbGF5ZXI6IFdlYlBsYXllclR5cGU7XG4gIHByaXZhdGUgc3RhdGljIF9zaGFrYTogU2hha2FUeXBlO1xuICBwcml2YXRlIHN0YXRpYyBfb3B0aW9uczogQ2h1bmtlZFN0cmVhbWluZ09wdGlvbnM7XG4gIHByaXZhdGUgc3RhdGljIF9wbGF5ZXI6IFNoYWthUGxheWVyIHwgV2ViUGxheWVyIHwgSGxzUGxheWVyO1xuXG4gIHN0YXRpYyBnZXQgaGxzUGxheWVyKCk6IEhsc1BsYXllclR5cGUge1xuICAgIHJldHVybiB0aGlzLl9obHNQbGF5ZXI7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHBoZW5peFdlYlBsYXllcigpOiBXZWJQbGF5ZXJUeXBlIHtcbiAgICByZXR1cm4gdGhpcy5fcGhlbml4V2ViUGxheWVyO1xuICB9XG5cbiAgc3RhdGljIGdldCBzaGFrYSgpOiBTaGFrYVR5cGUge1xuICAgIHJldHVybiB0aGlzLl9zaGFrYTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBzdGFydCh2aWRlb0VsZW1lbnQ6IEhUTUxWaWRlb0VsZW1lbnQsIHN0cmVhbUlkOiBzdHJpbmcsIG9mZmVyU2RwOiBzdHJpbmcsIG9wdGlvbnM6IENodW5rZWRTdHJlYW1pbmdPcHRpb25zKTogUHJvbWlzZTxJRGlzcG9zYWJsZT4ge1xuICAgIHRoaXMuX29wdGlvbnMgPSBvcHRpb25zO1xuXG4gICAgaWYgKHRoaXMuX2hsc1BsYXllciB8fCB0aGlzLl9zaGFrYSB8fCB0aGlzLl9waGVuaXhXZWJQbGF5ZXIpIHtcbiAgICAgIHJldHVybiB0aGlzLmxvYWRlZCh2aWRlb0VsZW1lbnQsIHN0cmVhbUlkLCBvZmZlclNkcCk7XG4gICAgfVxuXG4gICAgaWYgKCFTREsud2ViUGxheWVyTG9hZGVyICYmICFTREsuc2hha2FQbGF5ZXJMb2FkZXIgJiYgIVNESy5obHNKc0xvYWRlcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZC1mZWF0dXJlLCBhZGQgc3RyZWFtIHBsYXllcicpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgIGlmIChTREsuaGxzSnNMb2FkZXIpIHtcbiAgICAgICAgdGhpcy5fcGVuZGluZyA9IHRydWU7XG4gICAgICAgIFNESy5obHNKc0xvYWRlcihwbGF5ZXIgPT4ge1xuICAgICAgICAgIHRoaXMuX2hsc1BsYXllciA9IHBsYXllcjtcblxuICAgICAgICAgIGlmICh0aGlzLl9wZW5kaW5nKSB7XG4gICAgICAgICAgICB0aGlzLl9wZW5kaW5nID0gZmFsc2U7XG5cbiAgICAgICAgICAgIHJlc29sdmUodGhpcy5sb2FkZWQodmlkZW9FbGVtZW50LCBzdHJlYW1JZCwgb2ZmZXJTZHApKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoU0RLLndlYlBsYXllckxvYWRlcikge1xuICAgICAgICB0aGlzLl9wZW5kaW5nID0gdHJ1ZTtcbiAgICAgICAgU0RLLndlYlBsYXllckxvYWRlcihwbGF5ZXIgPT4ge1xuICAgICAgICAgIHRoaXMuX3BoZW5peFdlYlBsYXllciA9IHBsYXllcjtcblxuICAgICAgICAgIGlmICh0aGlzLl9wZW5kaW5nKSB7XG4gICAgICAgICAgICB0aGlzLl9wZW5kaW5nID0gZmFsc2U7XG5cbiAgICAgICAgICAgIHJlc29sdmUodGhpcy5sb2FkZWQodmlkZW9FbGVtZW50LCBzdHJlYW1JZCwgb2ZmZXJTZHApKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoU0RLLnNoYWthUGxheWVyTG9hZGVyKSB7XG4gICAgICAgIHRoaXMuX3BlbmRpbmcgPSB0cnVlO1xuICAgICAgICBTREsuc2hha2FQbGF5ZXJMb2FkZXIocGxheWVyID0+IHtcbiAgICAgICAgICB0aGlzLl9zaGFrYSA9IHBsYXllcjtcblxuICAgICAgICAgIGlmICh0aGlzLl9wZW5kaW5nKSB7XG4gICAgICAgICAgICB0aGlzLl9wZW5kaW5nID0gZmFsc2U7XG5cbiAgICAgICAgICAgIHJlc29sdmUodGhpcy5sb2FkZWQodmlkZW9FbGVtZW50LCBzdHJlYW1JZCwgb2ZmZXJTZHApKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGdldFN0YXRzKCk6IENodW5rZWRTdHJlYW1pbmdTdGF0aXN0aWNzIHtcbiAgICBpZiAodGhpcy5fcGxheWVyKSB7XG4gICAgICByZXR1cm4gdGhpcy5fcGxheWVyLmdldFN0YXRzKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBhc3luYyBwbGF5KFBsYXllcjogdHlwZW9mIFdlYlBsYXllciB8IHR5cGVvZiBTaGFrYVBsYXllciB8IHR5cGVvZiBIbHNQbGF5ZXIsIHZpZGVvRWxlbWVudDogSFRNTFZpZGVvRWxlbWVudCwgc3RyZWFtSWQ6IHN0cmluZywgb2ZmZXJTZHA6IHN0cmluZywgb3B0aW9uczogQ2h1bmtlZFN0cmVhbWluZ09wdGlvbnMpOiBQcm9taXNlPElEaXNwb3NhYmxlPiB7XG4gICAgY29uc3QgZGFzaE1hbmlmZXN0VXJsTWF0Y2ggPSBvZmZlclNkcC5tYXRjaCgvYT14LXBsYXlsaXN0OihbXlxcbl0qWy5dbXBkXFw/P1teXFxzXSopL20pO1xuICAgIGNvbnN0IGhsc01hbmlmZXN0VXJsTWF0Y2ggPSBvZmZlclNkcC5tYXRjaCgvYT14LXBsYXlsaXN0OihbXlxcbl0qWy5dbTN1OFxcPz9bXlxcc10qKS9tKTtcbiAgICBjb25zdCBtYW5pZmVzdFVybCA9IGRhc2hNYW5pZmVzdFVybE1hdGNoICYmIGRhc2hNYW5pZmVzdFVybE1hdGNoWzFdID8gZGFzaE1hbmlmZXN0VXJsTWF0Y2hbMV0gOiAnJztcbiAgICBjb25zdCBwbGF5bGlzdFVybCA9IGhsc01hbmlmZXN0VXJsTWF0Y2ggJiYgaGxzTWFuaWZlc3RVcmxNYXRjaFsxXSA/IGhsc01hbmlmZXN0VXJsTWF0Y2hbMV0gOiAnJztcblxuICAgIGlmIChwbGF5bGlzdFVybCkge1xuICAgICAgaWYgKCF0aGlzLl9waGVuaXhXZWJQbGF5ZXIgfHwgRmVhdHVyZUVuYWJsZW1lbnQuc2hvdWxkVXNlTmF0aXZlSGxzKSB7XG4gICAgICAgIHRoaXMuX3BsYXllciA9IG5ldyBQbGF5ZXIodmlkZW9FbGVtZW50LCAnaGxzJywgc3RyZWFtSWQsIHBsYXlsaXN0VXJsLCBvcHRpb25zKTtcblxuICAgICAgICB0aGlzLl9wbGF5ZXIuc3RhcnQoKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5fcGxheWVyO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChtYW5pZmVzdFVybCkge1xuICAgICAgaWYgKCF0aGlzLl9obHNQbGF5ZXIgJiYgISh0aGlzLl9waGVuaXhXZWJQbGF5ZXIgJiYgRmVhdHVyZUVuYWJsZW1lbnQuc2hvdWxkVXNlTmF0aXZlSGxzKSkge1xuICAgICAgICB0aGlzLl9wbGF5ZXIgPSBuZXcgUGxheWVyKHZpZGVvRWxlbWVudCwgJ2Rhc2gnLCBzdHJlYW1JZCwgbWFuaWZlc3RVcmwsIG9wdGlvbnMpO1xuXG4gICAgICAgIHRoaXMuX3BsYXllci5zdGFydCgpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLl9wbGF5ZXI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG1hbmlmZXN0VXJsIHx8IHBsYXlsaXN0VXJsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFske3N0cmVhbUlkfV0gQ2Fubm90IHBsYXkgWyR7cGxheWxpc3RVcmwgPyAnSExTJyA6ICdEQVNIJ31dIHN0cmVhbSB3aXRoIGluY2x1ZGVkIHBsYXllcmApO1xuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcignTm8gc3RyZWFtIHBsYXlsaXN0IGZvdW5kJyk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBsb2FkZWQodmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50LCBzdHJlYW1JZDogc3RyaW5nLCBvZmZlclNkcDogc3RyaW5nKTogUHJvbWlzZTxJRGlzcG9zYWJsZT4ge1xuICAgIGlmICghdGhpcy5fc2hha2EgJiYgIXRoaXMuX3BoZW5peFdlYlBsYXllciAmJiAhdGhpcy5faGxzUGxheWVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2hsc1BsYXllcikge1xuICAgICAgcmV0dXJuIHRoaXMucGxheShIbHNQbGF5ZXIsIHZpZGVvRWxlbWVudCwgc3RyZWFtSWQsIG9mZmVyU2RwLCB7XG4gICAgICAgIC4uLnRoaXMuX29wdGlvbnMsXG4gICAgICAgIHByZWZlck5hdGl2ZTogRmVhdHVyZUVuYWJsZW1lbnQuc2hvdWxkVXNlTmF0aXZlSGxzXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fcGhlbml4V2ViUGxheWVyKSB7XG4gICAgICByZXR1cm4gdGhpcy5wbGF5KFdlYlBsYXllciwgdmlkZW9FbGVtZW50LCBzdHJlYW1JZCwgb2ZmZXJTZHAsIHtcbiAgICAgICAgLi4udGhpcy5fb3B0aW9ucyxcbiAgICAgICAgcHJlZmVyTmF0aXZlOiBGZWF0dXJlRW5hYmxlbWVudC5zaG91bGRVc2VOYXRpdmVIbHNcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9zaGFrYSkge1xuICAgICAgcmV0dXJuIHRoaXMucGxheShTaGFrYVBsYXllciwgdmlkZW9FbGVtZW50LCBzdHJlYW1JZCwgb2ZmZXJTZHAsIHtcbiAgICAgICAgLi4udGhpcy5fb3B0aW9ucyxcbiAgICAgICAgcHJlZmVyTmF0aXZlOiBGZWF0dXJlRW5hYmxlbWVudC5zaG91bGRVc2VOYXRpdmVIbHNcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtDaHVua2VkU3RyZWFtaW5nfSBmcm9tICcuL0NodW5rZWRTdHJlYW1pbmcnO1xuaW1wb3J0IHtDaHVua2VkU3RyZWFtaW5nT3B0aW9ucywgQ2h1bmtlZFN0cmVhbWluZ1N0YXRpc3RpY3N9IGZyb20gJy4vU3RyZWFtVHlwZXMnO1xuaW1wb3J0IHtJSGxzUGxheWVyVHlwZX0gZnJvbSAnLi9JSGxzUGxheWVyJztcbmltcG9ydCB7TmV0d29ya1N0YXRlc30gZnJvbSAnLi9OZXR3b3JrU3RhdGVzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSGxzUGxheWVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfdmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50O1xuICBwcml2YXRlIHJlYWRvbmx5IF9raW5kOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N0cmVhbUlkOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21hbmlmZXN0VVJJOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX29wdGlvbnM6IENodW5rZWRTdHJlYW1pbmdPcHRpb25zO1xuICBwcml2YXRlIF9wbGF5ZXI6IElIbHNQbGF5ZXJUeXBlO1xuXG4gIGNvbnN0cnVjdG9yKHZpZGVvRWxlbWVudDogSFRNTFZpZGVvRWxlbWVudCwga2luZDogc3RyaW5nLCBzdHJlYW1JZDogc3RyaW5nLCBtYW5pZmVzdFVSSTogc3RyaW5nLCBvcHRpb25zOiBDaHVua2VkU3RyZWFtaW5nT3B0aW9ucykge1xuICAgIHRoaXMuX3ZpZGVvRWxlbWVudCA9IHZpZGVvRWxlbWVudDtcbiAgICB0aGlzLl9raW5kID0ga2luZDtcbiAgICB0aGlzLl9zdHJlYW1JZCA9IHN0cmVhbUlkO1xuICAgIHRoaXMuX21hbmlmZXN0VVJJID0gZW5jb2RlVVJJKG1hbmlmZXN0VVJJKS5yZXBsYWNlKC9bI10vZywgJyUyMycpO1xuICAgIHRoaXMuX29wdGlvbnMgPSBvcHRpb25zO1xuICB9XG5cbiAgc3RhcnQoKTogdm9pZCB7XG4gICAgaWYgKENodW5rZWRTdHJlYW1pbmcuaGxzUGxheWVyKSB7XG4gICAgICBpZiAoQ2h1bmtlZFN0cmVhbWluZy5obHNQbGF5ZXIuaXNTdXBwb3J0ZWQoKSkge1xuICAgICAgICB0aGlzLl9wbGF5ZXIgPSBuZXcgQ2h1bmtlZFN0cmVhbWluZy5obHNQbGF5ZXIoe1xuICAgICAgICAgIGVuYWJsZVdvcmtlcjogdHJ1ZSxcbiAgICAgICAgICBtYXhCdWZmZXJMZW5ndGg6IDEsXG4gICAgICAgICAgYmFja0J1ZmZlckxlbmd0aDogMCxcbiAgICAgICAgICBsaXZlU3luY0R1cmF0aW9uOiA3LFxuICAgICAgICAgIGxpdmVEdXJhdGlvbkluZmluaXR5OiB0cnVlLFxuICAgICAgICAgIGxpdmVNYXhMYXRlbmN5RHVyYXRpb246IEluZmluaXR5LFxuICAgICAgICAgIGhpZ2hCdWZmZXJXYXRjaGRvZ1BlcmlvZDogMVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fcGxheWVyLmxvYWRTb3VyY2UodGhpcy5fbWFuaWZlc3RVUkkpO1xuICAgICAgICB0aGlzLl9wbGF5ZXIuYXR0YWNoTWVkaWEodGhpcy5fdmlkZW9FbGVtZW50KTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5fdmlkZW9FbGVtZW50LmNhblBsYXlUeXBlKCdhcHBsaWNhdGlvbi92bmQuYXBwbGUubXBlZ3VybCcpKSB7XG4gICAgICAgIHRoaXMuX3ZpZGVvRWxlbWVudC5zcmMgPSB0aGlzLl9tYW5pZmVzdFVSSTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpc1N1cHBvcnRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQ2h1bmtlZFN0cmVhbWluZy5obHNQbGF5ZXIgJiYgQ2h1bmtlZFN0cmVhbWluZy5obHNQbGF5ZXIuaXNTdXBwb3J0ZWQoKTtcbiAgfVxuXG4gIGdldFN0YXRzKCk6IENodW5rZWRTdHJlYW1pbmdTdGF0aXN0aWNzIHtcbiAgICBpZiAoIXRoaXMuX3BsYXllcikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgd2lkdGg6IDAsXG4gICAgICAgIGhlaWdodDogMCxcbiAgICAgICAgY3VycmVudFRpbWU6IDAuMCxcbiAgICAgICAgbGFnOiAwLjAsXG4gICAgICAgIG5ldHdvcmtTdGF0ZTogTmV0d29ya1N0YXRlcy5OZXR3b3JrTm9Tb3VyY2VcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdGlzdGljcyA9IHtcbiAgICAgIHdpZHRoOiB0aGlzLl9wbGF5ZXIubWVkaWEub2Zmc2V0V2lkdGgsXG4gICAgICBoZWlnaHQ6IHRoaXMuX3BsYXllci5tZWRpYS5vZmZzZXRIZWlnaHQsXG4gICAgICBjdXJyZW50VGltZTogdGhpcy5fcGxheWVyLm1lZGlhLmN1cnJlbnRUaW1lLFxuICAgICAgbGFnOiAwLjAsXG4gICAgICBuZXR3b3JrU3RhdGU6IE5ldHdvcmtTdGF0ZXMuTmV0d29ya0lkbGUsXG4gICAgICBkYXRhQnVmZmVyZWQ6IDAuMFxuICAgIH07XG5cbiAgICBpZiAodGhpcy5fdmlkZW9FbGVtZW50LmJ1ZmZlcmVkICYmIHRoaXMuX3ZpZGVvRWxlbWVudC5idWZmZXJlZC5sZW5ndGgpIHtcbiAgICAgIHN0YXRpc3RpY3MuZGF0YUJ1ZmZlcmVkID0gdGhpcy5fdmlkZW9FbGVtZW50LmJ1ZmZlcmVkLmVuZCgwKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fcGxheWVyLnN0cmVhbUNvbnRyb2xsZXIuc3RhdGUgPT09ICdJRExFJykge1xuICAgICAgc3RhdGlzdGljcy5uZXR3b3JrU3RhdGUgPSBOZXR3b3JrU3RhdGVzLk5ldHdvcmtJZGxlO1xuICAgIH0gZWxzZSBpZiAodGhpcy5fcGxheWVyLnN0cmVhbUNvbnRyb2xsZXIuc3RhdGUgPT09ICdFUlJPUicgfHwgdGhpcy5fcGxheWVyLnN0cmVhbUNvbnRyb2xsZXIuc3RhdGUgPT09ICdFTkRFRCcpIHtcbiAgICAgIHN0YXRpc3RpY3MubmV0d29ya1N0YXRlID0gTmV0d29ya1N0YXRlcy5OZXR3b3JrTm9Tb3VyY2U7XG4gICAgfSBlbHNlIGlmICh0aGlzLl9wbGF5ZXIuc3RyZWFtQ29udHJvbGxlci5zdGF0ZS5pbmNsdWRlcygnTE9BRElORycpIHx8IHRoaXMuX3BsYXllci5zdHJlYW1Db250cm9sbGVyLnN0YXRlLmluY2x1ZGVzKCdXQUlUSU5HJykpIHtcbiAgICAgIHN0YXRpc3RpY3MubmV0d29ya1N0YXRlID0gTmV0d29ya1N0YXRlcy5OZXR3b3JrTG9hZGluZztcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdGlzdGljcy5uZXR3b3JrU3RhdGUgPSBOZXR3b3JrU3RhdGVzLk5ldHdvcmtFbXB0eTtcbiAgICB9XG5cbiAgICBjb25zdCBjdXJyZW50VGltZSA9IHRoaXMuX3ZpZGVvRWxlbWVudFsnY3VycmVudFRpbWUnXSB8fCAwO1xuICAgIGNvbnN0IHRydWVDdXJyZW50VGltZSA9IChEYXRlLm5vdygpIC0gdGhpcy5fb3B0aW9ucy5vcmlnaW5TdGFydFRpbWUpIC8gMTAwMDtcblxuICAgIHN0YXRpc3RpY3MubGFnID0gTWF0aC5tYXgoMC4wLCAoY3VycmVudFRpbWUgKyAodGhpcy5fb3B0aW9ucy5sYWcgLyAxMDAwKSkgLSB0cnVlQ3VycmVudFRpbWUpO1xuXG4gICAgcmV0dXJuIHN0YXRpc3RpY3M7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9wbGF5ZXIgJiYgdGhpcy5fcGxheWVyLmRlc3Ryb3kpIHtcbiAgICAgIHRoaXMuX3BsYXllci5kZXN0cm95KCk7XG5cbiAgICAgIHRoaXMuX3BsYXllciA9IG51bGw7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmV4cG9ydCBlbnVtIE5ldHdvcmtTdGF0ZXMge1xuICBOZXR3b3JrRW1wdHksXG4gIE5ldHdvcmtJZGxlLFxuICBOZXR3b3JrTG9hZGluZyxcbiAgTmV0d29ya05vU291cmNlXG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uIGZyb20gJy4uLy4uL3J0Yy9JUGVlckNvbm5lY3Rpb24nO1xuaW1wb3J0IFNESyBmcm9tICcuLi9TREsnO1xuaW1wb3J0IERpc3Bvc2FibGVMaXN0IGZyb20gJy4uLy4uL2xhbmcvRGlzcG9zYWJsZUxpc3QnO1xuaW1wb3J0IEdhcmJhZ2VDb2xsZWN0b3JNYW5hZ2VyIGZyb20gJy4uLy4uL2RvbS9HYXJiYWdlQ29sbGVjdG9yTWFuYWdlcic7XG5pbXBvcnQge0lTdHJlYW19IGZyb20gJy4vSVN0cmVhbSc7XG5pbXBvcnQge1NldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzfSBmcm9tICcuLi9kaXNjb3ZlcnkvRW5kUG9pbnQnO1xuaW1wb3J0IFBlZXJDb25uZWN0aW9uU2VydmljZSBmcm9tICcuLi8uLi9ydGMvUGVlckNvbm5lY3Rpb25TZXJ2aWNlJztcbmltcG9ydCBEaXNjb3ZlcnkgZnJvbSAnLi4vZGlzY292ZXJ5L0Rpc2NvdmVyeSc7XG5pbXBvcnQgRmVhdHVyZUVuYWJsZW1lbnQgZnJvbSAnLi4vLi4vZW52aXJvbm1lbnQvRmVhdHVyZUVuYWJsZW1lbnQnO1xuaW1wb3J0IENoYW5uZWxTdGF0ZSBmcm9tICcuLi9jaGFubmVscy9DaGFubmVsU3RhdGUnO1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uLy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuaW1wb3J0IFJ0Y0Nvbm5lY3Rpb25Nb25pdG9yIGZyb20gJy4uLy4uL3J0Yy9SdGNDb25uZWN0aW9uTW9uaXRvcic7XG5pbXBvcnQgRHVyYXRpb25zIGZyb20gJy4uLy4uL3RpbWUvRHVyYXRpb24nO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCBDaGFubmVsQ29udGV4dCBmcm9tICcuLi9jb250ZXh0L0NoYW5uZWxDb250ZXh0JztcbmltcG9ydCBSdGNDb25maWd1cmF0aW9uTWFuYWdlciBmcm9tICcuLi8uLi9ydGMvUnRjQ29uZmlndXJhdGlvbk1hbmFnZXInO1xuaW1wb3J0IFBlZXJDb25uZWN0aW9uQ29udGV4dCBmcm9tICcuLi9jb250ZXh0L1BlZXJDb25uZWN0aW9uQ29udGV4dCc7XG5pbXBvcnQgU3RyZWFtVHJhbnNmb3JtQ29udGV4dCBmcm9tICcuLi9jb250ZXh0L1N0cmVhbVRyYW5zZm9ybUNvbnRleHQnO1xuaW1wb3J0IEluc2VydGFibGVTdHJlYW1zIGZyb20gJy4uL3RyYW5zZm9ybWF0aW9uL0luc2VydGFibGVTdHJlYW1zJztcbmltcG9ydCBTZHBQYXJzZXIgZnJvbSAnLi4vLi4vcnRjL1NkcFBhcnNlcic7XG5cbmNvbnN0IGljZUNhbmRpZGF0ZUFjY3VtdWxhdGlvbkludGVydmFsID0gMTAwO1xuY29uc3QgZGVmYXVsdFN0cmVhbVNldHVwVGltZW91dCA9IDMwMDAwO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZWFsVGltZVN0cmVhbSBpbXBsZW1lbnRzIElTdHJlYW0ge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignUmVhbFRpbWVTdHJlYW0nKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfY2hhbm5lbENvbnRleHQ6IENoYW5uZWxDb250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9wZWVyQ29ubmVjdGlvbkNvbnRleHQ6IFBlZXJDb25uZWN0aW9uQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfc3RyZWFtVHJhbnNmb3JtQ29udGV4dDogU3RyZWFtVHJhbnNmb3JtQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfaGFuZGxlU3RyZWFtRmFpbHVyZTogKCkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0O1xuXG4gIGNvbnN0cnVjdG9yKGNoYW5uZWxDb250ZXh0LCBwZWVyQ29ubmVjdGlvbkNvbnRleHQsIHN0cmVhbVRyYW5zZm9ybUNvbnRleHQsIGhhbmRsZVN0cmVhbUZhaWx1cmU6ICgpID0+IFByb21pc2U8dm9pZD4pIHtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dCA9IGNoYW5uZWxDb250ZXh0O1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dCA9IHBlZXJDb25uZWN0aW9uQ29udGV4dDtcbiAgICB0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0ID0gc3RyZWFtVHJhbnNmb3JtQ29udGV4dDtcbiAgICB0aGlzLl9oYW5kbGVTdHJlYW1GYWlsdXJlID0gaGFuZGxlU3RyZWFtRmFpbHVyZTtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcyA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmRpc3Bvc2FibGVzLmFkZCh0aGlzKTtcbiAgfVxuXG4gIHN0YXJ0KHVyaSwgdG9rZW4sIGxpc3Rlbk9uU3RyZWFtU2V0dXAsIHBsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgZW5jb2RlZEluc2VydGFibGVTdHJlYW1zID0gdHlwZW9mIHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuZW5jb2RlZFZpZGVvU3RyZWFtU2luayA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgdGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5lbmNvZGVkQXVkaW9TdHJlYW1TaW5rID09PSAnZnVuY3Rpb24nO1xuXG4gICAgcmV0dXJuIFByb21pc2UuYWxsKFtcbiAgICAgIERpc2NvdmVyeS5kaXNjb3ZlckNsb3Nlc3RFbmRQb2ludFdpdGhDYWNoaW5nKHVyaSksXG4gICAgICBQZWVyQ29ubmVjdGlvblNlcnZpY2UuY3JlYXRlUGVlckNvbm5lY3Rpb25PZmZlcigncmVjdm9ubHknLCBlbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXMpXG4gICAgICAgIC50aGVuKCh7bG9jYWxPZmZlciwgcGVlckNvbm5lY3Rpb259KSA9PiB7XG4gICAgICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlID0gcGVlckNvbm5lY3Rpb247XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbG9jYWxPZmZlcixcbiAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uXG4gICAgICAgICAgfTtcbiAgICAgICAgfSlcbiAgICBdKVxuICAgICAgLnRoZW4oKFtlbmRQb2ludCwge2xvY2FsT2ZmZXIsIHBlZXJDb25uZWN0aW9ufV0pID0+IHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQub25saW5lLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUgPSBlbmRQb2ludDtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0Nvbm5lY3RpbmcgdG8gWyVzXScsIGVuZFBvaW50LnRvU3RyaW5nKCkpO1xuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnTG9jYWwgb2ZmZXI6XFxuJyArIGxvY2FsT2ZmZXIuc2RwKTtcblxuICAgICAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQuY2xpZW50T2ZmZXJEaXNhYmxlZCB8fCAhcGVlckNvbm5lY3Rpb24uc3VwcG9ydHNTZXRDb25maWd1cmF0aW9uIHx8ICFwZWVyQ29ubmVjdGlvbi5zdXBwb3J0c0dldENvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5jbG9zZSgpO1xuICAgICAgICAgIHBlZXJDb25uZWN0aW9uLmRpc3Bvc2UoKTtcblxuICAgICAgICAgIGlmIChTREsuZm9yY2VHYXJiYWdlQ29sbGVjdGlvbk9uUmVzdGFydCAmJiAhKEZlYXR1cmVFbmFibGVtZW50LmlzTW9iaWxlICYmIFNESy5za2lwR2FyYmFnZUNvbGxlY3Rpb25Pbk1vYmlsZURldmljZXMpKSB7XG4gICAgICAgICAgICBHYXJiYWdlQ29sbGVjdG9yTWFuYWdlci5mb3JjZUdhcmJhZ2VDb2xsZWN0aW9uKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcGVlckNvbm5lY3Rpb24gPSBudWxsO1xuICAgICAgICAgIGxvY2FsT2ZmZXIgPSBudWxsO1xuICAgICAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZSA9IHBlZXJDb25uZWN0aW9uO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGVuZFBvaW50LnN1YnNjcmliZSh0b2tlbiwgbG9jYWxPZmZlciwgdGhpcy5fY2hhbm5lbENvbnRleHQuZmFpbHVyZUNvdW50LnZhbHVlKTtcbiAgICAgIH0pXG4gICAgICAudGhlbigoe3N0YXR1cywgc3RyZWFtLCBydGNDb25maWd1cmF0aW9uLCBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLCBjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UsIGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2UsIGxhZ30pID0+IHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlID0gc3RyZWFtO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sYWcudmFsdWUgPSBsYWc7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXBwbHlTZXNzaW9uQW5kU3RyZWFtUHJvcGVydGllc1RvVmlkZW9FbGVtZW50KCk7XG5cbiAgICAgICAgdGhpcy5fbG9nZ2VyLmRlYnVnKFxuICAgICAgICAgICdbJXNdIFN1YnNjcmliZSBjb21wbGV0ZWQgWyVzXSBbJWpdIFslal0gWyVqXSBbJWpdJyxcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCxcbiAgICAgICAgICBzdGF0dXMsXG4gICAgICAgICAgcnRjQ29uZmlndXJhdGlvbixcbiAgICAgICAgICBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLFxuICAgICAgICAgIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSxcbiAgICAgICAgICBjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSB0aGlzLl9jaGFubmVsQ29udGV4dC5tYXBTdWJzY3JpYmVTdGF0dXNUb0NoYW5uZWxTdGF0dXMoc3RhdHVzKTtcblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hcHBseVN0YXR1cyhzdGF0dXMpO1xuXG4gICAgICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5hcHBseVJ0Y0NvbmZpZ3VyYXRpb24odGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlLCBydGNDb25maWd1cmF0aW9uKVxuICAgICAgICAgIC50aGVuKHBlZXJDb25uZWN0aW9uID0+IHtcbiAgICAgICAgICAgIGxldCBzdWJtaXRDYW5kaWRhdGVzVGltZW91dDtcbiAgICAgICAgICAgIGxldCBjYW5jZWxEaXNjb3ZlcnkgPSBmYWxzZTtcbiAgICAgICAgICAgIGxldCBkaXNjb3ZlcnlDb21wbGV0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIGNvbnN0IGNhbmRpZGF0ZXM6IFJUQ0ljZUNhbmRpZGF0ZVtdID0gW107XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlKSB7XG4gICAgICAgICAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZSA9IHBlZXJDb25uZWN0aW9uO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5vbmljZWNhbmRpZGF0ZSA9IChlKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUgIT09IHN0cmVhbSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICh0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWUgIT09IHBlZXJDb25uZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKGNhbmNlbERpc2NvdmVyeSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICghU0RLLnNlbmRMb2NhbENhbmRpZGF0ZXMudmFsdWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoZS5jYW5kaWRhdGUgJiYgZS5jYW5kaWRhdGUuY2FuZGlkYXRlKSB7XG4gICAgICAgICAgICAgICAgY2FuZGlkYXRlcy5wdXNoKGUuY2FuZGlkYXRlKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkaXNjb3ZlcnlDb21wbGV0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKCFzdWJtaXRDYW5kaWRhdGVzVGltZW91dCkge1xuICAgICAgICAgICAgICAgIHN1Ym1pdENhbmRpZGF0ZXNUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlICE9PSBzdHJlYW0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICBpZiAoY2FuY2VsRGlzY292ZXJ5KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlLmFkZEljZUNhbmRpZGF0ZXMoc3RyZWFtLCBjYW5kaWRhdGVzLCBkaXNjb3ZlcnlDb21wbGV0ZWQpXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKCh7c3RhdHVzLCBvcHRpb25zfSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci53YXJuKCdbJXNdIEZhaWxlZCB0byBhZGQgSUNFIGNhbmRpZGF0ZXMgd2l0aCByZWFzb24gWyVzXScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBzdGF0dXMpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuaW5jbHVkZXMoJ2NhbmNlbCcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYW5jZWxEaXNjb3ZlcnkgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIEFkZGVkIElDRSBjYW5kaWRhdGVzIHdpdGggcmVhc29uIFslc10gYW5kIG9wdGlvbnMgWyVzXScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBzdGF0dXMsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdbJXNdIEZhaWxlZCB0byBhZGQgSUNFIGNhbmRpZGF0ZXMnLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgZSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0sIGljZUNhbmRpZGF0ZUFjY3VtdWxhdGlvbkludGVydmFsKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24ub25pY2Vjb25uZWN0aW9uc3RhdGVjaGFuZ2UgPSAoKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUgIT09IHN0cmVhbSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICh0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWUgIT09IHBlZXJDb25uZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgY29uc3QgcmV0cnlDYWxsYmFjayA9ICgpOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgICAvLyBJZiB3ZSBzdG9wIG5vcm1hbGx5IHRoZSBwZWVyIGNvbm5lY3Rpb24gaXMgdW5yZWdpc3RlcmVkIGZpcnN0LlxuICAgICAgICAgICAgICAgIC8vIFRodXMgYW55dGltZSB3ZSBzZWUgYSBjbG9zZWQgcGVlciBjb25uZWN0aW9uIHRoYXQgaXMgc3RpbGwgdmFsaWQsIGl0IGlzIGFuIGVycm9yLlxuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkNvbm5lY3Rpb25FcnJvcjtcblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5wYXVzZSgpO1xuICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnNyY09iamVjdCA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX2hhbmRsZVN0cmVhbUZhaWx1cmUoKVxuICAgICAgICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgJ1slc10gRmFpbGVkIGhhbmRsaW5nIHN0cmVhbSBmYWlsdXJlIGFmdGVyIHBlZXIgY29ubmVjdGlvbiBzdG9wcGVkIHdpdGggc3RhdGUgWyVzXScsXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsXG4gICAgICAgICAgICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgIGVcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgIHN3aXRjaCAocGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnY2hlY2tpbmcnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ2NvbXBsZXRlZCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnY29ubmVjdGVkJzpcbiAgICAgICAgICAgICAgICBjYXNlICduZXcnOlxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAnZGlzY29ubmVjdGVkJzpcbiAgICAgICAgICAgICAgICBjYXNlICdmYWlsZWQnOlxuICAgICAgICAgICAgICAgICAgaWYgKG5hdmlnYXRvci5vbkxpbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gSUNFIGNvbm5lY3Rpb24gc3RhdGUgY2hhbmdlZCB0byBbJXNdLCB0cnlpbmcgdG8gcmVjb25uZWN0JywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIHBlZXJDb25uZWN0aW9uLmljZUNvbm5lY3Rpb25TdGF0ZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVjb25uZWN0UGVlckNvbm5lY3Rpb24ocGVlckNvbm5lY3Rpb24sIHJldHJ5Q2FsbGJhY2spO1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgY2FzZSAnY2xvc2VkJzpcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIElDRSBjb25uZWN0aW9uIHN0YXRlIGNoYW5nZWQgdG8gWyVzXSwgcmV0cnlpbmcgdG8gY29ubmVjdCcsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBwZWVyQ29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGUpO1xuXG4gICAgICAgICAgICAgICAgICByZXRyeUNhbGxiYWNrKCk7XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUocGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgbWVkaWFTdHJlYW1Qcm9taXNlID0gbmV3IFByb21pc2U8TWVkaWFTdHJlYW0+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFGZWF0dXJlRW5hYmxlbWVudC5vblRyYWNrRGlzYWJsZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHJlamVjdChuZXcgRXJyb3IoJ1N0cmVhbSBzZXR1cCB0aW1lZCBvdXQnKSksIGRlZmF1bHRTdHJlYW1TZXR1cFRpbWVvdXQpO1xuXG4gICAgICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24ub250cmFjayA9IChlKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAgICAgICAgICAgICAgIHJlc29sdmUoZS5zdHJlYW1zWzBdKTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgY29uc3QgdHJhY2tMaXN0ZW5lciA9IChlKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11c2UtYmVmb3JlLWRlZmluZVxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgICAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RyYWNrJywgdHJhY2tMaXN0ZW5lcik7XG4gICAgICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWRkc3RyZWFtJywgdHJhY2tMaXN0ZW5lcik7XG5cbiAgICAgICAgICAgICAgICBpZiAoZS5zdHJlYW1zKSB7XG4gICAgICAgICAgICAgICAgICByZXNvbHZlKGUuc3RyZWFtc1swXSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHJlc29sdmUoZS5zdHJlYW0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICBjb25zdCB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5yZW1vdmVFdmVudExpc3RlbmVyKCd0cmFjaycsIHRyYWNrTGlzdGVuZXIpO1xuICAgICAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2FkZHN0cmVhbScsIHRyYWNrTGlzdGVuZXIpO1xuICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ1N0cmVhbSBzZXR1cCB0aW1lZCBvdXQnKSk7XG4gICAgICAgICAgICAgIH0sIGRlZmF1bHRTdHJlYW1TZXR1cFRpbWVvdXQpO1xuXG4gICAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLmFkZEV2ZW50TGlzdGVuZXIoJ3RyYWNrJywgdHJhY2tMaXN0ZW5lcik7XG4gICAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLmFkZEV2ZW50TGlzdGVuZXIoJ2FkZHN0cmVhbScsIHRyYWNrTGlzdGVuZXIpO1xuXG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4ocmVzb2x2ZSA9PiB7XG4gICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoIXNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBTZXQgbG9jYWwgU0RQIG9mZmVyIFslc10nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24uc2RwKTtcblxuICAgICAgICAgICAgICByZXR1cm4gcGVlckNvbm5lY3Rpb24uc2V0TG9jYWxEZXNjcmlwdGlvbihzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbilcbiAgICAgICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBGYWlsZWQgdG8gc2V0IGxvY2FsIGRlc2NyaXB0aW9uIFslal0gd2l0aCBtZXNzYWdlIFslc10nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24sIGUubWVzc2FnZSk7XG5cbiAgICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gU2V0IHJlbW90ZSBTRFAgYW5zd2VyIFslc10nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24uc2RwKTtcblxuICAgICAgICAgICAgICByZXR1cm4gcGVlckNvbm5lY3Rpb24uc2V0UmVtb3RlRGVzY3JpcHRpb24oY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24pXG4gICAgICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gRmFpbGVkIHRvIHNldCByZW1vdGUgZGVzY3JpcHRpb24gWyVqXSB3aXRoIG1lc3NhZ2UgWyVzXScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbiwgZS5tZXNzYWdlKTtcblxuICAgICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoIWNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIFNldCByZW1vdGUgU0RQIG9mZmVyIFslc10nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbi5zZHApO1xuXG4gICAgICAgICAgICAgIHJldHVybiBwZWVyQ29ubmVjdGlvbi5zZXRSZW1vdGVEZXNjcmlwdGlvbihjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKVxuICAgICAgICAgICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIEZhaWxlZCB0byBzZXQgcmVtb3RlIGRlc2NyaXB0aW9uIFslal0gd2l0aCBtZXNzYWdlIFslc10nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbiwgZS5tZXNzYWdlKTtcblxuICAgICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBwZWVyQ29ubmVjdGlvbi5jcmVhdGVBbnN3ZXIoe1xuICAgICAgICAgICAgICAgICAgICBvZmZlclRvUmVjZWl2ZUF1ZGlvOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBvZmZlclRvUmVjZWl2ZVZpZGVvOiB0cnVlXG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KS50aGVuKGFuc3dlciA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBTZXQgbG9jYWwgU0RQIGFuc3dlciBbJWpdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIGFuc3dlcik7XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZS5zZXRSZW1vdGVEZXNjcmlwdGlvbihzdHJlYW0sIGFuc3dlcik7XG4gICAgICAgICAgICAgICAgfSkudGhlbigoe3N0YXR1cywgc2Vzc2lvbkRlc2NyaXB0aW9ufSkgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSB0aGlzLm1hcFNldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzVG9DaGFubmVsU3RhdHVzKHN0YXR1cyk7XG5cbiAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGFuZGJ5LnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RvcHBlZC52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHBlZXJDb25uZWN0aW9uLnNldExvY2FsRGVzY3JpcHRpb24oc2Vzc2lvbkRlc2NyaXB0aW9uKVxuICAgICAgICAgICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gRmFpbGVkIHRvIHNldCBsb2NhbCBkZXNjcmlwdGlvbiBbJWpdIHdpdGggbWVzc2FnZSBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIHNlc3Npb25EZXNjcmlwdGlvbiwgZS5tZXNzYWdlKTtcblxuICAgICAgICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgIGxpc3Rlbk9uU3RyZWFtU2V0dXAuc3VjY2Vzcyh0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIG1lZGlhU3RyZWFtUHJvbWlzZTtcbiAgICAgICAgICAgIH0pLnRoZW4obWVkaWFTdHJlYW0gPT4ge1xuICAgICAgICAgICAgICBpZiAodGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5oYXNFbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXMudmFsdWUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJzZWRSZW1vdGVEZXNjcmlwdGlvbiA9IG5ldyBTZHBQYXJzZXIocGVlckNvbm5lY3Rpb24uY3VycmVudFJlbW90ZURlc2NyaXB0aW9uLnNkcCk7XG4gICAgICAgICAgICAgICAgY29uc3Qge2Rpc3Bvc2FibGVzfSA9IEluc2VydGFibGVTdHJlYW1zLmFwcGx5RW5jb2RlZFN0cmVhbVRyYW5zZm9ybWF0aW9uKG1lZGlhU3RyZWFtLCBwZWVyQ29ubmVjdGlvbi5nZXRSZWNlaXZlcnMoKSwgdGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5lbmNvZGVkVmlkZW9TdHJlYW1TaW5rLCB0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0LmVuY29kZWRBdWRpb1N0cmVhbVNpbmssIHBhcnNlZFJlbW90ZURlc2NyaXB0aW9uLnZpZGVvQ29kZWMsIHBhcnNlZFJlbW90ZURlc2NyaXB0aW9uLmF1ZGlvQ29kZWMpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKGRpc3Bvc2FibGVzKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICh0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0Lmhhc0luc2VydGFibGVTdHJlYW1zLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qge3RyYW5zZm9ybWVkU3RyZWFtLCBkaXNwb3NhYmxlc30gPSBJbnNlcnRhYmxlU3RyZWFtcy5hcHBseUluc2VydGFibGVTdHJlYW1UcmFuc2Zvcm1hdGlvbihtZWRpYVN0cmVhbSwgdGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC52aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrLCB0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0LmF1ZGlvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2spO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKGRpc3Bvc2FibGVzKTtcbiAgICAgICAgICAgICAgICBtZWRpYVN0cmVhbSA9IHRyYW5zZm9ybWVkU3RyZWFtO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlID0gbWVkaWFTdHJlYW07XG5cbiAgICAgICAgICAgICAgY29uc3QgcnRjQ29ubmVjdGlvbk1vbml0b3IgPSBuZXcgUnRjQ29ubmVjdGlvbk1vbml0b3IocGVlckNvbm5lY3Rpb24sIG1lZGlhU3RyZWFtLCB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZS5yb3VuZFRyaXBUaW1lIC8gNCk7XG5cbiAgICAgICAgICAgICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHJ0Y0Nvbm5lY3Rpb25Nb25pdG9yKTtcblxuICAgICAgICAgICAgICBjb25zdCBydGNDb25uZWN0aW9uTW9uaXRvclN0YXRpc3RpY1N1YnNjcmlwdGlvbiA9IHJ0Y0Nvbm5lY3Rpb25Nb25pdG9yLnJ0Y1N0YXRpc3RpYy5zdWJzY3JpYmUoc3RhdGlzdGljcyA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucnRjU3RhdGlzdGljcy52YWx1ZSA9IHN0YXRpc3RpY3M7XG5cbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y1ZpZGVvU3RhdGlzdGljICYmICF0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNBdWRpb1N0YXRpc3RpYykge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucnRjQXVkaW9TdGF0aXN0aWMgPSBzdGF0aXN0aWNzLmF1ZGlvO1xuICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucnRjVmlkZW9TdGF0aXN0aWMgPSBzdGF0aXN0aWNzLnZpZGVvO1xuXG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbGV0IGF1ZGlvVHJhY2tGYWlsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBsZXQgdmlkZW9UcmFja0ZhaWxlZCA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgaWYgKHN0YXRpc3RpY3MuYXVkaW8pIHtcbiAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNBdWRpb1N0YXRpc3RpYyAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNBdWRpb1N0YXRpc3RpYy50aW1lc3RhbXAgIT09IHN0YXRpc3RpY3MuYXVkaW8udGltZXN0YW1wKSB7XG4gICAgICAgICAgICAgICAgICAgIGF1ZGlvVHJhY2tGYWlsZWQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNBdWRpb1N0YXRpc3RpYyAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNBdWRpb1N0YXRpc3RpYy5ieXRlc1JlY2VpdmVkID09PSBzdGF0aXN0aWNzLmF1ZGlvLmJ5dGVzUmVjZWl2ZWQ7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGF1ZGlvVHJhY2tGYWlsZWQgJiYgbmF2aWdhdG9yLm9uTGluZSkge1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgICAgICAgICAgICAgICAgICAgJ1slc10gQXVkaW8gdHJhY2sgZmFpbGVkIHdpdGggbGFzdCBieXRlc1JlY2VpdmVkIFslc10gaXMgZXF1YWwgdG8gcHJldmlvdXMgYnl0ZXNSZWNlaXZlZCBbJXNdIHdpdGhpbiBbJXNdJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGlzdGljcy5hdWRpby5ieXRlc1JlY2VpdmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucnRjQXVkaW9TdGF0aXN0aWMuYnl0ZXNSZWNlaXZlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBEdXJhdGlvbnMoc3RhdGlzdGljcy5hdWRpby50aW1lc3RhbXAgLSB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNBdWRpb1N0YXRpc3RpYy50aW1lc3RhbXApLnRvSXNvU3RyaW5nKClcbiAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucnRjQXVkaW9TdGF0aXN0aWMgPSBzdGF0aXN0aWNzLmF1ZGlvO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChzdGF0aXN0aWNzLnZpZGVvKSB7XG4gICAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQucnRjVmlkZW9TdGF0aXN0aWMgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQucnRjVmlkZW9TdGF0aXN0aWMudGltZXN0YW1wICE9PSBzdGF0aXN0aWNzLnZpZGVvLnRpbWVzdGFtcCkge1xuICAgICAgICAgICAgICAgICAgICB2aWRlb1RyYWNrRmFpbGVkID0gdGhpcy5fY2hhbm5lbENvbnRleHQucnRjVmlkZW9TdGF0aXN0aWMgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQucnRjVmlkZW9TdGF0aXN0aWMuYnl0ZXNSZWNlaXZlZCA9PT0gc3RhdGlzdGljcy52aWRlby5ieXRlc1JlY2VpdmVkO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICh2aWRlb1RyYWNrRmFpbGVkICYmIG5hdmlnYXRvci5vbkxpbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICAgICAgICAgICAgICAgICAgICdbJXNdIFZpZGVvIHRyYWNrIGZhaWxlZCB3aXRoIGxhc3QgYnl0ZXNSZWNlaXZlZCBbJXNdIGlzIGVxdWFsIHRvIHByZXZpb3VzIGJ5dGVzUmVjZWl2ZWQgWyVzXSB3aXRoaW4gWyVzXScsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpc3RpY3MudmlkZW8uYnl0ZXNSZWNlaXZlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y1ZpZGVvU3RhdGlzdGljLmJ5dGVzUmVjZWl2ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgRHVyYXRpb25zKHN0YXRpc3RpY3MudmlkZW8udGltZXN0YW1wIC0gdGhpcy5fY2hhbm5lbENvbnRleHQucnRjVmlkZW9TdGF0aXN0aWMudGltZXN0YW1wKS50b0lzb1N0cmluZygpXG4gICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y1ZpZGVvU3RhdGlzdGljID0gc3RhdGlzdGljcy52aWRlbztcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoKHZpZGVvVHJhY2tGYWlsZWQgfHwgYXVkaW9UcmFja0ZhaWxlZCkgJiYgbmF2aWdhdG9yLm9uTGluZSkge1xuICAgICAgICAgICAgICAgICAgY29uc3QgcmV0cnlDYWxsYmFjayA9ICgpOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuQ29ubmVjdGlvbkVycm9yO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUucGF1c2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuc3JjT2JqZWN0ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICAgICAgcnRjQ29ubmVjdGlvbk1vbml0b3IuZGlzcG9zZSgpO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9oYW5kbGVTdHJlYW1GYWlsdXJlKClcbiAgICAgICAgICAgICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdbJXNdIEZhaWxlZCBoYW5kbGluZyBzdHJlYW0gZmFpbHVyZSBhZnRlciB0cmFjayBzdG9wcGVkIHdpdGggc3RhdGUgWyVzXScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGVcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICB0aGlzLnJlY29ubmVjdFBlZXJDb25uZWN0aW9uKHBlZXJDb25uZWN0aW9uLCByZXRyeUNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMgPSAwO1xuXG4gICAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgIT09IENoYW5uZWxTdGF0ZS5SZWNvbm5lY3RpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPyBDaGFubmVsU3RhdGUuUGxheWluZyA6IENoYW5uZWxTdGF0ZS5QYXVzZWQ7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBzdGF0ZSByZXN0b3JlZCB0byBbJXNdIGFmdGVyIHJlY29ubmVjdGluZycsIENoYW5uZWxTdGF0ZVt0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHJ0Y0Nvbm5lY3Rpb25Nb25pdG9yU3RhdGlzdGljU3Vic2NyaXB0aW9uKTtcblxuICAgICAgICAgICAgICBpZiAoIVNESy5hdXRvbWF0aWNhbGx5UGxheU1lZGlhU3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b011dGVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5QYXVzZWQ7XG5cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICByZXR1cm4gcGxheU1lZGlhU3RyZWFtSW5WaWRlb0VsZW1lbnQobWVkaWFTdHJlYW0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgYXBwbHlSdGNDb25maWd1cmF0aW9uKFxuICAgIG9wdGlvbmFsUGVlckNvbm5lY3Rpb246IElQZWVyQ29ubmVjdGlvbiB8IG51bGwsXG4gICAgcnRjQ29uZmlndXJhdGlvbjogUlRDQ29uZmlndXJhdGlvbik6IFByb21pc2U8SVBlZXJDb25uZWN0aW9uPiB7XG4gICAgaWYgKCFvcHRpb25hbFBlZXJDb25uZWN0aW9uKSB7XG4gICAgICBydGNDb25maWd1cmF0aW9uID0gUnRjQ29uZmlndXJhdGlvbk1hbmFnZXIudHJ1bmNhdGVJY2VTZXJ2ZXJzKHJ0Y0NvbmZpZ3VyYXRpb24pO1xuXG4gICAgICByZXR1cm4gU0RLLnBlZXJDb25uZWN0aW9uRmFjdG9yeS52YWx1ZS5jcmVhdGVQZWVyQ29ubmVjdGlvbihydGNDb25maWd1cmF0aW9uKTtcbiAgICB9XG5cbiAgICBjb25zdCBuZXdSdGNDb25maWd1cmF0aW9uID0ge1xuICAgICAgLi4ub3B0aW9uYWxQZWVyQ29ubmVjdGlvbi5nZXRDb25maWd1cmF0aW9uKCksXG4gICAgICAuLi5ydGNDb25maWd1cmF0aW9uXG4gICAgfTtcblxuICAgIG9wdGlvbmFsUGVlckNvbm5lY3Rpb24uc2V0Q29uZmlndXJhdGlvbihuZXdSdGNDb25maWd1cmF0aW9uKTtcblxuICAgIHJldHVybiBvcHRpb25hbFBlZXJDb25uZWN0aW9uO1xuICB9XG5cbiAgcHJpdmF0ZSByZWNvbm5lY3RQZWVyQ29ubmVjdGlvbihwZWVyQ29ubmVjdGlvbjogSVBlZXJDb25uZWN0aW9uLCByZXRyeUNhbGxiYWNrOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgaWYgKHBlZXJDb25uZWN0aW9uLmljZUNvbm5lY3Rpb25TdGF0ZSA9PT0gJ2Nsb3NlZCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5SZWNvbm5lY3Rpbmc7XG5cbiAgICBpZiAodGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMgPCBTREsubWF4aW1hbE51bWJlck9mUGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyB8fCAhU0RLLmF1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbikge1xuICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMrKztcblxuICAgICAgY29uc3QgaXNDbGllbnRPZmZlckZsb3cgPSBwZWVyQ29ubmVjdGlvbi5jdXJyZW50TG9jYWxEZXNjcmlwdGlvbj8udHlwZSA9PT0gJ29mZmVyJztcblxuICAgICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LmNsaWVudE9mZmVyRGlzYWJsZWQgfHxcbiAgICAgICAgIXBlZXJDb25uZWN0aW9uLnN1cHBvcnRzU2V0Q29uZmlndXJhdGlvbiB8fFxuICAgICAgICAhcGVlckNvbm5lY3Rpb24uc3VwcG9ydHNHZXRDb25maWd1cmF0aW9uIHx8XG4gICAgICAgICFpc0NsaWVudE9mZmVyRmxvd1xuICAgICAgKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1JlY29ubmVjdGluZyBwZWVyIGNvbm5lY3Rpb24gYnkgcmVzdGFydGluZyBJQ0UnKTtcblxuICAgICAgY29uc3QgY3VycmVudExvY2FsRGVzY3JpcHRpb24gPSBwZWVyQ29ubmVjdGlvbi5jdXJyZW50TG9jYWxEZXNjcmlwdGlvbjtcbiAgICAgIGNvbnN0IGlnbm9yZWQgPSBwZWVyQ29ubmVjdGlvbi5jcmVhdGVPZmZlcih7aWNlUmVzdGFydDogdHJ1ZX0pLnRoZW4ob2ZmZXIgPT4ge1xuICAgICAgICByZXR1cm4gcGVlckNvbm5lY3Rpb24uc2V0TG9jYWxEZXNjcmlwdGlvbihvZmZlcikudGhlbigoKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHBlZXJDb25uZWN0aW9uLnNldExvY2FsRGVzY3JpcHRpb24oY3VycmVudExvY2FsRGVzY3JpcHRpb24pO1xuICAgICAgICB9KTtcbiAgICAgIH0pXG4gICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byByZWNvbm5lY3QgcGVlciBjb25uZWN0aW9uJywgZSk7XG4gICAgICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMgPSAwO1xuICAgICAgICAgIHJldHJ5Q2FsbGJhY2soKTtcbiAgICAgICAgfSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnRmFpbGVkIHRvIHJlY29ubmVjdCBwZWVyIGNvbm5lY3Rpb24gYWZ0ZXIgWyVzXSBhdHRlbXB0cywgcGVyZm9ybWluZyBmdWxsIHJlY292ZXJ5JywgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMpO1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzID0gMDtcbiAgICByZXRyeUNhbGxiYWNrKCk7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgbWFwU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXNUb0NoYW5uZWxTdGF0dXMoc3RhdHVzOiBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1cyk6IENoYW5uZWxTdGF0ZSB7XG4gICAgc3dpdGNoIChzdGF0dXMpIHtcbiAgICAgIGNhc2UgJ29rJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5TdGFydGluZztcbiAgICAgIGNhc2UgJ3VuYXV0aG9yaXplZCc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuVW5hdXRob3JpemVkO1xuICAgICAgY2FzZSAnbm90LWZvdW5kJzpcbiAgICAgIGNhc2UgJ2NhcGFjaXR5JzpcbiAgICAgIGNhc2UgJ3JhdGUtbGltaXRlZCc6XG4gICAgICBjYXNlICd0aW1lb3V0JzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5SZWNvdmVyaW5nO1xuICAgICAgY2FzZSAnZmFpbGVkJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5FcnJvcjtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHN0YXR1cyk7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IHtDaHVua2VkU3RyZWFtaW5nfSBmcm9tICcuL0NodW5rZWRTdHJlYW1pbmcnO1xuaW1wb3J0IHtDaHVua2VkU3RyZWFtaW5nT3B0aW9ucywgQ2h1bmtlZFN0cmVhbWluZ1N0YXRpc3RpY3N9IGZyb20gJy4vU3RyZWFtVHlwZXMnO1xuaW1wb3J0IHtOZXR3b3JrU3RhdGVzfSBmcm9tICcuL05ldHdvcmtTdGF0ZXMnO1xuXG50eXBlIFNoYWthT3B0aW9ucyA9IHtcbiAgYWJyOiB7XG4gICAgZGVmYXVsdEJhbmR3aWR0aEVzdGltYXRlOiBudW1iZXI7XG4gIH07XG4gIG1hbmlmZXN0OiB7XG4gICAgcmV0cnlQYXJhbWV0ZXJzOiB7XG4gICAgICB0aW1lb3V0OiBudW1iZXI7XG4gICAgfTtcbiAgfTtcbiAgc3RyZWFtaW5nOiB7XG4gICAgbGl2ZVN5bmNQYW5pY1RocmVzaG9sZDogbnVtYmVyO1xuICAgIGJ1ZmZlcmluZ0dvYWw6IG51bWJlcjtcbiAgICBidWZmZXJCZWhpbmQ6IG51bWJlcjtcbiAgICByZXRyeVBhcmFtZXRlcnM6IHtcbiAgICAgIHRpbWVvdXQ6IG51bWJlcjtcbiAgICAgIG1heEF0dGVtcHRzOiBudW1iZXI7XG4gICAgICBiYWNrb2ZmRmFjdG9yOiBudW1iZXI7XG4gICAgfTtcbiAgfTtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVNoYWthIHtcbiAgY29uZmlndXJlOiAobzogU2hha2FPcHRpb25zKSA9PiB2b2lkO1xuICBsb2FkOiAodXJpOiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD47XG4gIGdldFN0YXRzOiAoKSA9PiBDaHVua2VkU3RyZWFtaW5nU3RhdGlzdGljcztcbiAgZGVzdHJveTogKCkgPT4gdm9pZDtcbiAgdW5sb2FkOiAoKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTaGFrYVBsYXllciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdTaGFrYVBsYXllcicpO1xuICBwcml2YXRlIHJlYWRvbmx5IF92aWRlb0VsZW1lbnQ6IEhUTUxWaWRlb0VsZW1lbnQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2tpbmQ6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfc3RyZWFtSWQ6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfbWFuaWZlc3RVUkk6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfb3B0aW9uczogQ2h1bmtlZFN0cmVhbWluZ09wdGlvbnM7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21vbml0b3JlZFN0YXRpc3RpY3M6IHtcbiAgICBlc3RpbWF0ZWRCYW5kd2lkdGg6IG51bWJlcjtcbiAgICBwbGF5VGltZTogbnVtYmVyO1xuICB9O1xuICBwcml2YXRlIF9wbGF5ZXI6IElTaGFrYTtcblxuICBjb25zdHJ1Y3Rvcih2aWRlb0VsZW1lbnQ6IEhUTUxWaWRlb0VsZW1lbnQsIGtpbmQ6IHN0cmluZywgc3RyZWFtSWQ6IHN0cmluZywgbWFuaWZlc3RVUkk6IHN0cmluZywgb3B0aW9uczogQ2h1bmtlZFN0cmVhbWluZ09wdGlvbnMpIHtcbiAgICB0aGlzLl92aWRlb0VsZW1lbnQgPSB2aWRlb0VsZW1lbnQ7XG4gICAgdGhpcy5fa2luZCA9IGtpbmQ7XG4gICAgdGhpcy5fc3RyZWFtSWQgPSBzdHJlYW1JZDtcbiAgICB0aGlzLl9tYW5pZmVzdFVSSSA9IGVuY29kZVVSSShtYW5pZmVzdFVSSSkucmVwbGFjZSgvWyNdL2csICclMjMnKTtcbiAgICB0aGlzLl9vcHRpb25zID0gb3B0aW9ucztcbiAgICB0aGlzLl9tb25pdG9yZWRTdGF0aXN0aWNzID0ge1xuICAgICAgZXN0aW1hdGVkQmFuZHdpZHRoOiAwLFxuICAgICAgcGxheVRpbWU6IDBcbiAgICB9O1xuICB9XG5cbiAgc3RhcnQoKTogdm9pZCB7XG4gICAgaWYgKENodW5rZWRTdHJlYW1pbmcuc2hha2EpIHtcbiAgICAgIGNvbnN0IHBsYXllck9wdGlvbnM6IFNoYWthT3B0aW9ucyA9IHtcbiAgICAgICAgYWJyOiB7ZGVmYXVsdEJhbmR3aWR0aEVzdGltYXRlOiAyMDAwMDAwfSxcbiAgICAgICAgbWFuaWZlc3Q6IHtyZXRyeVBhcmFtZXRlcnM6IHt0aW1lb3V0OiAxMDAwMH19LFxuICAgICAgICBzdHJlYW1pbmc6IHtcbiAgICAgICAgICBsaXZlU3luY1BhbmljVGhyZXNob2xkOiAxLFxuICAgICAgICAgIGJ1ZmZlcmluZ0dvYWw6IDYwLFxuICAgICAgICAgIGJ1ZmZlckJlaGluZDogMzAsXG4gICAgICAgICAgcmV0cnlQYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICB0aW1lb3V0OiAxMDAwMCxcbiAgICAgICAgICAgIG1heEF0dGVtcHRzOiAxMCxcbiAgICAgICAgICAgIGJhY2tvZmZGYWN0b3I6IDEuMVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgdGhpcy5fcGxheWVyID0gbmV3IENodW5rZWRTdHJlYW1pbmcuc2hha2EuUGxheWVyKHRoaXMuX3ZpZGVvRWxlbWVudCk7XG4gICAgICB0aGlzLmxvYWRQbGF5ZXIocGxheWVyT3B0aW9ucyk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBnZXRTdGF0cygpOiBDaHVua2VkU3RyZWFtaW5nU3RhdGlzdGljcyB7XG4gICAgaWYgKCF0aGlzLl9wbGF5ZXIpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHdpZHRoOiAwLFxuICAgICAgICBoZWlnaHQ6IDAsXG4gICAgICAgIGN1cnJlbnRUaW1lOiAwLFxuICAgICAgICBsYWc6IDAsXG4gICAgICAgIG5ldHdvcmtTdGF0ZTogTmV0d29ya1N0YXRlcy5OZXR3b3JrTm9Tb3VyY2VcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdGlzdGljcyA9IHtcbiAgICAgIC4uLnRoaXMuX3BsYXllci5nZXRTdGF0cygpLFxuICAgICAgY3VycmVudFRpbWU6IDAsXG4gICAgICBsYWc6IDBcbiAgICB9O1xuICAgIGNvbnN0IGN1cnJlbnRUaW1lID0gdGhpcy5fdmlkZW9FbGVtZW50WydjdXJyZW50VGltZSddIHx8IDA7XG4gICAgY29uc3QgdHJ1ZUN1cnJlbnRUaW1lID0gKERhdGUubm93KCkgLSB0aGlzLl9vcHRpb25zLm9yaWdpblN0YXJ0VGltZSkgLyAxMDAwO1xuICAgIGNvbnN0IGxhZyA9IE1hdGgubWF4KDAuMCwgdHJ1ZUN1cnJlbnRUaW1lIC0gY3VycmVudFRpbWUpO1xuXG4gICAgaWYgKHRoaXMuX3ZpZGVvRWxlbWVudCkge1xuICAgICAgc3RhdGlzdGljcy5jdXJyZW50VGltZSA9IGN1cnJlbnRUaW1lO1xuICAgICAgc3RhdGlzdGljcy5sYWcgPSBsYWc7XG5cbiAgICAgIGlmICh0aGlzLl92aWRlb0VsZW1lbnQuYnVmZmVyZWQgJiYgdGhpcy5fdmlkZW9FbGVtZW50LmJ1ZmZlcmVkLmxlbmd0aCkge1xuICAgICAgICBzdGF0aXN0aWNzLmRhdGFCdWZmZXJlZCA9IHRoaXMuX3ZpZGVvRWxlbWVudC5idWZmZXJlZC5lbmQoMCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHN0YXRpc3RpY3MuZXN0aW1hdGVkQmFuZHdpZHRoID4gMCAmJiB0aGlzLl9tb25pdG9yZWRTdGF0aXN0aWNzLmVzdGltYXRlZEJhbmR3aWR0aCA8IHN0YXRpc3RpY3MuZXN0aW1hdGVkQmFuZHdpZHRoKSB7XG4gICAgICBzdGF0aXN0aWNzLm5ldHdvcmtTdGF0ZSA9IE5ldHdvcmtTdGF0ZXMuTmV0d29ya0xvYWRpbmc7XG4gICAgfSBlbHNlIGlmIChzdGF0aXN0aWNzLnBsYXlUaW1lID4gMCAmJiB0aGlzLl9tb25pdG9yZWRTdGF0aXN0aWNzLnBsYXlUaW1lIDwgc3RhdGlzdGljcy5wbGF5VGltZSkge1xuICAgICAgc3RhdGlzdGljcy5uZXR3b3JrU3RhdGUgPSBOZXR3b3JrU3RhdGVzLk5ldHdvcmtJZGxlO1xuICAgIH0gZWxzZSBpZiAoc3RhdGlzdGljcy52aWRlbykge1xuICAgICAgc3RhdGlzdGljcy5uZXR3b3JrU3RhdGUgPSBOZXR3b3JrU3RhdGVzLk5ldHdvcmtFbXB0eTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdGlzdGljcy5uZXR3b3JrU3RhdGUgPSBOZXR3b3JrU3RhdGVzLk5ldHdvcmtOb1NvdXJjZTtcbiAgICB9XG5cbiAgICB0aGlzLl9tb25pdG9yZWRTdGF0aXN0aWNzLmVzdGltYXRlZEJhbmR3aWR0aCA9IHN0YXRpc3RpY3MuZXN0aW1hdGVkQmFuZHdpZHRoO1xuICAgIHRoaXMuX21vbml0b3JlZFN0YXRpc3RpY3MucGxheVRpbWUgPSBzdGF0aXN0aWNzLnBsYXlUaW1lO1xuXG4gICAgcmV0dXJuIHN0YXRpc3RpY3M7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9wbGF5ZXIpIHtcbiAgICAgIHRoaXMuX3BsYXllci51bmxvYWQoKTtcbiAgICAgIHRoaXMuX3BsYXllci5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgdGhpcy5fcGxheWVyID0gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgbG9hZFBsYXllcihwbGF5ZXJDb25maWc6IFNoYWthT3B0aW9ucyk6IHZvaWQge1xuICAgIHRoaXMuX3BsYXllci5jb25maWd1cmUocGxheWVyQ29uZmlnKTtcblxuICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9wbGF5ZXIubG9hZCh0aGlzLl9tYW5pZmVzdFVSSSkudGhlbigoKSA9PiB7XG4gICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBEQVNIIGxpdmUgc3RyZWFtIGhhcyBiZWVuIGxvYWRlZCcsIHRoaXMuX3N0cmVhbUlkKTtcblxuICAgICAgaWYgKHRoaXMuX3ZpZGVvRWxlbWVudC5wbGF5KSB7XG4gICAgICAgIHRoaXMuX3ZpZGVvRWxlbWVudC5wbGF5KCk7XG4gICAgICB9XG4gICAgfSkuY2F0Y2goZSA9PiB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ1slc10gRXJyb3Igd2hpbGUgbG9hZGluZyBEQVNIIGxpdmUgc3RyZWFtIFslc10nLCB0aGlzLl9zdHJlYW1JZCwgZS5jb2RlLCBlKTtcbiAgICB9KTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtJU3RyZWFtfSBmcm9tICcuL0lTdHJlYW0nO1xuaW1wb3J0IEVkZ2VBdXRoUGFyc2VyIGZyb20gJy4uLy4uL2VkZ2VBdXRoL0VkZ2VBdXRoUGFyc2VyJztcbmltcG9ydCBDaHVua2VkU3RyZWFtIGZyb20gJy4vQ2h1bmtlZFN0cmVhbSc7XG5pbXBvcnQgUmVhbFRpbWVTdHJlYW0gZnJvbSAnLi9SZWFsVGltZVN0cmVhbSc7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IENodW5rZWRTdHJlYW1QbGF5YmFja01vZGUgZnJvbSAnLi9DaHVua2VkU3RyZWFtUGxheWJhY2tNb2RlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3RyZWFtRmFjdG9yeSB7XG4gIHByaXZhdGUgc3RhdGljIF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignU3RyZWFtaW5nJyk7XG5cbiAgc3RhdGljIGNyZWF0ZSh0b2tlbjogc3RyaW5nLCBjaGFubmVsQ29udGV4dCwgcGVlckNvbm5lY3Rpb25Db250ZXh0LCBzdHJlYW1UcmFuc2Zvcm1Db250ZXh0LCBoYW5kbGVTdHJlYW1GYWlsdXJlOiAoKSA9PiBQcm9taXNlPHZvaWQ+KTogSVN0cmVhbSB7XG4gICAgY29uc3QgdG9rZW5DYXBhYmlsaXRpZXMgPSBFZGdlQXV0aFBhcnNlci5wYXJzZVRva2VuKHRva2VuKS5jYXBhYmlsaXRpZXM7XG4gICAgY29uc3QgaGFzU3RyZWFtaW5nID0gdG9rZW5DYXBhYmlsaXRpZXMuaW5jbHVkZXMoJ3N0cmVhbWluZycpO1xuICAgIGNvbnN0IGhhc09uRGVtYW5kID0gdG9rZW5DYXBhYmlsaXRpZXMuaW5jbHVkZXMoJ29uLWRlbWFuZCcpO1xuXG4gICAgaWYgKGhhc1N0cmVhbWluZyB8fCBoYXNPbkRlbWFuZCkge1xuICAgICAgcmV0dXJuIG5ldyBDaHVua2VkU3RyZWFtKGNoYW5uZWxDb250ZXh0LCAhaGFzT25EZW1hbmQgPyBDaHVua2VkU3RyZWFtUGxheWJhY2tNb2RlLkxpdmUgOiBDaHVua2VkU3RyZWFtUGxheWJhY2tNb2RlLk9uZERlbWFuZCwgaGFuZGxlU3RyZWFtRmFpbHVyZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBSZWFsVGltZVN0cmVhbShjaGFubmVsQ29udGV4dCwgcGVlckNvbm5lY3Rpb25Db250ZXh0LCBzdHJlYW1UcmFuc2Zvcm1Db250ZXh0LCBoYW5kbGVTdHJlYW1GYWlsdXJlKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignU3RyZWFtRmFjdG9yeSBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQge0NodW5rZWRTdHJlYW1pbmd9IGZyb20gJy4vQ2h1bmtlZFN0cmVhbWluZyc7XG5pbXBvcnQge0NodW5rZWRTdHJlYW1pbmdPcHRpb25zLCBDaHVua2VkU3RyZWFtaW5nU3RhdGlzdGljc30gZnJvbSAnLi9TdHJlYW1UeXBlcyc7XG5pbXBvcnQge05ldHdvcmtTdGF0ZXN9IGZyb20gJy4vTmV0d29ya1N0YXRlcyc7XG5cbmNvbnN0IGJhbmR3aWR0aFRvU3RhcnRBdCA9IDMwMDAwMDA7IC8vIENvcnJlc3BvbmRzIHRvIDcyMHAgaW4gbW9zdCBzZXR1cHNcbmNvbnN0IG1pblRpbWVCZWZvcmVOZXh0UmVsb2FkID0gMTUwMDA7XG5cbnR5cGUgRXZlbnRMaXN0ZW5lckZvcldlYlBsYXllciA9IChldnQ6IFdlYlBsYXllckV2ZW50KSA9PiB2b2lkO1xudHlwZSBXZWJQbGF5ZXJFdmVudCA9IHtcbiAgY29kZTogbnVtYmVyO1xuICBzZXZlcml0eTogbnVtYmVyO1xuICBlcnJvcjogc3RyaW5nO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBJV2ViUGxheWVyIHtcbiAgc3RhcnQ6ICh1cmw6IHN0cmluZykgPT4gdm9pZDtcbiAgYWRkRXZlbnRMaXN0ZW5lcihuYW1lOiBzdHJpbmcsIGxpc3RlbmVyOiBFdmVudExpc3RlbmVyRm9yV2ViUGxheWVyKTogdm9pZDtcbiAgZGlzcG9zZSgpOiB2b2lkO1xuICBlcnJvcnM6IHtcbiAgICBzZXZlcml0eToge1xuICAgICAgUkVDT1ZFUkFCTEU6IG51bWJlcjtcbiAgICB9O1xuICB9O1xuICBnZXRTdGF0cygpOiBDaHVua2VkU3RyZWFtaW5nU3RhdGlzdGljcztcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgV2ViUGxheWVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1dlYlBsYXllcicpO1xuICBwcml2YXRlIHJlYWRvbmx5IF92aWRlb0VsZW1lbnQ6IEhUTUxWaWRlb0VsZW1lbnQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2tpbmQ6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfc3RyZWFtSWQ6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfbWFuaWZlc3RVUkk6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfb3B0aW9uczogQ2h1bmtlZFN0cmVhbWluZ09wdGlvbnM7XG4gIHByaXZhdGUgX3BsYXllcjogSVdlYlBsYXllcjtcbiAgcHJpdmF0ZSBfbGFzdFJlbG9hZFRpbWU6IG51bWJlcjtcblxuICBjb25zdHJ1Y3Rvcih2aWRlb0VsZW1lbnQ6IEhUTUxWaWRlb0VsZW1lbnQsIGtpbmQ6IHN0cmluZywgc3RyZWFtSWQ6IHN0cmluZywgbWFuaWZlc3RVUkk6IHN0cmluZywgb3B0aW9uczogQ2h1bmtlZFN0cmVhbWluZ09wdGlvbnMpIHtcbiAgICB0aGlzLl92aWRlb0VsZW1lbnQgPSB2aWRlb0VsZW1lbnQ7XG4gICAgdGhpcy5fa2luZCA9IGtpbmQ7XG4gICAgdGhpcy5fc3RyZWFtSWQgPSBzdHJlYW1JZDtcbiAgICB0aGlzLl9tYW5pZmVzdFVSSSA9IGVuY29kZVVSSShtYW5pZmVzdFVSSSkucmVwbGFjZSgvWyNdL2csICclMjMnKTtcbiAgICB0aGlzLl9vcHRpb25zID0gb3B0aW9ucztcbiAgfVxuXG4gIHN0YXJ0KCk6IHZvaWQge1xuICAgIGlmIChDaHVua2VkU3RyZWFtaW5nLnBoZW5peFdlYlBsYXllcikge1xuICAgICAgY29uc3QgcGxheWVyT3B0aW9ucyA9IHtcbiAgICAgICAgLi4udGhpcy5fb3B0aW9ucyxcbiAgICAgICAgYmFuZHdpZHRoVG9TdGFydEF0XG4gICAgICB9O1xuXG4gICAgICB0aGlzLl9wbGF5ZXIgPSBuZXcgQ2h1bmtlZFN0cmVhbWluZy5waGVuaXhXZWJQbGF5ZXIuV2ViUGxheWVyKHRoaXMuX2xvZ2dlciwgdGhpcy5fdmlkZW9FbGVtZW50LCBwbGF5ZXJPcHRpb25zKTtcbiAgICAgIHRoaXMuX3BsYXllci5zdGFydCh0aGlzLl9tYW5pZmVzdFVSSSk7XG5cbiAgICAgIHRoaXMuX3BsYXllci5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIGVycm9yT2JqZWN0ID0+IHtcbiAgICAgICAgaWYgKHRoaXMuY2FuUmVsb2FkKCkgJiYgZXJyb3JPYmplY3QgJiYgKGVycm9yT2JqZWN0LmNvZGUgPT09IDMgfHwgZXJyb3JPYmplY3Quc2V2ZXJpdHkgPT09IENodW5rZWRTdHJlYW1pbmcucGhlbml4V2ViUGxheWVyLmVycm9ycy5zZXZlcml0eS5SRUNPVkVSQUJMRSkpIHtcbiAgICAgICAgICB0aGlzLl9sb2dnZXIud2FybignUmVsb2FkaW5nIHVuaGVhbHRoeSBzdHJlYW0gYWZ0ZXIgZXJyb3IgZXZlbnQgWyVqXScsIGVycm9yT2JqZWN0KTtcbiAgICAgICAgICB0aGlzLnJlbG9hZElmQWJsZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdDYW5ub3QgcmVsb2FkIHdpdGggZXJyb3IgWyVqXScsIGVycm9yT2JqZWN0KTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgaXNTdXBwb3J0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIENodW5rZWRTdHJlYW1pbmcucGhlbml4V2ViUGxheWVyICYmIENodW5rZWRTdHJlYW1pbmcucGhlbml4V2ViUGxheWVyLmlzU3VwcG9ydGVkO1xuICB9XG5cbiAgZ2V0U3RhdHMoKTogQ2h1bmtlZFN0cmVhbWluZ1N0YXRpc3RpY3Mge1xuICAgIGlmICghdGhpcy5fcGxheWVyKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB3aWR0aDogMCxcbiAgICAgICAgaGVpZ2h0OiAwLFxuICAgICAgICBjdXJyZW50VGltZTogMC4wLFxuICAgICAgICBsYWc6IDAuMCxcbiAgICAgICAgbmV0d29ya1N0YXRlOiBOZXR3b3JrU3RhdGVzLk5ldHdvcmtOb1NvdXJjZSxcbiAgICAgICAgZGF0YUJ1ZmZlcmVkOiAwLjBcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdGlzdGljcyA9IHRoaXMuX3BsYXllci5nZXRTdGF0cygpO1xuICAgIGNvbnN0IGN1cnJlbnRUaW1lID0gc3RhdGlzdGljcy5jdXJyZW50VGltZSB8fCB0aGlzLl92aWRlb0VsZW1lbnRbJ2N1cnJlbnRUaW1lJ107XG4gICAgY29uc3QgdHJ1ZUN1cnJlbnRUaW1lID0gKERhdGUubm93KCkgLSB0aGlzLl9vcHRpb25zLm9yaWdpblN0YXJ0VGltZSkgLyAxMDAwO1xuXG4gICAgaWYgKHRoaXMuX3ZpZGVvRWxlbWVudC5idWZmZXJlZD8ubGVuZ3RoKSB7XG4gICAgICBzdGF0aXN0aWNzLmRhdGFCdWZmZXJlZCA9IHRoaXMuX3ZpZGVvRWxlbWVudC5idWZmZXJlZC5lbmQoMCk7XG4gICAgfVxuXG4gICAgaWYgKHN0YXRpc3RpY3MuaXNOYXRpdmUgJiYgc3RhdGlzdGljcy5kZWxpdmVyeVR5cGUgPT09ICdIbHMnKSB7XG4gICAgICBzdGF0aXN0aWNzLmN1cnJlbnRUaW1lID0gY3VycmVudFRpbWUgLSBzdGF0aXN0aWNzLmxhZztcbiAgICB9XG5cbiAgICBpZiAoIXN0YXRpc3RpY3MuY3VycmVudFRpbWUpIHtcbiAgICAgIHN0YXRpc3RpY3MuY3VycmVudFRpbWUgPSBjdXJyZW50VGltZTtcbiAgICB9XG5cbiAgICBpZiAoIXN0YXRpc3RpY3MuaXNOYXRpdmUpIHtcbiAgICAgIHN0YXRpc3RpY3MubGFnID0gTWF0aC5tYXgoMC4wLCB0cnVlQ3VycmVudFRpbWUgLSBjdXJyZW50VGltZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3ZpZGVvRWxlbWVudC5idWZmZXJlZD8ubGVuZ3RoKSB7XG4gICAgICBzdGF0aXN0aWNzLm5ldHdvcmtTdGF0ZSA9IE5ldHdvcmtTdGF0ZXMuTmV0d29ya0xvYWRpbmc7XG4gICAgfSBlbHNlIGlmIChzdGF0aXN0aWNzLmN1cnJlbnRUaW1lID4gMCkge1xuICAgICAgc3RhdGlzdGljcy5uZXR3b3JrU3RhdGUgPSBOZXR3b3JrU3RhdGVzLk5ldHdvcmtJZGxlO1xuICAgIH0gZWxzZSBpZiAoc3RhdGlzdGljcy52aWRlbykge1xuICAgICAgc3RhdGlzdGljcy5uZXR3b3JrU3RhdGUgPSBOZXR3b3JrU3RhdGVzLk5ldHdvcmtFbXB0eTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdGlzdGljcy5uZXR3b3JrU3RhdGUgPSBOZXR3b3JrU3RhdGVzLk5ldHdvcmtOb1NvdXJjZTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RhdGlzdGljcztcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3BsYXllcikge1xuICAgICAgdGhpcy5fcGxheWVyLmRpc3Bvc2UoKTtcbiAgICB9XG5cbiAgICB0aGlzLl9wbGF5ZXIgPSBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBjYW5SZWxvYWQoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgaGFzRWxhcHNlZE1pblRpbWVTaW5jZUxhc3RSZWxvYWQgPSAhdGhpcy5fbGFzdFJlbG9hZFRpbWUgfHwgRGF0ZS5ub3coKSAtIHRoaXMuX2xhc3RSZWxvYWRUaW1lID4gbWluVGltZUJlZm9yZU5leHRSZWxvYWQ7XG5cbiAgICByZXR1cm4gdGhpcy5fdmlkZW9FbGVtZW50ICYmIHRoaXMuX3BsYXllciAmJiB0aGlzLl92aWRlb0VsZW1lbnQuYnVmZmVyZWQubGVuZ3RoICE9PSAwICYmIGhhc0VsYXBzZWRNaW5UaW1lU2luY2VMYXN0UmVsb2FkO1xuICB9XG5cbiAgcHJpdmF0ZSByZWxvYWRJZkFibGUoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmNhblJlbG9hZCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fbG9nZ2VyLndhcm4oJ1slc10gUmVsb2FkaW5nIHVuaGVhbHRoeSBzdHJlYW0gdGhhdCB3YXMgYWN0aXZlIGZvciBhdCBsZWFzdCBbJXNdIHNlY29uZHMnLCB0aGlzLl9zdHJlYW1JZCwgbWluVGltZUJlZm9yZU5leHRSZWxvYWQgLyAxMDAwKTtcblxuICAgIHRoaXMuX2xhc3RSZWxvYWRUaW1lID0gRGF0ZS5ub3coKTtcblxuICAgIHRoaXMucmVsb2FkKCk7XG4gIH1cblxuICBwcml2YXRlIHJlbG9hZCgpOiB2b2lkIHtcbiAgICB0aGlzLl9wbGF5ZXIuZGlzcG9zZSgpO1xuXG4gICAgdGhpcy5fcGxheWVyID0gbnVsbDtcblxuICAgIHRoaXMuc3RhcnQoKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJRW5jb2RlZFN0cmVhbVNpbms8VCA9IFJUQ0VuY29kZWRBdWRpb0ZyYW1lIHwgUlRDRW5jb2RlZFZpZGVvRnJhbWU+IHtcbiAgICAodHJhY2s6IE1lZGlhU3RyZWFtVHJhY2ssIGNodW5rOiBUKTogYm9vbGVhbiB8IFByb21pc2VMaWtlPGJvb2xlYW4+O1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFbmNvZGVkU3RyZWFtU2luayB7XG4gIHN0YXRpYyB2YWxpZGF0ZUVuY29kZWRTdHJlYW1TaW5rKG1vZGU6ICdhdWRpbycgfCAndmlkZW8nLCBpdGVtOiBJRW5jb2RlZFN0cmVhbVNpbmspIHtcbiAgICBpZiAodHlwZW9mIGl0ZW0gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZhbGlkOiBmYWxzZSxcbiAgICAgICAgdmFsaWRhdGlvblJlc3VsdDogYFVuZXhwZWN0ZWQgJHttb2RlfSBFbmNvZGVkIFN0cmVhbSBTaW5rIGZ1bmN0aW9uIHR5cGUuIEZvdW5kIFske3R5cGVvZiBpdGVtfV1gXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChpdGVtLmxlbmd0aCAhPT0gMikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsaWQ6IGZhbHNlLFxuICAgICAgICB2YWxpZGF0aW9uUmVzdWx0OiBgVW5leHBlY3RlZCAke21vZGV9IEVuY29kZWQgU3RyZWFtIFNpbmsgZnVuY3Rpb24gcGFyYW1ldGVyIGxlbmd0aC4gRXhwZWN0ZWQgMi4gRm91bmQgWyR7aXRlbS5sZW5ndGh9XWBcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHZhbGlkOiB0cnVlLFxuICAgICAgdmFsaWRhdGlvblJlc3VsdDogJ29rJ1xuICAgIH07XG4gIH1cblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0VuY29kZWRTdHJlYW1TaW5rIGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IERpc3Bvc2FibGUgZnJvbSAnLi4vLi4vbGFuZy9EaXNwb3NhYmxlJztcbmltcG9ydCBEaXNwb3NhYmxlTGlzdCBmcm9tICcuLi8uLi9sYW5nL0Rpc3Bvc2FibGVMaXN0JztcbmltcG9ydCBhc3NlcnRVbnJlYWNoYWJsZSBmcm9tICcuLi8uLi9sYW5nL2Fzc2VydFVucmVhY2hhYmxlJztcbmltcG9ydCB7SVN0cmVhbVRyYWNrVHJhbnNmb3JtfSBmcm9tICcuLi90cmFuc2Zvcm1hdGlvbi9TdHJlYW1UcmFja1RyYW5zZm9ybSc7XG5pbXBvcnQge0lFbmNvZGVkU3RyZWFtU2lua30gZnJvbSAnLi4vdHJhbnNmb3JtYXRpb24vRW5jb2RlZFN0cmVhbVNpbmsnO1xuaW1wb3J0IEZlYXR1cmVFbmFibGVtZW50IGZyb20gJy4uLy4uL2Vudmlyb25tZW50L0ZlYXR1cmVFbmFibGVtZW50JztcbmltcG9ydCBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLCB7U3Vycm9nYXRlRnJhbWVUeXBlLCBTa2lwRnJhbWV9IGZyb20gJy4vU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlcic7XG5cbnR5cGUgTWVkaWFTdHJlYW1UcmFja0tpbmQgPSAndmlkZW8nIHwgJ2F1ZGlvJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSW5zZXJ0YWJsZVN0cmVhbXMge1xuICBzdGF0aWMgYXBwbHlFbmNvZGVkU3RyZWFtVHJhbnNmb3JtYXRpb24oc3RyZWFtOiBNZWRpYVN0cmVhbSwgcmVjZWl2ZXJzOiBSVENSdHBSZWNlaXZlcltdLCBlbmNvZGVkVmlkZW9TdHJlYW1TaW5rOiBJRW5jb2RlZFN0cmVhbVNpbms8UlRDRW5jb2RlZFZpZGVvRnJhbWU+LCBlbmNvZGVkQXVkaW9TdHJlYW1TaW5rOiBJRW5jb2RlZFN0cmVhbVNpbms8UlRDRW5jb2RlZEF1ZGlvRnJhbWU+LCB2aWRlb0NvZGVjOiBzdHJpbmcsIGF1ZGlvQ29kZWM6IHN0cmluZyk6IHtkaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3R9IHtcbiAgICBjb25zdCBkaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3QgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcblxuICAgIHN0cmVhbS5nZXRUcmFja3MoKS5mb3JFYWNoKHRyYWNrID0+IHtcbiAgICAgIGNvbnN0IHJlY2VpdmVyID0gcmVjZWl2ZXJzLmZpbHRlcihyZWNlaXZlID0+IHJlY2VpdmUudHJhY2sgPT09IHRyYWNrKVswXTtcbiAgICAgIGNvbnN0IGtpbmQ6IE1lZGlhU3RyZWFtVHJhY2tLaW5kID0gdHJhY2sua2luZCBhcyBNZWRpYVN0cmVhbVRyYWNrS2luZDtcblxuICAgICAgc3dpdGNoIChraW5kKSB7XG4gICAgICAgIGNhc2UgJ3ZpZGVvJzoge1xuICAgICAgICAgIGlmIChlbmNvZGVkVmlkZW9TdHJlYW1TaW5rKSB7XG4gICAgICAgICAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQuaXNSVENSdHBTY3JpcHRUcmFuc2Zvcm1TdXBwb3J0ZWQpIHtcbiAgICAgICAgICAgICAgY29uc3Qgd29ya2VyID0gbmV3IFdvcmtlcihuZXcgVVJMKCcuL1dvcmtlclRyYW5zZm9ybVN0cmVhbS50cycsIGltcG9ydC5tZXRhLnVybCksIHt0eXBlOiAnbW9kdWxlJ30pO1xuXG4gICAgICAgICAgICAgIHdvcmtlci5vbm1lc3NhZ2UgPSBhc3luYyBldmVudCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFhd2FpdCBlbmNvZGVkVmlkZW9TdHJlYW1TaW5rKHRyYWNrLCBldmVudC5kYXRhLmNodW5rKSkge1xuICAgICAgICAgICAgICAgICAgd29ya2VyLnBvc3RNZXNzYWdlKHtmb3JjZUludmFsaWRGcmFtZTogdHJ1ZX0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICByZWNlaXZlci50cmFuc2Zvcm0gPSBuZXcgUlRDUnRwU2NyaXB0VHJhbnNmb3JtKHdvcmtlciwge1xuICAgICAgICAgICAgICAgIGtpbmQ6IHRyYWNrLmtpbmQsXG4gICAgICAgICAgICAgICAgY29kZWM6IHZpZGVvQ29kZWNcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGRpc3Bvc2FibGVzLmFkZChuZXcgRGlzcG9zYWJsZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgd29ya2VyLnRlcm1pbmF0ZSgpO1xuICAgICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGVuY29kZWRTdHJlYW1UcmFuc2Zvcm1DYWxsYmFjazogVHJhbnNmb3JtZXJUcmFuc2Zvcm1DYWxsYmFjazxSVENFbmNvZGVkVmlkZW9GcmFtZSwgUlRDRW5jb2RlZFZpZGVvRnJhbWU+ID0gYXN5bmMoY2h1bmssIGNvbnRyb2xsZXIpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFhd2FpdCBlbmNvZGVkVmlkZW9TdHJlYW1TaW5rKHRyYWNrLCBjaHVuaykpIHtcbiAgICAgICAgICAgICAgICBsZXQgc3Vycm9nYXRlOiBTdXJyb2dhdGVGcmFtZVR5cGU7XG5cbiAgICAgICAgICAgICAgICBpZiAoY2h1bmsudHlwZSA9PT0gJ2tleScpIHtcbiAgICAgICAgICAgICAgICAgIHN1cnJvZ2F0ZSA9IFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuZ2V0SW52YWxpZFN1cnJvZ2F0ZVZpZGVvSUZyYW1lKHZpZGVvQ29kZWMpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBzdXJyb2dhdGUgPSBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLmdldEludmFsaWRTdXJyb2dhdGVWaWRlb1BGcmFtZSh2aWRlb0NvZGVjKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoc3Vycm9nYXRlID09PSBTa2lwRnJhbWUpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjaHVuay5kYXRhID0gc3Vycm9nYXRlIHx8IGNodW5rLmRhdGE7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGNodW5rLnR5cGUgPT09ICdrZXknKSB7XG4gICAgICAgICAgICAgICAgICBjaHVuay5kYXRhID0gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5nZXRTdXJyb2dhdGVWaWRlb0lGcmFtZVBlckNvZGVjKHZpZGVvQ29kZWMpIHx8IGNodW5rLmRhdGE7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIGNodW5rLmRhdGEgPSBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLmdldFN1cnJvZ2F0ZVZpZGVvUEZyYW1lUGVyQ29kZWModmlkZW9Db2RlYykgfHwgY2h1bmsuZGF0YTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjb250cm9sbGVyLmVucXVldWUoY2h1bmspO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgdHJhbnNmb3JtZXIgPSBuZXcgVHJhbnNmb3JtU3RyZWFtKHt0cmFuc2Zvcm06IGVuY29kZWRTdHJlYW1UcmFuc2Zvcm1DYWxsYmFja30pO1xuICAgICAgICAgICAgY29uc3QgcmVjZWl2ZXJTdHJlYW1zID0gcmVjZWl2ZXIuY3JlYXRlRW5jb2RlZFN0cmVhbXMoKTtcbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZSA9IHJlY2VpdmVyU3RyZWFtcy5yZWFkYWJsZTtcbiAgICAgICAgICAgIGNvbnN0IHNpbmsgPSByZWNlaXZlclN0cmVhbXMud3JpdGFibGU7XG5cbiAgICAgICAgICAgIHNvdXJjZVxuICAgICAgICAgICAgICAucGlwZVRocm91Z2godHJhbnNmb3JtZXIpXG4gICAgICAgICAgICAgIC5waXBlVG8oc2luayk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlICdhdWRpbyc6IHtcbiAgICAgICAgICBpZiAoZW5jb2RlZEF1ZGlvU3RyZWFtU2luaykge1xuICAgICAgICAgICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LmlzUlRDUnRwU2NyaXB0VHJhbnNmb3JtU3VwcG9ydGVkKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHdvcmtlciA9IG5ldyBXb3JrZXIobmV3IFVSTCgnLi9Xb3JrZXJUcmFuc2Zvcm1TdHJlYW0udHMnLCBpbXBvcnQubWV0YS51cmwpLCB7dHlwZTogJ21vZHVsZSd9KTtcblxuICAgICAgICAgICAgICB3b3JrZXIub25tZXNzYWdlID0gYXN5bmMgZXZlbnQgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghYXdhaXQgZW5jb2RlZEF1ZGlvU3RyZWFtU2luayh0cmFjaywgZXZlbnQuZGF0YS5jaHVuaykpIHtcbiAgICAgICAgICAgICAgICAgIHdvcmtlci5wb3N0TWVzc2FnZSh7Zm9yY2VJbnZhbGlkRnJhbWU6IHRydWV9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgcmVjZWl2ZXIudHJhbnNmb3JtID0gbmV3IFJUQ1J0cFNjcmlwdFRyYW5zZm9ybSh3b3JrZXIsIHtcbiAgICAgICAgICAgICAgICBraW5kOiB0cmFjay5raW5kLFxuICAgICAgICAgICAgICAgIGNvZGVjOiBhdWRpb0NvZGVjXG4gICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgIGNvbnN0IG1lZGlhU3RyZWFtID0gbmV3IE1lZGlhU3RyZWFtKCk7XG4gICAgICAgICAgICAgIGNvbnN0IGF1ZGlvUHVtcGVyID0gbmV3IEF1ZGlvKCk7XG5cbiAgICAgICAgICAgICAgYXVkaW9QdW1wZXIuc3JjT2JqZWN0ID0gbWVkaWFTdHJlYW07XG4gICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYXVkaW9QdW1wZXIpO1xuXG4gICAgICAgICAgICAgIGRpc3Bvc2FibGVzLmFkZChuZXcgRGlzcG9zYWJsZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgd29ya2VyLnRlcm1pbmF0ZSgpO1xuICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoYXVkaW9QdW1wZXIpO1xuICAgICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGVuY29kZWRTdHJlYW1UcmFuc2Zvcm1DYWxsYmFjazogVHJhbnNmb3JtZXJUcmFuc2Zvcm1DYWxsYmFjazxSVENFbmNvZGVkQXVkaW9GcmFtZSwgUlRDRW5jb2RlZEF1ZGlvRnJhbWU+ID0gYXN5bmMoY2h1bmssIGNvbnRyb2xsZXIpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFhd2FpdCBlbmNvZGVkQXVkaW9TdHJlYW1TaW5rKHRyYWNrLCBjaHVuaykpIHtcbiAgICAgICAgICAgICAgICBjaHVuay5kYXRhID0gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5nZXRJbnZhbGlkU3Vycm9nYXRlQXVkaW9EYXRhKCk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2h1bmsuZGF0YSA9IFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuZ2V0U3Vycm9nYXRlQXVkaW9TaWxlbnRQZXJDb2RlYyhhdWRpb0NvZGVjKSB8fCBjaHVuay5kYXRhO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgY29udHJvbGxlci5lbnF1ZXVlKGNodW5rKTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IHRyYW5zZm9ybWVyID0gbmV3IFRyYW5zZm9ybVN0cmVhbSh7dHJhbnNmb3JtOiBlbmNvZGVkU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2t9KTtcbiAgICAgICAgICAgIGNvbnN0IHJlY2VpdmVyU3RyZWFtcyA9IHJlY2VpdmVyLmNyZWF0ZUVuY29kZWRTdHJlYW1zKCk7XG4gICAgICAgICAgICBjb25zdCBzb3VyY2UgPSByZWNlaXZlclN0cmVhbXMucmVhZGFibGU7XG4gICAgICAgICAgICBjb25zdCBzaW5rID0gcmVjZWl2ZXJTdHJlYW1zLndyaXRhYmxlO1xuXG4gICAgICAgICAgICBzb3VyY2VcbiAgICAgICAgICAgICAgLnBpcGVUaHJvdWdoKHRyYW5zZm9ybWVyKVxuICAgICAgICAgICAgICAucGlwZVRvKHNpbmspO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZShraW5kKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiB7ZGlzcG9zYWJsZXN9O1xuICB9XG5cbiAgc3RhdGljIGFwcGx5SW5zZXJ0YWJsZVN0cmVhbVRyYW5zZm9ybWF0aW9uKHN0cmVhbTogTWVkaWFTdHJlYW0sIHZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s6IElTdHJlYW1UcmFja1RyYW5zZm9ybTxWaWRlb0ZyYW1lPiwgYXVkaW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjazogSVN0cmVhbVRyYWNrVHJhbnNmb3JtPEF1ZGlvRGF0YT4pOiB7dHJhbnNmb3JtZWRTdHJlYW06IE1lZGlhU3RyZWFtOyBkaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3R9IHtcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFN0cmVhbSA9IG5ldyBNZWRpYVN0cmVhbSgpO1xuICAgIGNvbnN0IGRpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdCA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuXG4gICAgc3RyZWFtLmdldFRyYWNrcygpLmZvckVhY2godHJhY2sgPT4ge1xuICAgICAgY29uc3Qga2luZDogTWVkaWFTdHJlYW1UcmFja0tpbmQgPSB0cmFjay5raW5kIGFzIE1lZGlhU3RyZWFtVHJhY2tLaW5kO1xuXG4gICAgICBzd2l0Y2ggKGtpbmQpIHtcbiAgICAgICAgY2FzZSAndmlkZW8nOiB7XG4gICAgICAgICAgaWYgKHZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2spIHtcbiAgICAgICAgICAgIGNvbnN0IGluc2VydGFibGVTdHJlYW1UcmFuc2Zvcm1DYWxsYmFjazogVHJhbnNmb3JtZXJUcmFuc2Zvcm1DYWxsYmFjazxWaWRlb0ZyYW1lLCBWaWRlb0ZyYW1lPiA9IChjaHVuaywgY29udHJvbGxlcikgPT4ge1xuICAgICAgICAgICAgICB2aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrKHRyYWNrLCBjaHVuaywgY29udHJvbGxlcik7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCB2aWRlb1RyYWNrID0gdHJhY2sgYXMgTWVkaWFTdHJlYW1WaWRlb1RyYWNrO1xuICAgICAgICAgICAgY29uc3QgdHJhbnNmb3JtZXIgPSBuZXcgVHJhbnNmb3JtU3RyZWFtKHt0cmFuc2Zvcm06IGluc2VydGFibGVTdHJlYW1UcmFuc2Zvcm1DYWxsYmFja30pO1xuICAgICAgICAgICAgY29uc3QgcHJvY2Vzc29yID0gbmV3IE1lZGlhU3RyZWFtVHJhY2tQcm9jZXNzb3Ioe3RyYWNrOiB2aWRlb1RyYWNrfSk7XG4gICAgICAgICAgICBjb25zdCBnZW5lcmF0b3IgPSBuZXcgTWVkaWFTdHJlYW1UcmFja0dlbmVyYXRvcih7a2luZDogdmlkZW9UcmFjay5raW5kfSk7XG4gICAgICAgICAgICBjb25zdCBzb3VyY2UgPSBwcm9jZXNzb3IucmVhZGFibGU7XG4gICAgICAgICAgICBjb25zdCBzaW5rID0gZ2VuZXJhdG9yLndyaXRhYmxlO1xuXG4gICAgICAgICAgICBzb3VyY2VcbiAgICAgICAgICAgICAgLnBpcGVUaHJvdWdoKHRyYW5zZm9ybWVyKVxuICAgICAgICAgICAgICAucGlwZVRvKHNpbmspO1xuXG4gICAgICAgICAgICB0cmFuc2Zvcm1lZFN0cmVhbS5hZGRUcmFjayhnZW5lcmF0b3IpO1xuICAgICAgICAgICAgZGlzcG9zYWJsZXMuYWRkKG5ldyBEaXNwb3NhYmxlKCgpID0+IHtcbiAgICAgICAgICAgICAgdHJhbnNmb3JtZWRTdHJlYW0ucmVtb3ZlVHJhY2soZ2VuZXJhdG9yKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdHJhbnNmb3JtZWRTdHJlYW0uYWRkVHJhY2sodHJhY2spO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSAnYXVkaW8nOiB7XG4gICAgICAgICAgaWYgKGF1ZGlvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2spIHtcbiAgICAgICAgICAgIGNvbnN0IGluc2VydGFibGVTdHJlYW1UcmFuc2Zvcm1DYWxsYmFjazogVHJhbnNmb3JtZXJUcmFuc2Zvcm1DYWxsYmFjazxBdWRpb0RhdGEsIEF1ZGlvRGF0YT4gPSAoY2h1bmssIGNvbnRyb2xsZXIpID0+IHtcbiAgICAgICAgICAgICAgYXVkaW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjayh0cmFjaywgY2h1bmssIGNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgYXVkaW9UcmFjayA9IHRyYWNrIGFzIE1lZGlhU3RyZWFtQXVkaW9UcmFjaztcbiAgICAgICAgICAgIGNvbnN0IHRyYW5zZm9ybWVyID0gbmV3IFRyYW5zZm9ybVN0cmVhbSh7dHJhbnNmb3JtOiBpbnNlcnRhYmxlU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2t9KTtcbiAgICAgICAgICAgIGNvbnN0IHByb2Nlc3NvciA9IG5ldyBNZWRpYVN0cmVhbVRyYWNrUHJvY2Vzc29yKHt0cmFjazogYXVkaW9UcmFja30pO1xuICAgICAgICAgICAgY29uc3QgZ2VuZXJhdG9yID0gbmV3IE1lZGlhU3RyZWFtVHJhY2tHZW5lcmF0b3Ioe2tpbmQ6IGF1ZGlvVHJhY2sua2luZH0pO1xuICAgICAgICAgICAgY29uc3Qgc291cmNlID0gcHJvY2Vzc29yLnJlYWRhYmxlO1xuICAgICAgICAgICAgY29uc3Qgc2luayA9IGdlbmVyYXRvci53cml0YWJsZTtcblxuICAgICAgICAgICAgc291cmNlXG4gICAgICAgICAgICAgIC5waXBlVGhyb3VnaCh0cmFuc2Zvcm1lcilcbiAgICAgICAgICAgICAgLnBpcGVUbyhzaW5rKTtcblxuICAgICAgICAgICAgdHJhbnNmb3JtZWRTdHJlYW0uYWRkVHJhY2soZ2VuZXJhdG9yKTtcblxuICAgICAgICAgICAgY29uc3QgbWVkaWFTdHJlYW0gPSBuZXcgTWVkaWFTdHJlYW0oKTtcbiAgICAgICAgICAgIGNvbnN0IGF1ZGlvUHVtcGVyID0gbmV3IEF1ZGlvKCk7XG5cbiAgICAgICAgICAgIG1lZGlhU3RyZWFtLmFkZFRyYWNrKHRyYWNrKTtcbiAgICAgICAgICAgIGF1ZGlvUHVtcGVyLnNyY09iamVjdCA9IG1lZGlhU3RyZWFtO1xuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChhdWRpb1B1bXBlcik7XG4gICAgICAgICAgICBkaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4ge1xuICAgICAgICAgICAgICB0cmFuc2Zvcm1lZFN0cmVhbS5yZW1vdmVUcmFjayhnZW5lcmF0b3IpO1xuICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGF1ZGlvUHVtcGVyKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdHJhbnNmb3JtZWRTdHJlYW0uYWRkVHJhY2sodHJhY2spO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZShraW5kKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiB7XG4gICAgICB0cmFuc2Zvcm1lZFN0cmVhbSxcbiAgICAgIGRpc3Bvc2FibGVzXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW5zZXJ0YWJsZVN0cmVhbXMgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElTdHJlYW1UcmFja1RyYW5zZm9ybTxUID0gQXVkaW9EYXRhIHwgVmlkZW9GcmFtZT4ge1xuICAgICh0cmFjazogTWVkaWFTdHJlYW1UcmFjaywgY2h1bms6IFQsIGNvbnRyb2xsZXI6IFRyYW5zZm9ybVN0cmVhbURlZmF1bHRDb250cm9sbGVyPFQ+KTogdm9pZCB8IFByb21pc2VMaWtlPHZvaWQ+O1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdHJlYW1UcmFja1RyYW5zZm9ybSB7XG4gIHN0YXRpYyB2YWxpZGF0ZU1lZGlhU3RyZWFtVHJhY2tUcmFuc2Zvcm0obW9kZTogJ2F1ZGlvJyB8ICd2aWRlbycsIGl0ZW06IElTdHJlYW1UcmFja1RyYW5zZm9ybSkge1xuICAgIGlmICh0eXBlb2YgaXRlbSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsaWQ6IGZhbHNlLFxuICAgICAgICB2YWxpZGF0aW9uUmVzdWx0OiBgVW5leHBlY3RlZCAke21vZGV9IE1lZGlhIFN0cmVhbSBUcmFjayB0cmFuc2Zvcm0gZnVuY3Rpb24gdHlwZS4gRm91bmQgWyR7dHlwZW9mIGl0ZW19XWBcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKGl0ZW0ubGVuZ3RoICE9PSAzKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB2YWxpZDogZmFsc2UsXG4gICAgICAgIHZhbGlkYXRpb25SZXN1bHQ6IGBVbmV4cGVjdGVkICR7bW9kZX0gTWVkaWEgU3RyZWFtIFRyYWNrIHRyYW5zZm9ybSBmdW5jdGlvbiBwYXJhbWV0ZXIgbGVuZ3RoLiBFeHBlY3RlZCAzLiBGb3VuZCBbJHtpdGVtLmxlbmd0aH1dYFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdmFsaWQ6IHRydWUsXG4gICAgICB2YWxpZGF0aW9uUmVzdWx0OiAnb2snXG4gICAgfTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgQnJvd3NlckRldGVjdG9yIGZyb20gJy4uLy4uL2RvbS9Ccm93c2VyRGV0ZWN0b3InO1xuXG5leHBvcnQgY29uc3QgU2tpcEZyYW1lID0gU3ltYm9sKCk7XG5cbmV4cG9ydCB0eXBlIFN1cnJvZ2F0ZUZyYW1lVHlwZSA9IEFycmF5QnVmZmVyIHwgdW5kZWZpbmVkIHwgdHlwZW9mIFNraXBGcmFtZTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlciB7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc1NhZmFyaSA9IEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ1NhZmFyaSc7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc01vYmlsZUNocm9tZSA9IEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0Nocm9tZScgJiYgQnJvd3NlckRldGVjdG9yLmlzTW9iaWxlKCk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc0FuZHJvaWRDaHJvbWUgPSBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdDaHJvbWUnICYmIEJyb3dzZXJEZXRlY3Rvci5pc0FuZHJvaWQ7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9zaW5nbGVaZXJvQnl0ZSA9IG5ldyBVaW50OEFycmF5KFsweDAwXSk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9kdW1teUF1ZGlvU2lsZW50UGVyQ29kZWMgPSB7T1BVUzogbmV3IFVpbnQ4QXJyYXkoWzB4NjgsIDB4MDcsIDB4ZDksIDB4YWIsIDB4YmMsIDB4NzksIDB4ODcsIDB4YWIsIDB4OGUsIDB4NGEsIDB4MTQsIDB4ZjMsIDB4YTcsIDB4MWMsIDB4ZjIsIDB4OWEsIDB4N2EsIDB4NDUsIDB4YTcsIDB4MmQsIDB4NDQsIDB4MjUsIDB4NzQsIDB4NGMsIDB4YWQsIDB4MTYsIDB4YjMsIDB4MGUsIDB4NTEsIDB4NTcsIDB4ZWEsIDB4ZTcsIDB4YWQsIDB4MmEsIDB4MzgsIDB4Y2UsIDB4MzNdKX07XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9kdW1teTJ4MlZpZGVvSUZyYW1lUGVyQ29kZWMgPSB7XG4gICAgSDI2NDogbmV3IFVpbnQ4QXJyYXkoW1xuICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwOSwgMHhmMCwgLy8gQWNjZXNzIHVuaXQgZGVsaW1pdGVyXG4gICAgICAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDY3LCAweGY0LCAweDAwLCAweDBhLCAweDkxLCAweDliLCAweDJiLCAweGYxLCAweGYxLCAweGY4LCAweDA4LCAweDgwLCAweDAwLCAweDAwLCAweDAzLCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDE5LCAweDA3LCAweDg5LCAweDEyLCAweGNiLCAvLyBTZXF1ZW5jZSBwYXJhbWV0ZXIgc2V0XG4gICAgICAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDY4LCAweGViLCAweGUzLCAweGM0LCAweDQ4LCAweDQ0LCAvLyBQaWN0dXJlIHBhcmFtdGVyIHNldFxuICAgICAgLyogKi8gMHgwMCwgMHgwMCwgMHgwMSwgMHg2NSwgMHg4OCwgMHg4MiwgMHgwMCwgMHgzZiwgMHg3MCwgMHgyMywgMHg4NiwgMHhlNiwgMHhkMSwgMHg4MCwgMHgwOSwgMHhhZiwgMHgwYSwgMHg0MSwgMHg2NiwgMHg2YiwgMHg1NCwgMHg0NiwgMHhmYiwgMHg3MSwgMHhkOSwgMHg3ZiwgMHhmZiwgMHhmZiwgMHhmOV0pLCAvLyBTbGljZSBsYXllcjogaWRyIGRhdGFcbiAgICBWUDg6IG5ldyBVaW50OEFycmF5KFsweGIwLCAweDAyLCAweDAwLCAweDlkLCAweDAxLCAweDJhLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDM5LCAweDZiLCAweDAwLCAweDI3LCAweDFjLCAweDI0LCAweDBjLCAweDJjLCAweDJjLCAweDQ0LCAweGNjLCAweDI0LCAweDQxLCAweGE4LCAweDAwLCAweDEzLCAweGE3LCAweGEzLCAweDdhLCAweDUwLCAweDAwLCAweGZlLCAweGViLCAweGRlLCAweDJmLCAweDhhLCAweDFlLCAweDZiLCAweDdiLCAweDA3LCAweDcyLCAweDYzLCAweDA5LCAweGE0LCAweDhlLCAweGMwXSksXG4gICAgVlA5OiBuZXcgVWludDhBcnJheShbMHg4MiwgMHg0OSwgMHg4MywgMHg0MiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHg3NiwgMHgzOCwgMHgyNCwgMHgxYywgMHgxOSwgMHhhMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg0MCwgMHgwMCwgMHgxMSwgMHhiZiwgMHhkZCwgMHg3NywgMHhmZiwgMHg0MCwgMHg3ZiwgMHhiMSwgMHgwMF0pXG4gIH07XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9kdW1teTJ4MlZpZGVvUEZyYW1lUGVyQ29kZWMgPSB7XG4gICAgSDI2NDogbmV3IFVpbnQ4QXJyYXkoW1xuICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwOSwgMHhmMCwgLy8gQWNjZXNzIHVuaXQgZGVsaW1pdGVyXG4gICAgICAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDQxLCAweDlhLCAweDY4LCAweDQ5LCAweGE4LCAweDQxLCAweDY4LCAweDk5LCAweDRjLCAweDBmLCAweGZmLCAweDkyLCAweDgxXSksIC8vIFNsaWNlIGxheWVyOiBub24gaWRyIGRhdGFcbiAgICBWUDg6IG5ldyBVaW50OEFycmF5KFsweDMxLCAweDAzLCAweDAwLCAweGU0LCAweGUwLCAweGE4LCAweDliLCAweDM3LCAweGFmLCAweDEwLCAweDRmLCAweDRmLCAweGIxLCAweDBhLCAweDJmLCAweGU0LCAweDkyLCAweGMwLCAweDFmLCAweGU3LCAweDRmLCAweDQ2LCAweGZmLCAweGVlLCAweDUxLCAweGMxLCAweDVkLCAweDAwLCAweGZlLCAweGViLCAweGRlLCAweDJmLCAweDhhLCAweDFlLCAweDZiLCAweDdiLCAweDA3LCAweDcyLCAweDYzLCAweDA5LCAweGE0LCAweDhlLCAweGMwXSksXG4gICAgVlA5OiBuZXcgVWludDhBcnJheShbMHg4NiwgMHgwMCwgMHg0MCwgMHg5MiwgMHg5YywgMHgyNCwgMHg0OCwgMHgwMCwgMHgwMCwgMHgwMywgMHg3MCwgMHgwMCwgMHgwMCwgMHg0YiwgMHg0MF0pXG4gIH07XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9kdW1teTgyeDgySDI2NCA9IHtcbiAgICBJRnJhbWU6IG5ldyBVaW50OEFycmF5KFtcbiAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4NjcsIDB4NDIsIDB4YzAsIDB4MGQsIDB4ZGEsIDB4MTgsIDB4ZGUsIDB4MjIsIDB4MjIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDMsIDB4YzgsIDB4ZjEsIDB4NDIsIDB4YWEsIC8vIFNlcXVlbmNlIHBhcmFtZXRlciBzZXRcbiAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4NjgsIDB4Y2UsIDB4MGYsIDB4YzgsIC8vIFBpY3R1cmUgcGFyYW1ldGVyIHNldFxuICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwNiwgMHgwMywgLi4ubmV3IFVpbnQ4QXJyYXkoNDApLmZpbGwoMHhmZiksIDB4NWYsIC4uLm5ldyBVaW50OEFycmF5KDEwMjk1KS5maWxsKDB4ZmYpLCAweDgwLCAvLyBTdXBwbGVtZW50YWwgZW5oYW5jZW1lbnQgaW5mb3JtYXRpb24gKFNFSSlcbiAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4NjUsIDB4ODgsIDB4ODQsIDB4MDUsIC4uLm5ldyBVaW50OEFycmF5KDMpLmZpbGwoMHhmZiksIDB4MGYsIDB4NDUsIDB4MDAsIDB4MDEsIDB4NTcsIDB4OWYsIDB4MjcsIDB4MjcsIDB4MjcsIDB4MjcsIDB4MjcsIDB4NWQsIDB4NzUsIDB4ZDcsIDB4NWQsIDB4NzUsIDB4ZDcsIDB4NWQsIDB4NzUsIDB4ZDcsIDB4NWQsIDB4NzUsIDB4ZDcsIDB4NWQsIDB4NzUsIDB4ZDcsIDB4NWQsIDB4NzUsIDB4ZDcsIDB4NWQsIDB4NzUsIDB4ZDcsIDB4NWQsIDB4NzhdKSwgLy8gU2xpY2UgbGF5ZXI6IElkciBkYXRhXG4gICAgUEZyYW1lOiBuZXcgVWludDhBcnJheShbXG4gICAgICAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDA2LCAweDAzLCAuLi5uZXcgVWludDhBcnJheSg0MCkuZmlsbCgweGZmKSwgMHhhNCwgLi4ubmV3IFVpbnQ4QXJyYXkoMTAzNjQpLmZpbGwoMHhmZiksIDB4ODAsIC8vIFNFSVxuICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg0MSwgMHg5YSwgMHgyMCwgMHgxNSwgMHhmMCwgMHg0Yl0pIC8vIFNsaWNlIGxheWVyOiBub24gaWRyIGRhdGFcbiAgfTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2R1bW15ODJ4ODJIMjY0UEZyYW1lRnJhbWVOdW1iZXJJbmRleCA9IDEwNDE4O1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfc3Vycm9nYXRlODJ4ODJQRnJhbWVGcmFtZU51bWJlclJlc2V0ID0gMTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX3VzZVVwZGF0ZVN1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXIgPSBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9pc01vYmlsZUNocm9tZSB8fCBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9pc1NhZmFyaTtcbiAgcHJpdmF0ZSBzdGF0aWMgX3N1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXIgPSBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9zdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyUmVzZXQ7XG5cbiAgc3RhdGljIGdldFN1cnJvZ2F0ZUF1ZGlvU2lsZW50UGVyQ29kZWMoY29kZWM6IHN0cmluZyk6IEFycmF5QnVmZmVyIHwgdW5kZWZpbmVkIHtcbiAgICBzd2l0Y2ggKGNvZGVjLnRvVXBwZXJDYXNlKCkpIHtcbiAgICAgIGNhc2UgJ09QVVMnOiB7XG4gICAgICAgIHJldHVybiBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9kdW1teUF1ZGlvU2lsZW50UGVyQ29kZWMuT1BVUy5idWZmZXI7XG4gICAgICB9XG5cbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzdGF0aWMgZ2V0SW52YWxpZFN1cnJvZ2F0ZUF1ZGlvRGF0YSgpOiBBcnJheUJ1ZmZlciB7XG4gICAgcmV0dXJuIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3NpbmdsZVplcm9CeXRlLmJ1ZmZlcjtcbiAgfVxuXG4gIHN0YXRpYyBnZXRTdXJyb2dhdGVWaWRlb0lGcmFtZVBlckNvZGVjKGNvZGVjOiBzdHJpbmcpOiBBcnJheUJ1ZmZlciB8IHVuZGVmaW5lZCB7XG4gICAgc3dpdGNoIChjb2RlYy50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICBjYXNlICdIMjY0Jzoge1xuICAgICAgICBpZiAoU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fdXNlVXBkYXRlU3Vycm9nYXRlODJ4ODJQRnJhbWVGcmFtZU51bWJlcikge1xuICAgICAgICAgIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3N1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXIgPSBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9zdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyUmVzZXQ7XG5cbiAgICAgICAgICByZXR1cm4gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fZHVtbXk4Mng4MkgyNjQuSUZyYW1lLmJ1ZmZlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9kdW1teTJ4MlZpZGVvSUZyYW1lUGVyQ29kZWMuSDI2NC5idWZmZXI7XG4gICAgICB9XG5cbiAgICAgIGNhc2UgJ1ZQOCc6IHtcbiAgICAgICAgcmV0dXJuIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX2R1bW15MngyVmlkZW9JRnJhbWVQZXJDb2RlYy5WUDguYnVmZmVyO1xuICAgICAgfVxuXG4gICAgICBjYXNlICdWUDknOiB7XG4gICAgICAgIHJldHVybiBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9kdW1teTJ4MlZpZGVvSUZyYW1lUGVyQ29kZWMuVlA5LmJ1ZmZlcjtcbiAgICAgIH1cblxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBnZXRJbnZhbGlkU3Vycm9nYXRlVmlkZW9JRnJhbWUoY29kZWM6IHN0cmluZyk6IFN1cnJvZ2F0ZUZyYW1lVHlwZSB7XG4gICAgaWYgKChjb2RlYy50b1VwcGVyQ2FzZSgpID09PSAnSDI2NCcpICYmIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3VzZVVwZGF0ZVN1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXIpIHtcbiAgICAgIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3N1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXIgPSBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9zdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyUmVzZXQ7XG5cbiAgICAgIGlmIChTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9pc0FuZHJvaWRDaHJvbWUpIHtcbiAgICAgICAgcmV0dXJuIFNraXBGcmFtZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fc2luZ2xlWmVyb0J5dGUuYnVmZmVyO1xuICB9XG5cbiAgc3RhdGljIGdldFN1cnJvZ2F0ZVZpZGVvUEZyYW1lUGVyQ29kZWMoY29kZWM6IHN0cmluZyk6IEFycmF5QnVmZmVyIHwgdW5kZWZpbmVkIHtcbiAgICBzd2l0Y2ggKGNvZGVjLnRvVXBwZXJDYXNlKCkpIHtcbiAgICAgIGNhc2UgJ0gyNjQnOiB7XG4gICAgICAgIGlmIChTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl91c2VVcGRhdGVTdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyKSB7XG4gICAgICAgICAgY29uc3QgYnVmZmVyID0gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5nZXRTdXJyb2dhdGU4Mng4MlBGcmFtZUFuZFVwZGF0ZUZyYW1lTnVtYmVyKCk7XG5cbiAgICAgICAgICByZXR1cm4gYnVmZmVyO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX2R1bW15MngyVmlkZW9QRnJhbWVQZXJDb2RlYy5IMjY0LmJ1ZmZlcjtcbiAgICAgIH1cblxuICAgICAgY2FzZSAnVlA4Jzoge1xuICAgICAgICByZXR1cm4gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fZHVtbXkyeDJWaWRlb1BGcmFtZVBlckNvZGVjLlZQOC5idWZmZXI7XG4gICAgICB9XG5cbiAgICAgIGNhc2UgJ1ZQOSc6IHtcbiAgICAgICAgcmV0dXJuIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX2R1bW15MngyVmlkZW9QRnJhbWVQZXJDb2RlYy5WUDkuYnVmZmVyO1xuICAgICAgfVxuXG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGdldEludmFsaWRTdXJyb2dhdGVWaWRlb1BGcmFtZShjb2RlYzogc3RyaW5nKTogU3Vycm9nYXRlRnJhbWVUeXBlIHtcbiAgICBpZiAoKGNvZGVjLnRvVXBwZXJDYXNlKCkgPT09ICdIMjY0JykgJiYgU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fdXNlVXBkYXRlU3Vycm9nYXRlODJ4ODJQRnJhbWVGcmFtZU51bWJlcikge1xuICAgICAgY29uc3Qgc2F2ZWRTdXJyb2dhdGVGcmFtZU51bWJlciA9IFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3N1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXI7XG4gICAgICBjb25zdCBidWZmZXIgPSBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLmdldFN1cnJvZ2F0ZTgyeDgyUEZyYW1lQW5kVXBkYXRlRnJhbWVOdW1iZXIoKTtcblxuICAgICAgaWYgKHNhdmVkU3Vycm9nYXRlRnJhbWVOdW1iZXIgPiBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9zdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyUmVzZXQpIHtcbiAgICAgICAgaWYgKFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX2lzQW5kcm9pZENocm9tZSkge1xuICAgICAgICAgIHJldHVybiBTa2lwRnJhbWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fc2luZ2xlWmVyb0J5dGUuYnVmZmVyO1xuICAgICAgfVxuXG4gICAgICBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9zdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyKys7XG5cbiAgICAgIHJldHVybiBidWZmZXI7XG4gICAgfVxuXG4gICAgcmV0dXJuIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3NpbmdsZVplcm9CeXRlLmJ1ZmZlcjtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGdldFN1cnJvZ2F0ZTgyeDgyUEZyYW1lQW5kVXBkYXRlRnJhbWVOdW1iZXIoKTogQXJyYXlCdWZmZXIge1xuICAgIGNvbnN0IGJpdE1hc2sxID0gMHgwZTtcbiAgICBjb25zdCBiaXRNYXNrMiA9IDB4MDE7XG4gICAgY29uc3QgYml0U2hpZnRSaWdodEJ5MSA9IDE7XG4gICAgY29uc3QgYml0U2hpZnRMZWZ0Qnk3ID0gNztcbiAgICBjb25zdCBieXRlMSA9ICgoU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fc3Vycm9nYXRlODJ4ODJQRnJhbWVGcmFtZU51bWJlciAmIGJpdE1hc2sxKSA+PiBiaXRTaGlmdFJpZ2h0QnkxKTtcbiAgICBjb25zdCBieXRlMiA9ICgoU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fc3Vycm9nYXRlODJ4ODJQRnJhbWVGcmFtZU51bWJlciAmIGJpdE1hc2syKSA8PCBiaXRTaGlmdExlZnRCeTcpO1xuICAgIGNvbnN0IGNvcHlPZkR1bW15UEZyYW1lcyA9IFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX2R1bW15ODJ4ODJIMjY0LlBGcmFtZS5zbGljZSgpO1xuICAgIGNvbnN0IGJ1ZmZlciA9IGNvcHlPZkR1bW15UEZyYW1lcy5idWZmZXI7XG4gICAgY29uc3QgYnVmZmVySW5kZXggPSBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9kdW1teTgyeDgySDI2NFBGcmFtZUZyYW1lTnVtYmVySW5kZXg7XG5cbiAgICBidWZmZXJbYnVmZmVySW5kZXhdIHw9IGJ5dGUxO1xuICAgIGJ1ZmZlcltidWZmZXJJbmRleCArIDFdIHw9IGJ5dGUyO1xuICAgIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3N1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXIrKztcblxuICAgIHJldHVybiBidWZmZXI7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlciBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmRlY2xhcmUgY29uc3QgX19CVUlMRF9WRVJTSU9OX186IHN0cmluZztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmVyc2lvbk1hbmFnZXIge1xuICBwcml2YXRlIHN0YXRpYyBfZGVmYXVsdFZlcnNpb24gPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCk7XG5cbiAgc3RhdGljIGdldCBzZGtWZXJzaW9uKCk6IHN0cmluZyB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBfX0JVSUxEX1ZFUlNJT05fXztcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZGVmYXVsdFZlcnNpb247XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgVGVsZW1ldHJ5U2VydmljZSBmcm9tICcuL1RlbGVtZXRyeVNlcnZpY2UnO1xuaW1wb3J0IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24gZnJvbSAnLi9UZWxlbWV0cnlDb25maWd1cmF0aW9uJztcbmltcG9ydCB7SUFwcGVuZGVyfSBmcm9tICcuLi9sb2dnZXIvSUFwcGVuZGVyJztcbmltcG9ydCB7TG9nZ2luZ0xldmVsfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVsZW1ldHJ5QXBwZW5kZXIgaW1wbGVtZW50cyBJQXBwZW5kZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF90ZWxlbWV0cnlTZXJ2aWNlOiBUZWxlbWV0cnlTZXJ2aWNlO1xuICBwcml2YXRlIHJlYWRvbmx5IF90ZW5hbmN5OiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3Nlc3Npb25JZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF90aHJlc2hvbGQ6IExvZ2dpbmdMZXZlbDtcblxuICBjb25zdHJ1Y3Rvcih0ZWxlbWV0cnlDb25maWd1cmF0aW9uOiBUZWxlbWV0cnlDb25maWd1cmF0aW9uKSB7XG4gICAgdGhpcy5fdGVuYW5jeSA9IHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24udGVuYW5jeTtcbiAgICB0aGlzLl9zZXNzaW9uSWQgPSB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLnNlc3Npb25JZDtcbiAgICB0aGlzLl90aHJlc2hvbGQgPSB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLnRocmVzaG9sZDtcbiAgICB0aGlzLl90ZWxlbWV0cnlTZXJ2aWNlID0gbmV3IFRlbGVtZXRyeVNlcnZpY2UodGVsZW1ldHJ5Q29uZmlndXJhdGlvbik7XG4gIH1cblxuICBsb2cobG9nTGV2ZWw6IExvZ2dpbmdMZXZlbCwgbWVzc2FnZTogc3RyaW5nLCBjYXRlZ29yeTogc3RyaW5nLCBkYXRlOiBEYXRlKTogdm9pZCB7XG4gICAgaWYgKGxvZ0xldmVsIDwgdGhpcy5fdGhyZXNob2xkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fdGVsZW1ldHJ5U2VydmljZS5wdXNoKGxvZ0xldmVsLCBtZXNzYWdlLCBjYXRlZ29yeSwgZGF0ZSk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7TG9nZ2luZ0xldmVsfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyJztcbmltcG9ydCBMb2dnZXJEZWZhdWx0cyBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyRGVmYXVsdHMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZWxlbWV0cnlDb25maWd1cmF0aW9uIHtcbiAgcHJpdmF0ZSBfdXJsID0gJ2h0dHBzOi8vdGVsZW1ldHJ5LnBoZW5peHJ0cy5jb20vdGVsZW1ldHJ5L2xvZ3MnO1xuICBwcml2YXRlIF90ZW5hbmN5OiBzdHJpbmc7XG4gIHByaXZhdGUgX3Nlc3Npb25JZDogc3RyaW5nO1xuICBwcml2YXRlIF9lbnZpcm9ubWVudDogc3RyaW5nO1xuICBwcml2YXRlIF9wYWdlTG9hZFRpbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSBfdGhyZXNob2xkID0gTG9nZ2VyRGVmYXVsdHMuZGVmYXVsdFRlbGVtZXRyeUxvZ2dpbmdMZXZlbDtcblxuICBnZXQgdXJsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3VybDtcbiAgfVxuXG4gIHNldCB1cmwodXJsOiBzdHJpbmcpIHtcbiAgICBjb25zdCB0ZWxlbWV0cnlVcmwgPSBuZXcgVVJMKHVybCk7XG5cbiAgICB0ZWxlbWV0cnlVcmwucGF0aG5hbWUgPSB0ZWxlbWV0cnlVcmwucGF0aG5hbWUgKyAnL2xvZ3MnO1xuXG4gICAgdGhpcy5fdXJsID0gdGVsZW1ldHJ5VXJsLnRvU3RyaW5nKCk7XG4gIH1cblxuICBnZXQgZW52aXJvbm1lbnQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fZW52aXJvbm1lbnQ7XG4gIH1cblxuICBzZXQgZW52aXJvbm1lbnQoZW52aXJvbm1lbnQ6IHN0cmluZykge1xuICAgIHRoaXMuX2Vudmlyb25tZW50ID0gZW52aXJvbm1lbnQ7XG4gIH1cblxuICBnZXQgdGVuYW5jeSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl90ZW5hbmN5O1xuICB9XG5cbiAgc2V0IHRlbmFuY3kodGVuYW5jeTogc3RyaW5nKSB7XG4gICAgdGhpcy5fdGVuYW5jeSA9IHRlbmFuY3k7XG4gIH1cblxuICBnZXQgc2Vzc2lvbklkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3Nlc3Npb25JZDtcbiAgfVxuXG4gIHNldCBzZXNzaW9uSWQoc2Vzc2lvbklkOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9zZXNzaW9uSWQgPSBzZXNzaW9uSWQ7XG4gIH1cblxuICBnZXQgcGFnZUxvYWRUaW1lKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3BhZ2VMb2FkVGltZTtcbiAgfVxuXG4gIHNldCBwYWdlTG9hZFRpbWUocGFnZUxvYWRUaW1lOiBudW1iZXIpIHtcbiAgICB0aGlzLl9wYWdlTG9hZFRpbWUgPSBwYWdlTG9hZFRpbWU7XG4gIH1cblxuICBnZXQgdGhyZXNob2xkKCk6IExvZ2dpbmdMZXZlbCB7XG4gICAgcmV0dXJuIHRoaXMuX3RocmVzaG9sZDtcbiAgfVxuXG4gIHNldCB0aHJlc2hvbGQodGhyZXNob2xkOiBMb2dnaW5nTGV2ZWwpIHtcbiAgICB0aGlzLl90aHJlc2hvbGQgPSB0aHJlc2hvbGQ7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7TG9nZ2luZ0xldmVsfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyJztcbmltcG9ydCBOdW1iZXJzIGZyb20gJy4uL2xhbmcvTnVtYmVycyc7XG5pbXBvcnQgVmVyc2lvbk1hbmFnZXIgZnJvbSAnLi4vc2RrL3ZlcnNpb24vVmVyc2lvbk1hbmFnZXInO1xuaW1wb3J0IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24gZnJvbSAnLi9UZWxlbWV0cnlDb25maWd1cmF0aW9uJztcblxuY29uc3QgcmVxdWVzdFNpemVMaW1pdCA9IDgxOTI7XG5cbmludGVyZmFjZSBJTG9nSXRlbSB7XG4gIHRpbWVzdGFtcDogc3RyaW5nO1xuICB0ZW5hbmN5OiBzdHJpbmc7XG4gIGxldmVsOiBzdHJpbmc7XG4gIGNhdGVnb3J5OiBzdHJpbmc7XG4gIG1lc3NhZ2U6IHN0cmluZztcbiAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHZlcnNpb246IHN0cmluZztcbiAgZW52aXJvbm1lbnQ6IHN0cmluZztcbiAgZnVsbFF1YWxpZmllZE5hbWU6IHN0cmluZztcbiAgcnVudGltZTogbnVtYmVyO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZWxlbWV0cnlTZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfdGVsZW1ldHJ5Q29uZmlndXJhdGlvbjogVGVsZW1ldHJ5Q29uZmlndXJhdGlvbjtcblxuICBwcml2YXRlIF9sb2dzOiBBcnJheTxJTG9nSXRlbT4gPSBbXTtcbiAgcHJpdmF0ZSBfaXNTZW5kaW5nOiBib29sZWFuO1xuICBwcml2YXRlIF9kb21haW4gPSBsb2NhdGlvbi5ob3N0bmFtZTtcblxuICBjb25zdHJ1Y3Rvcih0ZWxlbWV0cnlDb25maWd1cmF0aW9uOiBUZWxlbWV0cnlDb25maWd1cmF0aW9uKSB7XG4gICAgdGhpcy5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbiA9IHRlbGVtZXRyeUNvbmZpZ3VyYXRpb247XG4gIH1cblxuICBwdXNoKGxvZ0xldmVsOiBMb2dnaW5nTGV2ZWwsIG1lc3NhZ2U6IHN0cmluZywgY2F0ZWdvcnk6IHN0cmluZywgdGltZXN0YW1wOiBEYXRlKTogdm9pZCB7XG4gICAgY29uc3QgcnVudGltZSA9ICh0aW1lc3RhbXAudmFsdWVPZigpIC0gdGhpcy5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi5wYWdlTG9hZFRpbWUpIC8gMTAwMDtcbiAgICBjb25zdCBsb2dSZWNvcmQgPSB7XG4gICAgICB0aW1lc3RhbXA6IHRpbWVzdGFtcC50b0lTT1N0cmluZygpLFxuICAgICAgdGVuYW5jeTogdGhpcy5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi50ZW5hbmN5LFxuICAgICAgbGV2ZWw6IExvZ2dpbmdMZXZlbFtsb2dMZXZlbF0sXG4gICAgICBjYXRlZ29yeSxcbiAgICAgIG1lc3NhZ2UsXG4gICAgICBzZXNzaW9uSWQ6IHRoaXMuX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb24uc2Vzc2lvbklkLFxuICAgICAgdmVyc2lvbjogVmVyc2lvbk1hbmFnZXIuc2RrVmVyc2lvbixcbiAgICAgIGVudmlyb25tZW50OiB0aGlzLl90ZWxlbWV0cnlDb25maWd1cmF0aW9uLmVudmlyb25tZW50LFxuICAgICAgZnVsbFF1YWxpZmllZE5hbWU6IHRoaXMuX2RvbWFpbixcbiAgICAgIHJ1bnRpbWVcbiAgICB9O1xuXG4gICAgaWYgKGxvZ0xldmVsIDwgTG9nZ2luZ0xldmVsLkVycm9yKSB7XG4gICAgICB0aGlzLl9sb2dzLnB1c2gobG9nUmVjb3JkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fbG9ncy51bnNoaWZ0KGxvZ1JlY29yZCk7XG4gICAgfVxuXG4gICAgY29uc3QgaWdub3JlZCA9IHRoaXMuc2VuZExvZ3NJZkFibGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2VuZExvZ3MobG9nTWVzc2FnZXM6IEFycmF5PElMb2dJdGVtPik6IFByb21pc2U8UmVzcG9uc2UgfCB2b2lkPiB7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcblxuICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeSh7cmVjb3JkczogbG9nTWVzc2FnZXN9KSk7XG5cbiAgICByZXR1cm4gYXdhaXQgZmV0Y2godGhpcy5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi51cmwsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgYm9keTogZm9ybURhdGFcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2VuZExvZ3NJZkFibGUoKTogUHJvbWlzZTxSZXNwb25zZSB8IHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fbG9ncy5sZW5ndGggPD0gMCB8fCB0aGlzLl9pc1NlbmRpbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgbnVtYmVyT2ZMb2dzVG9TZW5kID0gMDtcbiAgICBsZXQgc2l6ZU9mTG9nc1RvU2VuZCA9IDA7XG5cbiAgICB0aGlzLl9pc1NlbmRpbmcgPSB0cnVlO1xuXG4gICAgY29uc3QgZ2V0SXRlbVNpemUgPSBpdGVtID0+IHR5cGVvZiBpdGVtID09PSAnbnVtYmVyJyA/IE51bWJlcnMuY291bnROdW1iZXJMZW5ndGgoaXRlbSkgOiBpdGVtLmxlbmd0aDtcbiAgICBjb25zdCBnZXRMb2dTaXplID0gKGxvZzogSUxvZ0l0ZW0pOiBudW1iZXIgPT4gT2JqZWN0LnZhbHVlcyhsb2cpXG4gICAgICAucmVkdWNlKChzdW0sIGl0ZW0pID0+IHN1bSArIChpdGVtID8gZ2V0SXRlbVNpemUoaXRlbSkgOiAwKSwgMCk7XG5cbiAgICB3aGlsZSAodGhpcy5fbG9ncy5sZW5ndGggPiBudW1iZXJPZkxvZ3NUb1NlbmQgJiYgZ2V0TG9nU2l6ZSh0aGlzLl9sb2dzW251bWJlck9mTG9nc1RvU2VuZF0pICsgc2l6ZU9mTG9nc1RvU2VuZCA8IHJlcXVlc3RTaXplTGltaXQpIHtcbiAgICAgIHNpemVPZkxvZ3NUb1NlbmQgKz0gZ2V0TG9nU2l6ZSh0aGlzLl9sb2dzW251bWJlck9mTG9nc1RvU2VuZF0pO1xuICAgICAgbnVtYmVyT2ZMb2dzVG9TZW5kKys7XG4gICAgfVxuXG4gICAgaWYgKCFudW1iZXJPZkxvZ3NUb1NlbmQpIHtcbiAgICAgIHRoaXMuX2xvZ3NbbnVtYmVyT2ZMb2dzVG9TZW5kXS5tZXNzYWdlID0gdGhpcy5fbG9nc1tudW1iZXJPZkxvZ3NUb1NlbmRdLm1lc3NhZ2Uuc3Vic3RyaW5nKDAsXG4gICAgICAgIGdldExvZ1NpemUodGhpcy5fbG9nc1tudW1iZXJPZkxvZ3NUb1NlbmRdKSArIChyZXF1ZXN0U2l6ZUxpbWl0IC0gZ2V0TG9nU2l6ZSh0aGlzLl9sb2dzW251bWJlck9mTG9nc1RvU2VuZF0pKSk7XG4gICAgICBudW1iZXJPZkxvZ3NUb1NlbmQgPSAxO1xuICAgIH1cblxuICAgIGNvbnN0IGxvZ01lc3NhZ2VzID0gdGhpcy5fbG9ncy5zbGljZSgwLCBudW1iZXJPZkxvZ3NUb1NlbmQpO1xuXG4gICAgdGhpcy5fbG9ncyA9IHRoaXMuX2xvZ3Muc2xpY2UobnVtYmVyT2ZMb2dzVG9TZW5kKTtcblxuICAgIHJldHVybiB0aGlzLnNlbmRMb2dzKGxvZ01lc3NhZ2VzKS50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgIHRoaXMuX2lzU2VuZGluZyA9IGZhbHNlO1xuXG4gICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5zZW5kTG9nc0lmQWJsZSgpO1xuXG4gICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfSkuY2F0Y2goKCkgPT4ge1xuICAgICAgdGhpcy5faXNTZW5kaW5nID0gZmFsc2U7XG5cbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLnNlbmRMb2dzSWZBYmxlKCk7XG4gICAgfSk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRHVyYXRpb25zIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfZHVyYXRpb246IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcihkdXJhdGlvbiA9IDApIHtcbiAgICB0aGlzLl9kdXJhdGlvbiA9IGR1cmF0aW9uO1xuICB9XG5cbiAgdG9Jc29TdHJpbmcoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5fZHVyYXRpb24gPT09IDApIHtcbiAgICAgIHJldHVybiAnUDBTJztcbiAgICB9XG5cbiAgICBjb25zdCBpc05lZ2F0aXZlID0gdGhpcy5fZHVyYXRpb24gPCAwO1xuICAgIGNvbnN0IGR1cmF0aW9uID0gaXNOZWdhdGl2ZSA/IE1hdGguYWJzKHRoaXMuX2R1cmF0aW9uKSA6IHRoaXMuX2R1cmF0aW9uO1xuICAgIGxldCBvZmZzZXQgPSBNYXRoLmZsb29yKGR1cmF0aW9uKTtcbiAgICBjb25zdCBtaWxsaXNlY29uZHMgPSBvZmZzZXQgJSAxMDAwO1xuXG4gICAgb2Zmc2V0ID0gTWF0aC5mbG9vcihvZmZzZXQgLyAxMDAwKTtcblxuICAgIGNvbnN0IHNlY29uZHMgPSBvZmZzZXQgJSA2MDtcblxuICAgIG9mZnNldCA9IE1hdGguZmxvb3Iob2Zmc2V0IC8gNjApO1xuXG4gICAgY29uc3QgbWludXRlcyA9IG9mZnNldCAlIDYwO1xuXG4gICAgb2Zmc2V0ID0gTWF0aC5mbG9vcihvZmZzZXQgLyA2MCk7XG5cbiAgICBjb25zdCBob3VycyA9IG9mZnNldCAlIDI0O1xuICAgIGNvbnN0IHBhcnRzID0gWydQVCddO1xuXG4gICAgaWYgKGlzTmVnYXRpdmUpIHtcbiAgICAgIHBhcnRzLnVuc2hpZnQoJy0nKTtcbiAgICB9XG5cbiAgICBpZiAoaG91cnMpIHtcbiAgICAgIHBhcnRzLnB1c2goaG91cnMgKyAnSCcpO1xuICAgIH1cblxuICAgIGlmIChtaW51dGVzKSB7XG4gICAgICBwYXJ0cy5wdXNoKG1pbnV0ZXMgKyAnTScpO1xuICAgIH1cblxuICAgIGlmIChzZWNvbmRzIHx8IG1pbGxpc2Vjb25kcykge1xuICAgICAgcGFydHMucHVzaChTdHJpbmcoc2Vjb25kcykpO1xuXG4gICAgICBpZiAobWlsbGlzZWNvbmRzKSB7XG4gICAgICAgIHBhcnRzLnB1c2goJy4nICsgdGhpcy5wYWRTdGFydChtaWxsaXNlY29uZHMudG9TdHJpbmcoKSwgMywgJzAnKSk7XG4gICAgICB9XG5cbiAgICAgIHBhcnRzLnB1c2goJ1MnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFydHMuam9pbignJyk7XG4gIH1cblxuICBwYWRTdGFydChpdGVtOiBzdHJpbmcsIHRhcmdldExlbmd0aDogbnVtYmVyLCBwYWRTdHJpbmc6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgdGFyZ2V0TGVuZ3RoID0gdGFyZ2V0TGVuZ3RoID4+IDA7XG4gICAgcGFkU3RyaW5nID0gU3RyaW5nKCh0eXBlb2YgcGFkU3RyaW5nICE9PSAndW5kZWZpbmVkJyA/IHBhZFN0cmluZyA6ICcgJykpO1xuXG4gICAgaWYgKGl0ZW0ubGVuZ3RoID4gdGFyZ2V0TGVuZ3RoKSB7XG4gICAgICByZXR1cm4gaXRlbTtcbiAgICB9XG5cbiAgICB0YXJnZXRMZW5ndGggPSB0YXJnZXRMZW5ndGggLSBpdGVtLmxlbmd0aDtcblxuICAgIGlmICh0YXJnZXRMZW5ndGggPiBwYWRTdHJpbmcubGVuZ3RoKSB7XG4gICAgICBwYWRTdHJpbmcgKz0gcGFkU3RyaW5nLnJlcGVhdCh0YXJnZXRMZW5ndGggLyBwYWRTdHJpbmcubGVuZ3RoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFkU3RyaW5nLnNsaWNlKDAsIHRhcmdldExlbmd0aCkgKyBpdGVtO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmNvbnN0IGRlZmF1bHRCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kID0gMjAwMDtcbmNvbnN0IGRlZmF1bHRNaW5CYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kID0gMTtcbmNvbnN0IGRlZmF1bHRNYXhCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kID0gMzAwMDAwO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFeHBvbmVudGlhbEJhY2tvZmYge1xuICBwcml2YXRlIHJlYWRvbmx5IF9iYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQ6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfbWF4QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZDogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQ6IG51bWJlciA9IGRlZmF1bHRCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kLFxuICAgIG1pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQ6IG51bWJlciA9IGRlZmF1bHRNaW5CYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kLFxuICAgIG1heEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQ6IG51bWJlciA9IGRlZmF1bHRNYXhCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kXG4gICkge1xuICAgIHRoaXMuX2JhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQgPSBiYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kO1xuICAgIHRoaXMuX21pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQgPSBtaW5CYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kO1xuICAgIHRoaXMuX21heEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQgPSBtYXhCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kO1xuICB9XG5cbiAgZ2V0RXhwb25lbnRpYWxCYWNrb2ZmSW50ZXJ2YWxCeUZhaWx1cmVDb3VudChmYWlsdXJlQ291bnQ6IG51bWJlcik6IG51bWJlciB7XG4gICAgY29uc3QgYmFja29mZkludGVydmFsSW5TZWNvbmRzID0gdGhpcy5fYmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCAvIDEwMDA7XG4gICAgY29uc3QgcmFuZG9taXphdGlvbiA9IDAuNSArICgwLjUgKiBNYXRoLnJhbmRvbSgpKTsgLy8gWzAuNSwgMSlcbiAgICBjb25zdCBleHBvbmVudGlhbEJhY2tvZmYgPSBNYXRoLnBvdyhiYWNrb2ZmSW50ZXJ2YWxJblNlY29uZHMsIGZhaWx1cmVDb3VudCAtIDIpOyAvLyAgWzEvNCAxLzIgMSAyIDQgOCAuLi4uXVxuICAgIGNvbnN0IGV4cG9uZW50aWFsQmFja29mZldpdGhSYW5kb21pemF0aW9uID0gTWF0aC5mbG9vcihleHBvbmVudGlhbEJhY2tvZmYpICogcmFuZG9taXphdGlvbjtcbiAgICBjb25zdCBleHBvbmVudGlhbEJhY2tvZmZXaXRoUmFuZG9taXphdGlvbkluTWlsbGlzZWNvbmQgPSBNYXRoLmNlaWwoTWF0aC5tYXgoZXhwb25lbnRpYWxCYWNrb2ZmV2l0aFJhbmRvbWl6YXRpb24gKiAxMDAwLCB0aGlzLl9taW5CYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kKSk7XG5cbiAgICByZXR1cm4gTWF0aC5taW4oZXhwb25lbnRpYWxCYWNrb2ZmV2l0aFJhbmRvbWl6YXRpb25Jbk1pbGxpc2Vjb25kLCB0aGlzLl9tYXhCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IElDb21wYXJhYmxlIGZyb20gJy4uL2xhbmcvSUNvbXBhcmFibGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaW1lbnNpb24gaW1wbGVtZW50cyBJQ29tcGFyYWJsZTxEaW1lbnNpb24+IHtcbiAgcmVhZG9ubHkgd2lkdGg6IG51bWJlcjtcbiAgcmVhZG9ubHkgaGVpZ2h0OiBudW1iZXI7XG5cbiAgc3RhdGljIGdldCBlbXB0eSgpOiBEaW1lbnNpb24ge1xuICAgIHJldHVybiBuZXcgRGltZW5zaW9uKDAsIDApO1xuICB9XG5cbiAgY29uc3RydWN0b3Iod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpIHtcbiAgICB0aGlzLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7XG4gIH1cblxuICBlcXVhbHMob3RoZXI6IERpbWVuc2lvbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBvdGhlciAmJiB0aGlzLndpZHRoID09PSBvdGhlci53aWR0aCAmJiB0aGlzLmhlaWdodCA9PT0gb3RoZXIuaGVpZ2h0O1xuICB9XG5cbiAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7dGhpcy53aWR0aH14JHt0aGlzLmhlaWdodH1gO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge1N0cmVhbVNldHVwTGlzdGVuZXJ9IGZyb20gJy4uL2RvbS9TdHJlYW1TZXR1cExpc3RlbmVyJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQgTmV0d29ya01vbml0b3IgZnJvbSAnLi4vZG9tL05ldHdvcmtNb25pdG9yJztcbmltcG9ydCBTREsgZnJvbSAnLi4vc2RrL1NESyc7XG5pbXBvcnQgTWV0cmljc1R5cGUgZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzVHlwZSc7XG5pbXBvcnQgRHVyYXRpb25zIGZyb20gJy4uL3RpbWUvRHVyYXRpb24nO1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuaW1wb3J0IERpc3Bvc2FibGVMaXN0IGZyb20gJy4uL2xhbmcvRGlzcG9zYWJsZUxpc3QnO1xuaW1wb3J0IE1ldHJpY3NTZXJ2aWNlIGZyb20gJy4uL21ldHJpY3MvTWV0cmljc1NlcnZpY2UnO1xuXG5pbnRlcmZhY2UgSU5ldHdvcmtTdGF0aXN0aWNzIHtcbiAgcnR0PzogbnVtYmVyO1xuICBlZmZlY3RpdmVUeXBlPzogc3RyaW5nO1xuICBkb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eT86IG51bWJlcjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2Vzc2lvblRlbGVtZXRyeSBpbXBsZW1lbnRzIElEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1Nlc3Npb25UZWxlbWV0cnknKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfbWV0cmljc1NlcnZpY2U6IE1ldHJpY3NTZXJ2aWNlO1xuICBwcml2YXRlIHJlYWRvbmx5IF9hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvciA9IFNESy5hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfbmV0d29ya01vbml0b3I6IE5ldHdvcmtNb25pdG9yID0gbmV3IE5ldHdvcmtNb25pdG9yKCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BhZ2VMb2FkVGltZTogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9kaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3QgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgcHJpdmF0ZSBfbGFzdE5ldHdvcmtTdGF0aXN0aWNzOiBJTmV0d29ya1N0YXRpc3RpY3MgPSB7fTtcblxuICBjb25zdHJ1Y3RvcihwYWdlTG9hZFRpbWU6IG51bWJlciwgbWV0cmljc1NlcnZpY2U6IE1ldHJpY3NTZXJ2aWNlKSB7XG4gICAgdGhpcy5fcGFnZUxvYWRUaW1lID0gcGFnZUxvYWRUaW1lO1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLl9uZXR3b3JrTW9uaXRvcik7XG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UgPSBtZXRyaWNzU2VydmljZTtcblxuICAgIGlmICghdGhpcy5fbmV0d29ya01vbml0b3IuaXNTdXBwb3J0ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQodGhpcy5fYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IuaXNGb3JlZ3JvdW5kLnN1YnNjcmliZShpc0ZvcmVncm91bmQgPT4ge1xuICAgICAgdGhpcy5yZWNvcmRGb3JlZ3JvdW5kQ2hhbmdlKGlzRm9yZWdyb3VuZCk7XG4gICAgfSkpO1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLl9uZXR3b3JrTW9uaXRvci5ydHQuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgIHRoaXMucmVjb3JkTmV0d29ya1JUVFVwZGF0ZSh2YWx1ZSk7XG4gICAgfSkpO1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLl9uZXR3b3JrTW9uaXRvci5lZmZlY3RpdmVUeXBlLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICB0aGlzLnJlY29yZE5ldHdvcmtUeXBlQ2hhbmdlVXBkYXRlKHZhbHVlKTtcbiAgICB9KSk7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuX25ldHdvcmtNb25pdG9yLmRvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5LnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICB0aGlzLnJlY29yZE5ldHdvcmtEb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eVVwZGF0ZSh2YWx1ZSk7XG4gICAgfSkpO1xuICB9XG5cbiAgbGlzdGVuT25TdHJlYW1TZXR1cCgpOiBTdHJlYW1TZXR1cExpc3RlbmVyIHtcbiAgICByZXR1cm4gbmV3IFN0cmVhbVNldHVwTGlzdGVuZXIodGhpcy5fcGFnZUxvYWRUaW1lKTtcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWNvcmRGb3JlZ3JvdW5kQ2hhbmdlKGlzRm9yZWdyb3VuZDogYm9vbGVhbik6IHZvaWQge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc3QgdGltZVNpbmNlTGFzdENoYW5nZSA9IHRoaXMuX2FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yLmdldFRpbWVTaW5jZUxhc3RDaGFuZ2UoKTtcblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZTogaXNGb3JlZ3JvdW5kID8gTWV0cmljc1R5cGUuQXBwbGljYXRpb25Gb3JlZ3JvdW5kIDogTWV0cmljc1R5cGUuQXBwbGljYXRpb25CYWNrZ3JvdW5kLFxuICAgICAgcnVudGltZTogKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgdmFsdWU6IHt1aW50NjQ6IHRpbWVTaW5jZUxhc3RDaGFuZ2V9XG4gICAgfSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICdBcHBsaWNhdGlvbiBoYXMgZ29uZSBpbnRvIHRoZSBbJXNdIGFmdGVyIFslc10gbXMnLFxuICAgICAgaXNGb3JlZ3JvdW5kID8gJ2ZvcmVncm91bmQnIDogJ2JhY2tncm91bmQnLFxuICAgICAgbmV3IER1cmF0aW9ucyh0aW1lU2luY2VMYXN0Q2hhbmdlKS50b0lzb1N0cmluZygpLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHJlY29yZE5ldHdvcmtSVFRVcGRhdGUobmV3UlRUOiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IG9sZFJ0dCA9IHRoaXMuX2xhc3ROZXR3b3JrU3RhdGlzdGljcy5ydHQ7XG5cbiAgICB0aGlzLl9sYXN0TmV0d29ya1N0YXRpc3RpY3MucnR0ID0gbmV3UlRUO1xuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZS5Sb3VuZFRyaXBUaW1lLFxuICAgICAgcnVudGltZTogKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgdmFsdWU6IHt1aW50NjQ6IG5ld1JUVH0sXG4gICAgICBwcmV2aW91c1ZhbHVlOiBvbGRSdHQgPyB7dWludDY0OiBvbGRSdHR9IDogdW5kZWZpbmVkLFxuICAgICAgcmVzb3VyY2U6ICduYXZpZ2F0b3InXG4gICAgfSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICdbJXNdIE5ldHdvcmsgUlRUIGNoYW5nZWQgdG8gWyVzXSBmcm9tIFslc10nLFxuICAgICAgbmV3IER1cmF0aW9ucyhub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpLnRvSXNvU3RyaW5nKCksXG4gICAgICBuZXdSVFQsXG4gICAgICBvbGRSdHRcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSByZWNvcmROZXR3b3JrVHlwZUNoYW5nZVVwZGF0ZShuZXdOZXR3b3JrVHlwZTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBvbGROZXR3b3JrVHlwZSA9IHRoaXMuX2xhc3ROZXR3b3JrU3RhdGlzdGljcy5lZmZlY3RpdmVUeXBlO1xuXG4gICAgdGhpcy5fbGFzdE5ldHdvcmtTdGF0aXN0aWNzLmVmZmVjdGl2ZVR5cGUgPSBuZXdOZXR3b3JrVHlwZTtcblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZTogTWV0cmljc1R5cGUuTmV0d29ya1R5cGUsXG4gICAgICBydW50aW1lOiAobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge3N0cmluZzogbmV3TmV0d29ya1R5cGV9LFxuICAgICAgcHJldmlvdXNWYWx1ZTogb2xkTmV0d29ya1R5cGUgPyB7c3RyaW5nOiBvbGROZXR3b3JrVHlwZX0gOiB1bmRlZmluZWRcbiAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ1slc10gTmV0d29yayBlZmZlY3RpdmUgdHlwZSBoYXMgY2hhbmdlZCB0byBbJXNdIGZyb20gWyVzXScsXG4gICAgICBuZXcgRHVyYXRpb25zKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkudG9Jc29TdHJpbmcoKSxcbiAgICAgIG5ld05ldHdvcmtUeXBlLFxuICAgICAgb2xkTmV0d29ya1R5cGVcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSByZWNvcmROZXR3b3JrRG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHlVcGRhdGUobmV3Q2FwYWNpdHk6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc3Qgb2xkQ2FwYWNpdHkgPSB0aGlzLl9sYXN0TmV0d29ya1N0YXRpc3RpY3MuZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHk7XG5cbiAgICB0aGlzLl9sYXN0TmV0d29ya1N0YXRpc3RpY3MuZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkgPSBuZXdDYXBhY2l0eTtcblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZTogTWV0cmljc1R5cGUuRG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHksXG4gICAgICBydW50aW1lOiAobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge2Zsb2F0OiBuZXdDYXBhY2l0eX0sXG4gICAgICBwcmV2aW91c1ZhbHVlOiBvbGRDYXBhY2l0eSA/IHtmbG9hdDogb2xkQ2FwYWNpdHl9IDogdW5kZWZpbmVkXG4gICAgfSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICdbJXNdIE5ldHdvcmsgZG93bmxpbmsgdGhyb3VnaHB1dCBjYXBhY2l0eSBjaGFuZ2VkIHRvIFslc10gZnJvbSBbJXNdJyxcbiAgICAgIG5ldyBEdXJhdGlvbnMobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKS50b0lzb1N0cmluZygpLFxuICAgICAgbmV3Q2FwYWNpdHksXG4gICAgICBvbGRDYXBhY2l0eVxuICAgICk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgRHVyYXRpb25zIGZyb20gJy4uL3RpbWUvRHVyYXRpb24nO1xuaW1wb3J0IERpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9EaXNwb3NhYmxlJztcbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0lEaXNwb3NhYmxlJztcbmltcG9ydCBNZXRyaWNzVHlwZSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NUeXBlJztcbmltcG9ydCBEaXNwb3NhYmxlTGlzdCBmcm9tICcuLi9sYW5nL0Rpc3Bvc2FibGVMaXN0JztcbmltcG9ydCBNZXRyaWNzU2VydmljZSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NTZXJ2aWNlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmlkZW9UZWxlbWV0cnkgaW1wbGVtZW50cyBJRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BhZ2VMb2FkVGltZTogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9jaGFubmVsU3RhcnRUaW1lOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdTdHJlYW1UZWxlbWV0cnknKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0ID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N0cmVhbUlkOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21ldHJpY3NTZXJ2aWNlOiBNZXRyaWNzU2VydmljZTtcbiAgcHJpdmF0ZSBfbGlzdGVuVG9GaXJzdFRpbWU6ICgpID0+IHZvaWQ7XG4gIHByaXZhdGUgX2xpc3RlbkZvclN0YWxsOiAoKSA9PiB2b2lkO1xuICBwcml2YXRlIF9saXN0ZW5Gb3JDb250aW51YXRpb246IChldmVudCkgPT4gdm9pZDtcbiAgcHJpdmF0ZSBfdGltZVRvRmlyc3RGcmFtZTogbnVtYmVyO1xuICBwcml2YXRlIF9jaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lOiBudW1iZXI7XG4gIHByaXZhdGUgX3N0YXJ0UmVjb3JkaW5nRmlyc3RGcmFtZTogbnVtYmVyO1xuICBwcml2YXRlIF92aWRlb1N0YWxsZWQ6IG51bWJlcjtcbiAgcHJpdmF0ZSBfbGFzdFByb2dyZXNzOiBudW1iZXI7XG4gIHByaXZhdGUgX3ZpZGVvUmVzb2x1dGlvbjogc3RyaW5nO1xuICBwcml2YXRlIF9jbGVhclRpbWVUb0ZpcnN0RnJhbWVMaXN0ZW5lcjogRGlzcG9zYWJsZTtcbiAgcHJpdmF0ZSBfY2xlYXJSZWJ1ZmZlcmluZ0xpc3RlbmVyOiBEaXNwb3NhYmxlO1xuXG4gIGNvbnN0cnVjdG9yKHN0cmVhbUlkOiBzdHJpbmcsIHBhZ2VMb2FkVGltZTogbnVtYmVyLCBjaGFubmVsU3RhcnRUaW1lOiBudW1iZXIsIG1ldHJpY3NTZXJ2aWNlOiBNZXRyaWNzU2VydmljZSkge1xuICAgIHRoaXMuX3N0cmVhbUlkID0gc3RyZWFtSWQ7XG4gICAgdGhpcy5fcGFnZUxvYWRUaW1lID0gcGFnZUxvYWRUaW1lO1xuICAgIHRoaXMuX2NoYW5uZWxTdGFydFRpbWUgPSBjaGFubmVsU3RhcnRUaW1lO1xuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UgPSBtZXRyaWNzU2VydmljZTtcbiAgfVxuXG4gIHNldHVwTGlzdGVuZXJGb3JUaW1lVG9GaXJzdFRpbWUodmlkZW86IEhUTUxWaWRlb0VsZW1lbnQpOiB2b2lkIHtcbiAgICB0aGlzLl9zdGFydFJlY29yZGluZ0ZpcnN0RnJhbWUgPSBEYXRlLm5vdygpO1xuXG4gICAgdGhpcy5fbGlzdGVuVG9GaXJzdFRpbWUgPSAoKTogdm9pZCA9PiB0aGlzLmNhbGxUaW1lVG9GaXJzdEZyYW1lKCk7XG5cbiAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdsb2FkZWRkYXRhJywgdGhpcy5fbGlzdGVuVG9GaXJzdFRpbWUpO1xuICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWRlZG1ldGFkYXRhJywgdGhpcy5fbGlzdGVuVG9GaXJzdFRpbWUpO1xuXG4gICAgdGhpcy5fY2xlYXJUaW1lVG9GaXJzdEZyYW1lTGlzdGVuZXIgPSBuZXcgRGlzcG9zYWJsZSgoKSA9PiB7XG4gICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkZWRkYXRhJywgdGhpcy5fbGlzdGVuVG9GaXJzdFRpbWUpO1xuICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcignbG9hZGVkbWV0YWRhdGEnLCB0aGlzLl9saXN0ZW5Ub0ZpcnN0VGltZSk7XG4gICAgfSk7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuX2NsZWFyVGltZVRvRmlyc3RGcmFtZUxpc3RlbmVyKTtcbiAgfVxuXG4gIHNldHVwTGlzdGVuZXJGb3JSZWJ1ZmZlcmluZyh2aWRlbzogSFRNTFZpZGVvRWxlbWVudCk6IHZvaWQge1xuICAgIHRoaXMuX2xpc3RlbkZvclN0YWxsID0gKCk6IHZvaWQgPT4gdGhpcy5vblN0YWxsKCk7XG5cbiAgICB0aGlzLl9saXN0ZW5Gb3JDb250aW51YXRpb24gPSAoZXZlbnQpOiB2b2lkID0+IHRoaXMub25Db250aW51YXRpb24oZXZlbnQsIHZpZGVvKTtcblxuICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ3N0YWxsZWQnLCB0aGlzLl9saXN0ZW5Gb3JTdGFsbCk7XG4gICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcigncGF1c2UnLCB0aGlzLl9saXN0ZW5Gb3JTdGFsbCk7XG4gICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcignc3VzcGVuZCcsIHRoaXMuX2xpc3RlbkZvclN0YWxsKTtcbiAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdwbGF5JywgdGhpcy5fbGlzdGVuRm9yQ29udGludWF0aW9uKTtcbiAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdwbGF5aW5nJywgdGhpcy5fbGlzdGVuRm9yQ29udGludWF0aW9uKTtcbiAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2xpc3RlbkZvckNvbnRpbnVhdGlvbik7XG4gICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcigndGltZXVwZGF0ZScsIHRoaXMuX2xpc3RlbkZvckNvbnRpbnVhdGlvbik7XG5cbiAgICB0aGlzLl9jbGVhclJlYnVmZmVyaW5nTGlzdGVuZXIgPSBuZXcgRGlzcG9zYWJsZSgoKSA9PiB7XG4gICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCdzdGFsbGVkJywgdGhpcy5fbGlzdGVuRm9yU3RhbGwpO1xuICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigncGF1c2UnLCB0aGlzLl9saXN0ZW5Gb3JTdGFsbCk7XG4gICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCdzdXNwZW5kJywgdGhpcy5fbGlzdGVuRm9yU3RhbGwpO1xuICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigncGxheScsIHRoaXMuX2xpc3RlbkZvckNvbnRpbnVhdGlvbik7XG4gICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCdwbGF5aW5nJywgdGhpcy5fbGlzdGVuRm9yQ29udGludWF0aW9uKTtcbiAgICAgIHZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgdGhpcy5fbGlzdGVuRm9yQ29udGludWF0aW9uKTtcbiAgICAgIHZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RpbWV1cGRhdGUnLCB0aGlzLl9saXN0ZW5Gb3JDb250aW51YXRpb24pO1xuICAgIH0pO1xuXG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuX2NsZWFyUmVidWZmZXJpbmdMaXN0ZW5lcik7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGR1cmF0aW9uU2luY2VQYWdlTG9hZCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG5cbiAgICByZXR1cm4gbmV3IER1cmF0aW9ucyhub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpLnRvSXNvU3RyaW5nKCk7XG4gIH1cblxuICBwcml2YXRlIGNhbGxUaW1lVG9GaXJzdEZyYW1lKCk6IHZvaWQge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG5cbiAgICB0aGlzLnB1c2hUaW1lVG9GaXJzdEZyYW1lKG5vdyk7XG4gICAgdGhpcy5wdXNoQ2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZShub3cpO1xuXG4gICAgdGhpcy5fY2xlYXJUaW1lVG9GaXJzdEZyYW1lTGlzdGVuZXIuZGlzcG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBwdXNoVGltZVRvRmlyc3RGcmFtZShub3cpOiB2b2lkIHtcbiAgICB0aGlzLl90aW1lVG9GaXJzdEZyYW1lID0gbm93IC0gdGhpcy5fc3RhcnRSZWNvcmRpbmdGaXJzdEZyYW1lO1xuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZS5UaW1lVG9GaXJzdEZyYW1lLFxuICAgICAgcnVudGltZTogKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgdmFsdWU6IHt1aW50NjQ6IHRoaXMuX3RpbWVUb0ZpcnN0RnJhbWV9LFxuICAgICAgc3RyZWFtSWQ6IHRoaXMuX3N0cmVhbUlkXG4gICAgfSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICdbJXNdIFslc10gRmlyc3QgZnJhbWUgWyVzXScsXG4gICAgICB0aGlzLmR1cmF0aW9uU2luY2VQYWdlTG9hZCxcbiAgICAgIHRoaXMuX3N0cmVhbUlkLFxuICAgICAgbmV3IER1cmF0aW9ucyh0aGlzLl90aW1lVG9GaXJzdEZyYW1lKS50b0lzb1N0cmluZygpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgcHVzaENoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWUobm93KTogdm9pZCB7XG4gICAgdGhpcy5fY2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZSA9IG5vdyAtIHRoaXMuX2NoYW5uZWxTdGFydFRpbWU7XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLkNoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWUsXG4gICAgICBydW50aW1lOiAobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge3VpbnQ2NDogdGhpcy5fY2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZX0sXG4gICAgICBzdHJlYW1JZDogdGhpcy5fc3RyZWFtSWRcbiAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ1slc10gWyVzXSBDaGFubmVsIGNyZWF0aW9uIHRvIGZpcnN0IGZyYW1lIFslc10nLFxuICAgICAgdGhpcy5kdXJhdGlvblNpbmNlUGFnZUxvYWQsXG4gICAgICB0aGlzLl9zdHJlYW1JZCxcbiAgICAgIG5ldyBEdXJhdGlvbnModGhpcy5fY2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZSkudG9Jc29TdHJpbmcoKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIG9uU3RhbGwoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3ZpZGVvU3RhbGxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZTogTWV0cmljc1R5cGUuU3RhbGxlZCxcbiAgICAgIHJ1bnRpbWU6IChEYXRlLm5vdygpIC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICBzdHJlYW1JZDogdGhpcy5fc3RyZWFtSWRcbiAgICB9KTtcblxuICAgIHRoaXMuX3ZpZGVvU3RhbGxlZCA9IERhdGUubm93KCk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICdbJXNdIFslc10gW2J1ZmZlcmluZ10gU3RyZWFtIGhhcyBzdGFsbGVkJyxcbiAgICAgIHRoaXMuZHVyYXRpb25TaW5jZVBhZ2VMb2FkLFxuICAgICAgdGhpcy5fc3RyZWFtSWRcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBvbkNvbnRpbnVhdGlvbihldmVudCwgdmlkZW8pOiB2b2lkIHtcbiAgICBpZiAoIXZpZGVvLmJ1ZmZlcmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYnVmZmVyTGVuZ3RoID0gdmlkZW8uYnVmZmVyZWQubGVuZ3RoO1xuICAgIGNvbnN0IGhhc05vdFByb2dyZXNzZWRTaW5jZUxhc3RQcm9ncmVzc0V2ZW50ID0gZXZlbnQudHlwZSA9PT0gJ3BsYXlpbmcnXG4gICAgfHwgYnVmZmVyTGVuZ3RoID4gMCA/IChldmVudC50eXBlID09PSAncHJvZ3Jlc3MnXG4gICAgICB8fCBldmVudC50eXBlID09PSAndGltZXVwZGF0ZScpXG4gICAgICAmJiB2aWRlby5idWZmZXJlZC5lbmQoYnVmZmVyTGVuZ3RoIC0gMSkgPT09IHRoaXMuX2xhc3RQcm9ncmVzcyA6IHRydWU7XG5cbiAgICBpZiAoIXRoaXMuX3ZpZGVvU3RhbGxlZCB8fCBoYXNOb3RQcm9ncmVzc2VkU2luY2VMYXN0UHJvZ3Jlc3NFdmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChldmVudC50eXBlID09PSAncHJvZ3Jlc3MnKSB7XG4gICAgICB0aGlzLl9sYXN0UHJvZ3Jlc3MgPSB2aWRlby5idWZmZXJlZC5lbmQoYnVmZmVyTGVuZ3RoIC0gMSk7XG4gICAgfVxuXG4gICAgY29uc3QgdGltZVNpbmNlU3RvcCA9IERhdGUubm93KCkgLSB0aGlzLl92aWRlb1N0YWxsZWQ7XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLkJ1ZmZlcmluZyxcbiAgICAgIHJ1bnRpbWU6IChEYXRlLm5vdygpIC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge3VpbnQ2NDogdGltZVNpbmNlU3RvcH0sXG4gICAgICBzdHJlYW1JZDogdGhpcy5fc3RyZWFtSWRcbiAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ1slc10gWyVzXSBbYnVmZmVyaW5nXSBTdHJlYW0gaGFzIHJlY292ZXJlZCBmcm9tIHN0YWxsIGFmdGVyIFslc10nLFxuICAgICAgdGhpcy5kdXJhdGlvblNpbmNlUGFnZUxvYWQsXG4gICAgICB0aGlzLl9zdHJlYW1JZCxcbiAgICAgIG5ldyBEdXJhdGlvbnModGltZVNpbmNlU3RvcCkudG9Jc29TdHJpbmcoKVxuICAgICk7XG4gICAgdGhpcy5fdmlkZW9TdGFsbGVkID0gbnVsbDtcbiAgfVxuXG4gIG9uVmlkZW9SZXNvbHV0aW9uQ2hhbmdlcyhuZXdSZXNvbHV0aW9uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLlJlc29sdXRpb25DaGFuZ2VkLFxuICAgICAgcnVudGltZTogKERhdGUubm93KCkgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHZhbHVlOiB7c3RyaW5nOiBuZXdSZXNvbHV0aW9ufSxcbiAgICAgIHByZXZpb3VzVmFsdWU6IHRoaXMuX3ZpZGVvUmVzb2x1dGlvbiA/IHtzdHJpbmc6IHRoaXMuX3ZpZGVvUmVzb2x1dGlvbn0gOiB1bmRlZmluZWQsXG4gICAgICBzdHJlYW1JZDogdGhpcy5fc3RyZWFtSWRcbiAgICB9KTtcblxuICAgIHRoaXMuX3ZpZGVvUmVzb2x1dGlvbiA9IG5ld1Jlc29sdXRpb247XG4gIH1cbn0iLCJmdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSB7XG4gIChudWxsID09IGEgfHwgYSA+IHIubGVuZ3RoKSAmJiAoYSA9IHIubGVuZ3RoKTtcbiAgZm9yICh2YXIgZSA9IDAsIG4gPSBBcnJheShhKTsgZSA8IGE7IGUrKykgbltlXSA9IHJbZV07XG4gIHJldHVybiBuO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfYXJyYXlMaWtlVG9BcnJheSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsImZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhyKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KHIpKSByZXR1cm4gcjtcbn1cbm1vZHVsZS5leHBvcnRzID0gX2FycmF5V2l0aEhvbGVzLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwidmFyIGFycmF5TGlrZVRvQXJyYXkgPSByZXF1aXJlKFwiLi9hcnJheUxpa2VUb0FycmF5LmpzXCIpO1xuZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKHIpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkocikpIHJldHVybiBhcnJheUxpa2VUb0FycmF5KHIpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfYXJyYXlXaXRob3V0SG9sZXMsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJmdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKGUpIHtcbiAgaWYgKHZvaWQgMCA9PT0gZSkgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO1xuICByZXR1cm4gZTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX2Fzc2VydFRoaXNJbml0aWFsaXplZCwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsImZ1bmN0aW9uIGFzeW5jR2VuZXJhdG9yU3RlcChuLCB0LCBlLCByLCBvLCBhLCBjKSB7XG4gIHRyeSB7XG4gICAgdmFyIGkgPSBuW2FdKGMpLFxuICAgICAgdSA9IGkudmFsdWU7XG4gIH0gY2F0Y2ggKG4pIHtcbiAgICByZXR1cm4gdm9pZCBlKG4pO1xuICB9XG4gIGkuZG9uZSA/IHQodSkgOiBQcm9taXNlLnJlc29sdmUodSkudGhlbihyLCBvKTtcbn1cbmZ1bmN0aW9uIF9hc3luY1RvR2VuZXJhdG9yKG4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdCA9IHRoaXMsXG4gICAgICBlID0gYXJndW1lbnRzO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAociwgbykge1xuICAgICAgdmFyIGEgPSBuLmFwcGx5KHQsIGUpO1xuICAgICAgZnVuY3Rpb24gX25leHQobikge1xuICAgICAgICBhc3luY0dlbmVyYXRvclN0ZXAoYSwgciwgbywgX25leHQsIF90aHJvdywgXCJuZXh0XCIsIG4pO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gX3Rocm93KG4pIHtcbiAgICAgICAgYXN5bmNHZW5lcmF0b3JTdGVwKGEsIHIsIG8sIF9uZXh0LCBfdGhyb3csIFwidGhyb3dcIiwgbik7XG4gICAgICB9XG4gICAgICBfbmV4dCh2b2lkIDApO1xuICAgIH0pO1xuICB9O1xufVxubW9kdWxlLmV4cG9ydHMgPSBfYXN5bmNUb0dlbmVyYXRvciwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsImZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhhLCBuKSB7XG4gIGlmICghKGEgaW5zdGFuY2VvZiBuKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX2NsYXNzQ2FsbENoZWNrLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwidmFyIHRvUHJvcGVydHlLZXkgPSByZXF1aXJlKFwiLi90b1Byb3BlcnR5S2V5LmpzXCIpO1xuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXMoZSwgcikge1xuICBmb3IgKHZhciB0ID0gMDsgdCA8IHIubGVuZ3RoOyB0KyspIHtcbiAgICB2YXIgbyA9IHJbdF07XG4gICAgby5lbnVtZXJhYmxlID0gby5lbnVtZXJhYmxlIHx8ICExLCBvLmNvbmZpZ3VyYWJsZSA9ICEwLCBcInZhbHVlXCIgaW4gbyAmJiAoby53cml0YWJsZSA9ICEwKSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHRvUHJvcGVydHlLZXkoby5rZXkpLCBvKTtcbiAgfVxufVxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKGUsIHIsIHQpIHtcbiAgcmV0dXJuIHIgJiYgX2RlZmluZVByb3BlcnRpZXMoZS5wcm90b3R5cGUsIHIpLCB0ICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHQpLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgXCJwcm90b3R5cGVcIiwge1xuICAgIHdyaXRhYmxlOiAhMVxuICB9KSwgZTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX2NyZWF0ZUNsYXNzLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwidmFyIHRvUHJvcGVydHlLZXkgPSByZXF1aXJlKFwiLi90b1Byb3BlcnR5S2V5LmpzXCIpO1xuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHtcbiAgcmV0dXJuIChyID0gdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7XG4gICAgdmFsdWU6IHQsXG4gICAgZW51bWVyYWJsZTogITAsXG4gICAgY29uZmlndXJhYmxlOiAhMCxcbiAgICB3cml0YWJsZTogITBcbiAgfSkgOiBlW3JdID0gdCwgZTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX2RlZmluZVByb3BlcnR5LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKHQpIHtcbiAgcmV0dXJuIChtb2R1bGUuZXhwb3J0cyA9IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCkge1xuICAgIHJldHVybiB0Ll9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YodCk7XG4gIH0sIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0cyksIF9nZXRQcm90b3R5cGVPZih0KTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX2dldFByb3RvdHlwZU9mLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwidmFyIHNldFByb3RvdHlwZU9mID0gcmVxdWlyZShcIi4vc2V0UHJvdG90eXBlT2YuanNcIik7XG5mdW5jdGlvbiBfaW5oZXJpdHModCwgZSkge1xuICBpZiAoXCJmdW5jdGlvblwiICE9IHR5cGVvZiBlICYmIG51bGwgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTtcbiAgdC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGUgJiYgZS5wcm90b3R5cGUsIHtcbiAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgdmFsdWU6IHQsXG4gICAgICB3cml0YWJsZTogITAsXG4gICAgICBjb25maWd1cmFibGU6ICEwXG4gICAgfVxuICB9KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIFwicHJvdG90eXBlXCIsIHtcbiAgICB3cml0YWJsZTogITFcbiAgfSksIGUgJiYgc2V0UHJvdG90eXBlT2YodCwgZSk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9pbmhlcml0cywgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsImZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXkocikge1xuICBpZiAoXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgU3ltYm9sICYmIG51bGwgIT0gcltTeW1ib2wuaXRlcmF0b3JdIHx8IG51bGwgIT0gcltcIkBAaXRlcmF0b3JcIl0pIHJldHVybiBBcnJheS5mcm9tKHIpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfaXRlcmFibGVUb0FycmF5LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGwpIHtcbiAgdmFyIHQgPSBudWxsID09IHIgPyBudWxsIDogXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgU3ltYm9sICYmIHJbU3ltYm9sLml0ZXJhdG9yXSB8fCByW1wiQEBpdGVyYXRvclwiXTtcbiAgaWYgKG51bGwgIT0gdCkge1xuICAgIHZhciBlLFxuICAgICAgbixcbiAgICAgIGksXG4gICAgICB1LFxuICAgICAgYSA9IFtdLFxuICAgICAgZiA9ICEwLFxuICAgICAgbyA9ICExO1xuICAgIHRyeSB7XG4gICAgICBpZiAoaSA9ICh0ID0gdC5jYWxsKHIpKS5uZXh0LCAwID09PSBsKSB7XG4gICAgICAgIGlmIChPYmplY3QodCkgIT09IHQpIHJldHVybjtcbiAgICAgICAgZiA9ICExO1xuICAgICAgfSBlbHNlIGZvciAoOyAhKGYgPSAoZSA9IGkuY2FsbCh0KSkuZG9uZSkgJiYgKGEucHVzaChlLnZhbHVlKSwgYS5sZW5ndGggIT09IGwpOyBmID0gITApO1xuICAgIH0gY2F0Y2ggKHIpIHtcbiAgICAgIG8gPSAhMCwgbiA9IHI7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICghZiAmJiBudWxsICE9IHRbXCJyZXR1cm5cIl0gJiYgKHUgPSB0W1wicmV0dXJuXCJdKCksIE9iamVjdCh1KSAhPT0gdSkpIHJldHVybjtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlmIChvKSB0aHJvdyBuO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYTtcbiAgfVxufVxubW9kdWxlLmV4cG9ydHMgPSBfaXRlcmFibGVUb0FycmF5TGltaXQsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJmdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfbm9uSXRlcmFibGVSZXN0LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX25vbkl0ZXJhYmxlU3ByZWFkKCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX25vbkl0ZXJhYmxlU3ByZWFkLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwidmFyIF90eXBlb2YgPSByZXF1aXJlKFwiLi90eXBlb2YuanNcIilbXCJkZWZhdWx0XCJdO1xudmFyIGFzc2VydFRoaXNJbml0aWFsaXplZCA9IHJlcXVpcmUoXCIuL2Fzc2VydFRoaXNJbml0aWFsaXplZC5qc1wiKTtcbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIGUpIHtcbiAgaWYgKGUgJiYgKFwib2JqZWN0XCIgPT0gX3R5cGVvZihlKSB8fCBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGUpKSByZXR1cm4gZTtcbiAgaWYgKHZvaWQgMCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpO1xuICByZXR1cm4gYXNzZXJ0VGhpc0luaXRpYWxpemVkKHQpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsInZhciBfdHlwZW9mID0gcmVxdWlyZShcIi4vdHlwZW9mLmpzXCIpW1wiZGVmYXVsdFwiXTtcbmZ1bmN0aW9uIF9yZWdlbmVyYXRvclJ1bnRpbWUoKSB7XG4gIFwidXNlIHN0cmljdFwiOyAvKiEgcmVnZW5lcmF0b3ItcnVudGltZSAtLSBDb3B5cmlnaHQgKGMpIDIwMTQtcHJlc2VudCwgRmFjZWJvb2ssIEluYy4gLS0gbGljZW5zZSAoTUlUKTogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlZ2VuZXJhdG9yL2Jsb2IvbWFpbi9MSUNFTlNFICovXG4gIG1vZHVsZS5leHBvcnRzID0gX3JlZ2VuZXJhdG9yUnVudGltZSA9IGZ1bmN0aW9uIF9yZWdlbmVyYXRvclJ1bnRpbWUoKSB7XG4gICAgcmV0dXJuIGU7XG4gIH0sIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0cztcbiAgdmFyIHQsXG4gICAgZSA9IHt9LFxuICAgIHIgPSBPYmplY3QucHJvdG90eXBlLFxuICAgIG4gPSByLmhhc093blByb3BlcnR5LFxuICAgIG8gPSBPYmplY3QuZGVmaW5lUHJvcGVydHkgfHwgZnVuY3Rpb24gKHQsIGUsIHIpIHtcbiAgICAgIHRbZV0gPSByLnZhbHVlO1xuICAgIH0sXG4gICAgaSA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sID8gU3ltYm9sIDoge30sXG4gICAgYSA9IGkuaXRlcmF0b3IgfHwgXCJAQGl0ZXJhdG9yXCIsXG4gICAgYyA9IGkuYXN5bmNJdGVyYXRvciB8fCBcIkBAYXN5bmNJdGVyYXRvclwiLFxuICAgIHUgPSBpLnRvU3RyaW5nVGFnIHx8IFwiQEB0b1N0cmluZ1RhZ1wiO1xuICBmdW5jdGlvbiBkZWZpbmUodCwgZSwgcikge1xuICAgIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodCwgZSwge1xuICAgICAgdmFsdWU6IHIsXG4gICAgICBlbnVtZXJhYmxlOiAhMCxcbiAgICAgIGNvbmZpZ3VyYWJsZTogITAsXG4gICAgICB3cml0YWJsZTogITBcbiAgICB9KSwgdFtlXTtcbiAgfVxuICB0cnkge1xuICAgIGRlZmluZSh7fSwgXCJcIik7XG4gIH0gY2F0Y2ggKHQpIHtcbiAgICBkZWZpbmUgPSBmdW5jdGlvbiBkZWZpbmUodCwgZSwgcikge1xuICAgICAgcmV0dXJuIHRbZV0gPSByO1xuICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gd3JhcCh0LCBlLCByLCBuKSB7XG4gICAgdmFyIGkgPSBlICYmIGUucHJvdG90eXBlIGluc3RhbmNlb2YgR2VuZXJhdG9yID8gZSA6IEdlbmVyYXRvcixcbiAgICAgIGEgPSBPYmplY3QuY3JlYXRlKGkucHJvdG90eXBlKSxcbiAgICAgIGMgPSBuZXcgQ29udGV4dChuIHx8IFtdKTtcbiAgICByZXR1cm4gbyhhLCBcIl9pbnZva2VcIiwge1xuICAgICAgdmFsdWU6IG1ha2VJbnZva2VNZXRob2QodCwgciwgYylcbiAgICB9KSwgYTtcbiAgfVxuICBmdW5jdGlvbiB0cnlDYXRjaCh0LCBlLCByKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFwibm9ybWFsXCIsXG4gICAgICAgIGFyZzogdC5jYWxsKGUsIHIpXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKHQpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFwidGhyb3dcIixcbiAgICAgICAgYXJnOiB0XG4gICAgICB9O1xuICAgIH1cbiAgfVxuICBlLndyYXAgPSB3cmFwO1xuICB2YXIgaCA9IFwic3VzcGVuZGVkU3RhcnRcIixcbiAgICBsID0gXCJzdXNwZW5kZWRZaWVsZFwiLFxuICAgIGYgPSBcImV4ZWN1dGluZ1wiLFxuICAgIHMgPSBcImNvbXBsZXRlZFwiLFxuICAgIHkgPSB7fTtcbiAgZnVuY3Rpb24gR2VuZXJhdG9yKCkge31cbiAgZnVuY3Rpb24gR2VuZXJhdG9yRnVuY3Rpb24oKSB7fVxuICBmdW5jdGlvbiBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSgpIHt9XG4gIHZhciBwID0ge307XG4gIGRlZmluZShwLCBhLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0pO1xuICB2YXIgZCA9IE9iamVjdC5nZXRQcm90b3R5cGVPZixcbiAgICB2ID0gZCAmJiBkKGQodmFsdWVzKFtdKSkpO1xuICB2ICYmIHYgIT09IHIgJiYgbi5jYWxsKHYsIGEpICYmIChwID0gdik7XG4gIHZhciBnID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUucHJvdG90eXBlID0gR2VuZXJhdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUocCk7XG4gIGZ1bmN0aW9uIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyh0KSB7XG4gICAgW1wibmV4dFwiLCBcInRocm93XCIsIFwicmV0dXJuXCJdLmZvckVhY2goZnVuY3Rpb24gKGUpIHtcbiAgICAgIGRlZmluZSh0LCBlLCBmdW5jdGlvbiAodCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faW52b2tlKGUsIHQpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbiAgZnVuY3Rpb24gQXN5bmNJdGVyYXRvcih0LCBlKSB7XG4gICAgZnVuY3Rpb24gaW52b2tlKHIsIG8sIGksIGEpIHtcbiAgICAgIHZhciBjID0gdHJ5Q2F0Y2godFtyXSwgdCwgbyk7XG4gICAgICBpZiAoXCJ0aHJvd1wiICE9PSBjLnR5cGUpIHtcbiAgICAgICAgdmFyIHUgPSBjLmFyZyxcbiAgICAgICAgICBoID0gdS52YWx1ZTtcbiAgICAgICAgcmV0dXJuIGggJiYgXCJvYmplY3RcIiA9PSBfdHlwZW9mKGgpICYmIG4uY2FsbChoLCBcIl9fYXdhaXRcIikgPyBlLnJlc29sdmUoaC5fX2F3YWl0KS50aGVuKGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgaW52b2tlKFwibmV4dFwiLCB0LCBpLCBhKTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICBpbnZva2UoXCJ0aHJvd1wiLCB0LCBpLCBhKTtcbiAgICAgICAgfSkgOiBlLnJlc29sdmUoaCkudGhlbihmdW5jdGlvbiAodCkge1xuICAgICAgICAgIHUudmFsdWUgPSB0LCBpKHUpO1xuICAgICAgICB9LCBmdW5jdGlvbiAodCkge1xuICAgICAgICAgIHJldHVybiBpbnZva2UoXCJ0aHJvd1wiLCB0LCBpLCBhKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBhKGMuYXJnKTtcbiAgICB9XG4gICAgdmFyIHI7XG4gICAgbyh0aGlzLCBcIl9pbnZva2VcIiwge1xuICAgICAgdmFsdWU6IGZ1bmN0aW9uIHZhbHVlKHQsIG4pIHtcbiAgICAgICAgZnVuY3Rpb24gY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcoKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBlKGZ1bmN0aW9uIChlLCByKSB7XG4gICAgICAgICAgICBpbnZva2UodCwgbiwgZSwgcik7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHIgPSByID8gci50aGVuKGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnLCBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZykgOiBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZygpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIGZ1bmN0aW9uIG1ha2VJbnZva2VNZXRob2QoZSwgciwgbikge1xuICAgIHZhciBvID0gaDtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGksIGEpIHtcbiAgICAgIGlmIChvID09PSBmKSB0aHJvdyBFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IHJ1bm5pbmdcIik7XG4gICAgICBpZiAobyA9PT0gcykge1xuICAgICAgICBpZiAoXCJ0aHJvd1wiID09PSBpKSB0aHJvdyBhO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHZhbHVlOiB0LFxuICAgICAgICAgIGRvbmU6ICEwXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBmb3IgKG4ubWV0aG9kID0gaSwgbi5hcmcgPSBhOzspIHtcbiAgICAgICAgdmFyIGMgPSBuLmRlbGVnYXRlO1xuICAgICAgICBpZiAoYykge1xuICAgICAgICAgIHZhciB1ID0gbWF5YmVJbnZva2VEZWxlZ2F0ZShjLCBuKTtcbiAgICAgICAgICBpZiAodSkge1xuICAgICAgICAgICAgaWYgKHUgPT09IHkpIGNvbnRpbnVlO1xuICAgICAgICAgICAgcmV0dXJuIHU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChcIm5leHRcIiA9PT0gbi5tZXRob2QpIG4uc2VudCA9IG4uX3NlbnQgPSBuLmFyZztlbHNlIGlmIChcInRocm93XCIgPT09IG4ubWV0aG9kKSB7XG4gICAgICAgICAgaWYgKG8gPT09IGgpIHRocm93IG8gPSBzLCBuLmFyZztcbiAgICAgICAgICBuLmRpc3BhdGNoRXhjZXB0aW9uKG4uYXJnKTtcbiAgICAgICAgfSBlbHNlIFwicmV0dXJuXCIgPT09IG4ubWV0aG9kICYmIG4uYWJydXB0KFwicmV0dXJuXCIsIG4uYXJnKTtcbiAgICAgICAgbyA9IGY7XG4gICAgICAgIHZhciBwID0gdHJ5Q2F0Y2goZSwgciwgbik7XG4gICAgICAgIGlmIChcIm5vcm1hbFwiID09PSBwLnR5cGUpIHtcbiAgICAgICAgICBpZiAobyA9IG4uZG9uZSA/IHMgOiBsLCBwLmFyZyA9PT0geSkgY29udGludWU7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHZhbHVlOiBwLmFyZyxcbiAgICAgICAgICAgIGRvbmU6IG4uZG9uZVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgXCJ0aHJvd1wiID09PSBwLnR5cGUgJiYgKG8gPSBzLCBuLm1ldGhvZCA9IFwidGhyb3dcIiwgbi5hcmcgPSBwLmFyZyk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuICBmdW5jdGlvbiBtYXliZUludm9rZURlbGVnYXRlKGUsIHIpIHtcbiAgICB2YXIgbiA9IHIubWV0aG9kLFxuICAgICAgbyA9IGUuaXRlcmF0b3Jbbl07XG4gICAgaWYgKG8gPT09IHQpIHJldHVybiByLmRlbGVnYXRlID0gbnVsbCwgXCJ0aHJvd1wiID09PSBuICYmIGUuaXRlcmF0b3JbXCJyZXR1cm5cIl0gJiYgKHIubWV0aG9kID0gXCJyZXR1cm5cIiwgci5hcmcgPSB0LCBtYXliZUludm9rZURlbGVnYXRlKGUsIHIpLCBcInRocm93XCIgPT09IHIubWV0aG9kKSB8fCBcInJldHVyblwiICE9PSBuICYmIChyLm1ldGhvZCA9IFwidGhyb3dcIiwgci5hcmcgPSBuZXcgVHlwZUVycm9yKFwiVGhlIGl0ZXJhdG9yIGRvZXMgbm90IHByb3ZpZGUgYSAnXCIgKyBuICsgXCInIG1ldGhvZFwiKSksIHk7XG4gICAgdmFyIGkgPSB0cnlDYXRjaChvLCBlLml0ZXJhdG9yLCByLmFyZyk7XG4gICAgaWYgKFwidGhyb3dcIiA9PT0gaS50eXBlKSByZXR1cm4gci5tZXRob2QgPSBcInRocm93XCIsIHIuYXJnID0gaS5hcmcsIHIuZGVsZWdhdGUgPSBudWxsLCB5O1xuICAgIHZhciBhID0gaS5hcmc7XG4gICAgcmV0dXJuIGEgPyBhLmRvbmUgPyAocltlLnJlc3VsdE5hbWVdID0gYS52YWx1ZSwgci5uZXh0ID0gZS5uZXh0TG9jLCBcInJldHVyblwiICE9PSByLm1ldGhvZCAmJiAoci5tZXRob2QgPSBcIm5leHRcIiwgci5hcmcgPSB0KSwgci5kZWxlZ2F0ZSA9IG51bGwsIHkpIDogYSA6IChyLm1ldGhvZCA9IFwidGhyb3dcIiwgci5hcmcgPSBuZXcgVHlwZUVycm9yKFwiaXRlcmF0b3IgcmVzdWx0IGlzIG5vdCBhbiBvYmplY3RcIiksIHIuZGVsZWdhdGUgPSBudWxsLCB5KTtcbiAgfVxuICBmdW5jdGlvbiBwdXNoVHJ5RW50cnkodCkge1xuICAgIHZhciBlID0ge1xuICAgICAgdHJ5TG9jOiB0WzBdXG4gICAgfTtcbiAgICAxIGluIHQgJiYgKGUuY2F0Y2hMb2MgPSB0WzFdKSwgMiBpbiB0ICYmIChlLmZpbmFsbHlMb2MgPSB0WzJdLCBlLmFmdGVyTG9jID0gdFszXSksIHRoaXMudHJ5RW50cmllcy5wdXNoKGUpO1xuICB9XG4gIGZ1bmN0aW9uIHJlc2V0VHJ5RW50cnkodCkge1xuICAgIHZhciBlID0gdC5jb21wbGV0aW9uIHx8IHt9O1xuICAgIGUudHlwZSA9IFwibm9ybWFsXCIsIGRlbGV0ZSBlLmFyZywgdC5jb21wbGV0aW9uID0gZTtcbiAgfVxuICBmdW5jdGlvbiBDb250ZXh0KHQpIHtcbiAgICB0aGlzLnRyeUVudHJpZXMgPSBbe1xuICAgICAgdHJ5TG9jOiBcInJvb3RcIlxuICAgIH1dLCB0LmZvckVhY2gocHVzaFRyeUVudHJ5LCB0aGlzKSwgdGhpcy5yZXNldCghMCk7XG4gIH1cbiAgZnVuY3Rpb24gdmFsdWVzKGUpIHtcbiAgICBpZiAoZSB8fCBcIlwiID09PSBlKSB7XG4gICAgICB2YXIgciA9IGVbYV07XG4gICAgICBpZiAocikgcmV0dXJuIHIuY2FsbChlKTtcbiAgICAgIGlmIChcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGUubmV4dCkgcmV0dXJuIGU7XG4gICAgICBpZiAoIWlzTmFOKGUubGVuZ3RoKSkge1xuICAgICAgICB2YXIgbyA9IC0xLFxuICAgICAgICAgIGkgPSBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgICAgZm9yICg7ICsrbyA8IGUubGVuZ3RoOykgaWYgKG4uY2FsbChlLCBvKSkgcmV0dXJuIG5leHQudmFsdWUgPSBlW29dLCBuZXh0LmRvbmUgPSAhMSwgbmV4dDtcbiAgICAgICAgICAgIHJldHVybiBuZXh0LnZhbHVlID0gdCwgbmV4dC5kb25lID0gITAsIG5leHQ7XG4gICAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGkubmV4dCA9IGk7XG4gICAgICB9XG4gICAgfVxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoX3R5cGVvZihlKSArIFwiIGlzIG5vdCBpdGVyYWJsZVwiKTtcbiAgfVxuICByZXR1cm4gR2VuZXJhdG9yRnVuY3Rpb24ucHJvdG90eXBlID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUsIG8oZywgXCJjb25zdHJ1Y3RvclwiLCB7XG4gICAgdmFsdWU6IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLFxuICAgIGNvbmZpZ3VyYWJsZTogITBcbiAgfSksIG8oR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUsIFwiY29uc3RydWN0b3JcIiwge1xuICAgIHZhbHVlOiBHZW5lcmF0b3JGdW5jdGlvbixcbiAgICBjb25maWd1cmFibGU6ICEwXG4gIH0pLCBHZW5lcmF0b3JGdW5jdGlvbi5kaXNwbGF5TmFtZSA9IGRlZmluZShHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSwgdSwgXCJHZW5lcmF0b3JGdW5jdGlvblwiKSwgZS5pc0dlbmVyYXRvckZ1bmN0aW9uID0gZnVuY3Rpb24gKHQpIHtcbiAgICB2YXIgZSA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgdCAmJiB0LmNvbnN0cnVjdG9yO1xuICAgIHJldHVybiAhIWUgJiYgKGUgPT09IEdlbmVyYXRvckZ1bmN0aW9uIHx8IFwiR2VuZXJhdG9yRnVuY3Rpb25cIiA9PT0gKGUuZGlzcGxheU5hbWUgfHwgZS5uYW1lKSk7XG4gIH0sIGUubWFyayA9IGZ1bmN0aW9uICh0KSB7XG4gICAgcmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZih0LCBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSkgOiAodC5fX3Byb3RvX18gPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSwgZGVmaW5lKHQsIHUsIFwiR2VuZXJhdG9yRnVuY3Rpb25cIikpLCB0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoZyksIHQ7XG4gIH0sIGUuYXdyYXAgPSBmdW5jdGlvbiAodCkge1xuICAgIHJldHVybiB7XG4gICAgICBfX2F3YWl0OiB0XG4gICAgfTtcbiAgfSwgZGVmaW5lSXRlcmF0b3JNZXRob2RzKEFzeW5jSXRlcmF0b3IucHJvdG90eXBlKSwgZGVmaW5lKEFzeW5jSXRlcmF0b3IucHJvdG90eXBlLCBjLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0pLCBlLkFzeW5jSXRlcmF0b3IgPSBBc3luY0l0ZXJhdG9yLCBlLmFzeW5jID0gZnVuY3Rpb24gKHQsIHIsIG4sIG8sIGkpIHtcbiAgICB2b2lkIDAgPT09IGkgJiYgKGkgPSBQcm9taXNlKTtcbiAgICB2YXIgYSA9IG5ldyBBc3luY0l0ZXJhdG9yKHdyYXAodCwgciwgbiwgbyksIGkpO1xuICAgIHJldHVybiBlLmlzR2VuZXJhdG9yRnVuY3Rpb24ocikgPyBhIDogYS5uZXh0KCkudGhlbihmdW5jdGlvbiAodCkge1xuICAgICAgcmV0dXJuIHQuZG9uZSA/IHQudmFsdWUgOiBhLm5leHQoKTtcbiAgICB9KTtcbiAgfSwgZGVmaW5lSXRlcmF0b3JNZXRob2RzKGcpLCBkZWZpbmUoZywgdSwgXCJHZW5lcmF0b3JcIiksIGRlZmluZShnLCBhLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0pLCBkZWZpbmUoZywgXCJ0b1N0cmluZ1wiLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIFwiW29iamVjdCBHZW5lcmF0b3JdXCI7XG4gIH0pLCBlLmtleXMgPSBmdW5jdGlvbiAodCkge1xuICAgIHZhciBlID0gT2JqZWN0KHQpLFxuICAgICAgciA9IFtdO1xuICAgIGZvciAodmFyIG4gaW4gZSkgci5wdXNoKG4pO1xuICAgIHJldHVybiByLnJldmVyc2UoKSwgZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgIGZvciAoOyByLmxlbmd0aDspIHtcbiAgICAgICAgdmFyIHQgPSByLnBvcCgpO1xuICAgICAgICBpZiAodCBpbiBlKSByZXR1cm4gbmV4dC52YWx1ZSA9IHQsIG5leHQuZG9uZSA9ICExLCBuZXh0O1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5leHQuZG9uZSA9ICEwLCBuZXh0O1xuICAgIH07XG4gIH0sIGUudmFsdWVzID0gdmFsdWVzLCBDb250ZXh0LnByb3RvdHlwZSA9IHtcbiAgICBjb25zdHJ1Y3RvcjogQ29udGV4dCxcbiAgICByZXNldDogZnVuY3Rpb24gcmVzZXQoZSkge1xuICAgICAgaWYgKHRoaXMucHJldiA9IDAsIHRoaXMubmV4dCA9IDAsIHRoaXMuc2VudCA9IHRoaXMuX3NlbnQgPSB0LCB0aGlzLmRvbmUgPSAhMSwgdGhpcy5kZWxlZ2F0ZSA9IG51bGwsIHRoaXMubWV0aG9kID0gXCJuZXh0XCIsIHRoaXMuYXJnID0gdCwgdGhpcy50cnlFbnRyaWVzLmZvckVhY2gocmVzZXRUcnlFbnRyeSksICFlKSBmb3IgKHZhciByIGluIHRoaXMpIFwidFwiID09PSByLmNoYXJBdCgwKSAmJiBuLmNhbGwodGhpcywgcikgJiYgIWlzTmFOKCtyLnNsaWNlKDEpKSAmJiAodGhpc1tyXSA9IHQpO1xuICAgIH0sXG4gICAgc3RvcDogZnVuY3Rpb24gc3RvcCgpIHtcbiAgICAgIHRoaXMuZG9uZSA9ICEwO1xuICAgICAgdmFyIHQgPSB0aGlzLnRyeUVudHJpZXNbMF0uY29tcGxldGlvbjtcbiAgICAgIGlmIChcInRocm93XCIgPT09IHQudHlwZSkgdGhyb3cgdC5hcmc7XG4gICAgICByZXR1cm4gdGhpcy5ydmFsO1xuICAgIH0sXG4gICAgZGlzcGF0Y2hFeGNlcHRpb246IGZ1bmN0aW9uIGRpc3BhdGNoRXhjZXB0aW9uKGUpIHtcbiAgICAgIGlmICh0aGlzLmRvbmUpIHRocm93IGU7XG4gICAgICB2YXIgciA9IHRoaXM7XG4gICAgICBmdW5jdGlvbiBoYW5kbGUobiwgbykge1xuICAgICAgICByZXR1cm4gYS50eXBlID0gXCJ0aHJvd1wiLCBhLmFyZyA9IGUsIHIubmV4dCA9IG4sIG8gJiYgKHIubWV0aG9kID0gXCJuZXh0XCIsIHIuYXJnID0gdCksICEhbztcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIG8gPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgbyA+PSAwOyAtLW8pIHtcbiAgICAgICAgdmFyIGkgPSB0aGlzLnRyeUVudHJpZXNbb10sXG4gICAgICAgICAgYSA9IGkuY29tcGxldGlvbjtcbiAgICAgICAgaWYgKFwicm9vdFwiID09PSBpLnRyeUxvYykgcmV0dXJuIGhhbmRsZShcImVuZFwiKTtcbiAgICAgICAgaWYgKGkudHJ5TG9jIDw9IHRoaXMucHJldikge1xuICAgICAgICAgIHZhciBjID0gbi5jYWxsKGksIFwiY2F0Y2hMb2NcIiksXG4gICAgICAgICAgICB1ID0gbi5jYWxsKGksIFwiZmluYWxseUxvY1wiKTtcbiAgICAgICAgICBpZiAoYyAmJiB1KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgaS5jYXRjaExvYykgcmV0dXJuIGhhbmRsZShpLmNhdGNoTG9jLCAhMCk7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgaS5maW5hbGx5TG9jKSByZXR1cm4gaGFuZGxlKGkuZmluYWxseUxvYyk7XG4gICAgICAgICAgfSBlbHNlIGlmIChjKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgaS5jYXRjaExvYykgcmV0dXJuIGhhbmRsZShpLmNhdGNoTG9jLCAhMCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghdSkgdGhyb3cgRXJyb3IoXCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseVwiKTtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBpLmZpbmFsbHlMb2MpIHJldHVybiBoYW5kbGUoaS5maW5hbGx5TG9jKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIGFicnVwdDogZnVuY3Rpb24gYWJydXB0KHQsIGUpIHtcbiAgICAgIGZvciAodmFyIHIgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgciA+PSAwOyAtLXIpIHtcbiAgICAgICAgdmFyIG8gPSB0aGlzLnRyeUVudHJpZXNbcl07XG4gICAgICAgIGlmIChvLnRyeUxvYyA8PSB0aGlzLnByZXYgJiYgbi5jYWxsKG8sIFwiZmluYWxseUxvY1wiKSAmJiB0aGlzLnByZXYgPCBvLmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICB2YXIgaSA9IG87XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGkgJiYgKFwiYnJlYWtcIiA9PT0gdCB8fCBcImNvbnRpbnVlXCIgPT09IHQpICYmIGkudHJ5TG9jIDw9IGUgJiYgZSA8PSBpLmZpbmFsbHlMb2MgJiYgKGkgPSBudWxsKTtcbiAgICAgIHZhciBhID0gaSA/IGkuY29tcGxldGlvbiA6IHt9O1xuICAgICAgcmV0dXJuIGEudHlwZSA9IHQsIGEuYXJnID0gZSwgaSA/ICh0aGlzLm1ldGhvZCA9IFwibmV4dFwiLCB0aGlzLm5leHQgPSBpLmZpbmFsbHlMb2MsIHkpIDogdGhpcy5jb21wbGV0ZShhKTtcbiAgICB9LFxuICAgIGNvbXBsZXRlOiBmdW5jdGlvbiBjb21wbGV0ZSh0LCBlKSB7XG4gICAgICBpZiAoXCJ0aHJvd1wiID09PSB0LnR5cGUpIHRocm93IHQuYXJnO1xuICAgICAgcmV0dXJuIFwiYnJlYWtcIiA9PT0gdC50eXBlIHx8IFwiY29udGludWVcIiA9PT0gdC50eXBlID8gdGhpcy5uZXh0ID0gdC5hcmcgOiBcInJldHVyblwiID09PSB0LnR5cGUgPyAodGhpcy5ydmFsID0gdGhpcy5hcmcgPSB0LmFyZywgdGhpcy5tZXRob2QgPSBcInJldHVyblwiLCB0aGlzLm5leHQgPSBcImVuZFwiKSA6IFwibm9ybWFsXCIgPT09IHQudHlwZSAmJiBlICYmICh0aGlzLm5leHQgPSBlKSwgeTtcbiAgICB9LFxuICAgIGZpbmlzaDogZnVuY3Rpb24gZmluaXNoKHQpIHtcbiAgICAgIGZvciAodmFyIGUgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgZSA+PSAwOyAtLWUpIHtcbiAgICAgICAgdmFyIHIgPSB0aGlzLnRyeUVudHJpZXNbZV07XG4gICAgICAgIGlmIChyLmZpbmFsbHlMb2MgPT09IHQpIHJldHVybiB0aGlzLmNvbXBsZXRlKHIuY29tcGxldGlvbiwgci5hZnRlckxvYyksIHJlc2V0VHJ5RW50cnkociksIHk7XG4gICAgICB9XG4gICAgfSxcbiAgICBcImNhdGNoXCI6IGZ1bmN0aW9uIF9jYXRjaCh0KSB7XG4gICAgICBmb3IgKHZhciBlID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGUgPj0gMDsgLS1lKSB7XG4gICAgICAgIHZhciByID0gdGhpcy50cnlFbnRyaWVzW2VdO1xuICAgICAgICBpZiAoci50cnlMb2MgPT09IHQpIHtcbiAgICAgICAgICB2YXIgbiA9IHIuY29tcGxldGlvbjtcbiAgICAgICAgICBpZiAoXCJ0aHJvd1wiID09PSBuLnR5cGUpIHtcbiAgICAgICAgICAgIHZhciBvID0gbi5hcmc7XG4gICAgICAgICAgICByZXNldFRyeUVudHJ5KHIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhyb3cgRXJyb3IoXCJpbGxlZ2FsIGNhdGNoIGF0dGVtcHRcIik7XG4gICAgfSxcbiAgICBkZWxlZ2F0ZVlpZWxkOiBmdW5jdGlvbiBkZWxlZ2F0ZVlpZWxkKGUsIHIsIG4pIHtcbiAgICAgIHJldHVybiB0aGlzLmRlbGVnYXRlID0ge1xuICAgICAgICBpdGVyYXRvcjogdmFsdWVzKGUpLFxuICAgICAgICByZXN1bHROYW1lOiByLFxuICAgICAgICBuZXh0TG9jOiBuXG4gICAgICB9LCBcIm5leHRcIiA9PT0gdGhpcy5tZXRob2QgJiYgKHRoaXMuYXJnID0gdCksIHk7XG4gICAgfVxuICB9LCBlO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfcmVnZW5lcmF0b3JSdW50aW1lLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKHQsIGUpIHtcbiAgcmV0dXJuIChtb2R1bGUuZXhwb3J0cyA9IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCwgZSkge1xuICAgIHJldHVybiB0Ll9fcHJvdG9fXyA9IGUsIHQ7XG4gIH0sIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0cyksIF9zZXRQcm90b3R5cGVPZih0LCBlKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX3NldFByb3RvdHlwZU9mLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwidmFyIGFycmF5V2l0aEhvbGVzID0gcmVxdWlyZShcIi4vYXJyYXlXaXRoSG9sZXMuanNcIik7XG52YXIgaXRlcmFibGVUb0FycmF5TGltaXQgPSByZXF1aXJlKFwiLi9pdGVyYWJsZVRvQXJyYXlMaW1pdC5qc1wiKTtcbnZhciB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSA9IHJlcXVpcmUoXCIuL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LmpzXCIpO1xudmFyIG5vbkl0ZXJhYmxlUmVzdCA9IHJlcXVpcmUoXCIuL25vbkl0ZXJhYmxlUmVzdC5qc1wiKTtcbmZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KHIsIGUpIHtcbiAgcmV0dXJuIGFycmF5V2l0aEhvbGVzKHIpIHx8IGl0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGUpIHx8IHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGUpIHx8IG5vbkl0ZXJhYmxlUmVzdCgpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfc2xpY2VkVG9BcnJheSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsInZhciBhcnJheVdpdGhvdXRIb2xlcyA9IHJlcXVpcmUoXCIuL2FycmF5V2l0aG91dEhvbGVzLmpzXCIpO1xudmFyIGl0ZXJhYmxlVG9BcnJheSA9IHJlcXVpcmUoXCIuL2l0ZXJhYmxlVG9BcnJheS5qc1wiKTtcbnZhciB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSA9IHJlcXVpcmUoXCIuL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LmpzXCIpO1xudmFyIG5vbkl0ZXJhYmxlU3ByZWFkID0gcmVxdWlyZShcIi4vbm9uSXRlcmFibGVTcHJlYWQuanNcIik7XG5mdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkocikge1xuICByZXR1cm4gYXJyYXlXaXRob3V0SG9sZXMocikgfHwgaXRlcmFibGVUb0FycmF5KHIpIHx8IHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIpIHx8IG5vbkl0ZXJhYmxlU3ByZWFkKCk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF90b0NvbnN1bWFibGVBcnJheSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsInZhciBfdHlwZW9mID0gcmVxdWlyZShcIi4vdHlwZW9mLmpzXCIpW1wiZGVmYXVsdFwiXTtcbmZ1bmN0aW9uIHRvUHJpbWl0aXZlKHQsIHIpIHtcbiAgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7XG4gIHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdO1xuICBpZiAodm9pZCAwICE9PSBlKSB7XG4gICAgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7XG4gICAgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpO1xuICB9XG4gIHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IHRvUHJpbWl0aXZlLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwidmFyIF90eXBlb2YgPSByZXF1aXJlKFwiLi90eXBlb2YuanNcIilbXCJkZWZhdWx0XCJdO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZShcIi4vdG9QcmltaXRpdmUuanNcIik7XG5mdW5jdGlvbiB0b1Byb3BlcnR5S2V5KHQpIHtcbiAgdmFyIGkgPSB0b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTtcbiAgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjtcbn1cbm1vZHVsZS5leHBvcnRzID0gdG9Qcm9wZXJ0eUtleSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsImZ1bmN0aW9uIF90eXBlb2Yobykge1xuICBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7XG5cbiAgcmV0dXJuIChtb2R1bGUuZXhwb3J0cyA9IF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykge1xuICAgIHJldHVybiB0eXBlb2YgbztcbiAgfSA6IGZ1bmN0aW9uIChvKSB7XG4gICAgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87XG4gIH0sIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0cyksIF90eXBlb2Yobyk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF90eXBlb2YsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgYXJyYXlMaWtlVG9BcnJheSA9IHJlcXVpcmUoXCIuL2FycmF5TGlrZVRvQXJyYXkuanNcIik7XG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgYSkge1xuICBpZiAocikge1xuICAgIGlmIChcInN0cmluZ1wiID09IHR5cGVvZiByKSByZXR1cm4gYXJyYXlMaWtlVG9BcnJheShyLCBhKTtcbiAgICB2YXIgdCA9IHt9LnRvU3RyaW5nLmNhbGwocikuc2xpY2UoOCwgLTEpO1xuICAgIHJldHVybiBcIk9iamVjdFwiID09PSB0ICYmIHIuY29uc3RydWN0b3IgJiYgKHQgPSByLmNvbnN0cnVjdG9yLm5hbWUpLCBcIk1hcFwiID09PSB0IHx8IFwiU2V0XCIgPT09IHQgPyBBcnJheS5mcm9tKHIpIDogXCJBcmd1bWVudHNcIiA9PT0gdCB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh0KSA/IGFycmF5TGlrZVRvQXJyYXkociwgYSkgOiB2b2lkIDA7XG4gIH1cbn1cbm1vZHVsZS5leHBvcnRzID0gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiLy8gVE9ETyhCYWJlbCA4KTogUmVtb3ZlIHRoaXMgZmlsZS5cblxudmFyIHJ1bnRpbWUgPSByZXF1aXJlKFwiLi4vaGVscGVycy9yZWdlbmVyYXRvclJ1bnRpbWVcIikoKTtcbm1vZHVsZS5leHBvcnRzID0gcnVudGltZTtcblxuLy8gQ29waWVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlZ2VuZXJhdG9yL2Jsb2IvbWFpbi9wYWNrYWdlcy9ydW50aW1lL3J1bnRpbWUuanMjTDczNj1cbnRyeSB7XG4gIHJlZ2VuZXJhdG9yUnVudGltZSA9IHJ1bnRpbWU7XG59IGNhdGNoIChhY2NpZGVudGFsU3RyaWN0TW9kZSkge1xuICBpZiAodHlwZW9mIGdsb2JhbFRoaXMgPT09IFwib2JqZWN0XCIpIHtcbiAgICBnbG9iYWxUaGlzLnJlZ2VuZXJhdG9yUnVudGltZSA9IHJ1bnRpbWU7XG4gIH0gZWxzZSB7XG4gICAgRnVuY3Rpb24oXCJyXCIsIFwicmVnZW5lcmF0b3JSdW50aW1lID0gclwiKShydW50aW1lKTtcbiAgfVxufVxuIiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHQvLyBubyBtb2R1bGUuaWQgbmVlZGVkXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXShtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbi8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG5fX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBfX3dlYnBhY2tfbW9kdWxlc19fO1xuXG4iLCIvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuX193ZWJwYWNrX3JlcXVpcmVfXy5uID0gKG1vZHVsZSkgPT4ge1xuXHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cblx0XHQoKSA9PiAobW9kdWxlWydkZWZhdWx0J10pIDpcblx0XHQoKSA9PiAobW9kdWxlKTtcblx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgeyBhOiBnZXR0ZXIgfSk7XG5cdHJldHVybiBnZXR0ZXI7XG59OyIsIi8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb25zIGZvciBoYXJtb255IGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uZCA9IChleHBvcnRzLCBkZWZpbml0aW9uKSA9PiB7XG5cdGZvcih2YXIga2V5IGluIGRlZmluaXRpb24pIHtcblx0XHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZGVmaW5pdGlvbiwga2V5KSAmJiAhX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIGtleSkpIHtcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBkZWZpbml0aW9uW2tleV0gfSk7XG5cdFx0fVxuXHR9XG59OyIsIi8vIFRoaXMgZnVuY3Rpb24gYWxsb3cgdG8gcmVmZXJlbmNlIGFzeW5jIGNodW5rc1xuX193ZWJwYWNrX3JlcXVpcmVfXy51ID0gKGNodW5rSWQpID0+IHtcblx0Ly8gcmV0dXJuIHVybCBmb3IgZmlsZW5hbWVzIGJhc2VkIG9uIHRlbXBsYXRlXG5cdHJldHVybiBcIlwiICsgY2h1bmtJZCArIFwiLmpzXCI7XG59OyIsIl9fd2VicGFja19yZXF1aXJlX18ubyA9IChvYmosIHByb3ApID0+IChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSkiLCIvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSAoZXhwb3J0cykgPT4ge1xuXHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcblx0fVxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xufTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiOyIsIl9fd2VicGFja19yZXF1aXJlX18uYiA9IGRvY3VtZW50LmJhc2VVUkkgfHwgc2VsZi5sb2NhdGlvbi5ocmVmO1xuXG4vLyBvYmplY3QgdG8gc3RvcmUgbG9hZGVkIGFuZCBsb2FkaW5nIGNodW5rc1xuLy8gdW5kZWZpbmVkID0gY2h1bmsgbm90IGxvYWRlZCwgbnVsbCA9IGNodW5rIHByZWxvYWRlZC9wcmVmZXRjaGVkXG4vLyBbcmVzb2x2ZSwgcmVqZWN0LCBQcm9taXNlXSA9IGNodW5rIGxvYWRpbmcsIDAgPSBjaHVuayBsb2FkZWRcbnZhciBpbnN0YWxsZWRDaHVua3MgPSB7XG5cdFwiZnVsbFwiOiAwXG59O1xuXG4vLyBubyBjaHVuayBvbiBkZW1hbmQgbG9hZGluZ1xuXG4vLyBubyBwcmVmZXRjaGluZ1xuXG4vLyBubyBwcmVsb2FkZWRcblxuLy8gbm8gSE1SXG5cbi8vIG5vIEhNUiBtYW5pZmVzdFxuXG4vLyBubyBvbiBjaHVua3MgbG9hZGVkXG5cbi8vIG5vIGpzb25wIGZ1bmN0aW9uIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcbmltcG9ydCBDaGFubmVscyBmcm9tICcuLi9jaGFubmVscy9DaGFubmVscyc7XG5pbXBvcnQgQ2hhbm5lbFN0YXRlIGZyb20gJy4uL2NoYW5uZWxzL0NoYW5uZWxTdGF0ZSc7XG5pbXBvcnQgUHVibGlzaGVycyBmcm9tICcuLi9wdWJsaXNoL1B1Ymxpc2hlcnMnO1xuaW1wb3J0IFB1Ymxpc2hlclN0YXRlIGZyb20gJy4uL3B1Ymxpc2gvUHVibGlzaGVyU3RhdGUnO1xuXG5leHBvcnQge1xuICBTREssXG4gIENoYW5uZWxzLFxuICBDaGFubmVsU3RhdGUsXG4gIFB1Ymxpc2hlcnMsXG4gIFB1Ymxpc2hlclN0YXRlXG59O1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIFNESyxcbiAgQ2hhbm5lbHMsXG4gIENoYW5uZWxTdGF0ZSxcbiAgUHVibGlzaGVycyxcbiAgUHVibGlzaGVyU3RhdGVcbn07Il0sIm5hbWVzIjpbIkRpc3Bvc2FibGUiLCJTdWJqZWN0IiwiUmVhZE9ubHlTdWJqZWN0IiwiRGlzcG9zYWJsZUxpc3QiLCJkZWZhdWx0RG9jdW1lbnRGb2N1c0ludGVydmFsVGltZW91dCIsIkFwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yIiwiX2NsYXNzQ2FsbENoZWNrIiwiX2RlZmluZVByb3BlcnR5IiwiRGF0ZSIsIm5vdyIsIl9pc0ZvcmVncm91bmQiLCJfcmVhZE9ubHlJc0ZvcmVncm91bmQiLCJkZXRlY3RUYWJGb2N1c0NoYW5nZSIsIl9jcmVhdGVDbGFzcyIsImtleSIsImdldCIsInZhbHVlIiwiZ2V0VGltZVNpbmNlTGFzdENoYW5nZSIsIl90aW1lT2ZMYXN0VGFiRm9jdXNDaGFuZ2UiLCJkaXNwb3NlIiwiX2Rpc3Bvc2FibGVzIiwiX3RoaXMiLCJoaWRkZW4iLCJ2aXNpYmlsaXR5Q2hhbmdlIiwiZG9jdW1lbnQiLCJfdHlwZW9mIiwibXNIaWRkZW4iLCJ3ZWJraXRIaWRkZW4iLCJoYW5kbGVWaXNpYmlsaXR5Q2hhbmdlIiwiaXNGb3JlZ3JvdW5kIiwic2V0Rm9jdXNTdGF0ZSIsImFkZEV2ZW50TGlzdGVuZXIiLCJhZGQiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwibGlzdGVuRm9yRG9jdW1lbnRGb2N1cyIsImNhbGwiLCJfdGhpczIiLCJfZG9jdW1lbnRGb2N1c0ludGVydmFsIiwid2luZG93Iiwic2V0SW50ZXJ2YWwiLCJoYXNGb2N1cyIsImNsZWFySW50ZXJ2YWwiLCJkZWZhdWx0IiwiQnJvd3NlckRldGVjdG9yIiwiX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbiIsIl9icm93c2VyTmFtZSIsIl9icm93c2VyTWFqb3JWZXJzaW9uIiwiX2lzQW5kcm9pZCIsIl9pc0Nocm9tZTY5IiwiX2lzQ2hyb21lNzAiLCJfaXNDaHJvbWU3MSIsIl9pc0Nocm9tZTcyIiwiX2lzQ2hyb21lNzQiLCJfaXNDaHJvbWU3NSIsIl9pc0Nocm9tZTc2IiwiX2lzQ2hyb21lNzciLCJpc01vYmlsZSIsIl9pc01vYmlsZSIsInBhcnNlQnJvd3Nlck5hbWVBbmRWZXJzaW9uIiwibmF2aWdhdG9yIiwidXNlckFnZW50IiwiYnJvd3Nlck5hbWVBbmRWZXJzaW9uIiwibWF0Y2giLCJfYnJvd3Nlck5hbWVBbmRWZXJzaW9uUmVnZXgiLCJwYXJzZUJyb3dzZXJOYW1lQW5kVmVyc2lvbkZvcklFIiwicGFyc2VCcm93c2VyTmFtZSIsImJyb3dzZXJOYW1lTGlzdCIsInNwbGl0IiwicGFyc2VCcm93c2VyTWFqb3JWZXJzaW9uIiwiYnJvd3NlclZlcnNpb25MaXN0IiwiZnVsbFZlcnNpb24iLCJOdW1iZXIiLCJtc2llIiwiaW5kZXhPZiIsImNvbmNhdCIsInBhcnNlSW50Iiwic3Vic3RyaW5nIiwidHJpZGVudCIsInZlcnNpb24iLCJfQnJvd3NlckRldGVjdG9yIiwidGVzdCIsIl9uYXZpZ2F0b3IiLCJfbmF2aWdhdG9yMiIsImluY2x1ZGVzIiwiVGVsZW1ldHJ5RGVmYXVsdCIsIlRlbGVtZXRyeUxldmVsTWFwcGluZyIsIkxvZ2dpbmdMZXZlbE1hcHBpbmciLCJMb2dnZXJEZWZhdWx0cyIsIkNvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIiLCJnZXRTdHJpbmdWYWx1ZSIsIm5hbWUiLCJyZWFkQ29uZmlndXJhdGlvblBhcmFtZXRlclZhbHVlIiwicmVhZENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJVUklWYWx1ZSIsImRlZmF1bHRTdHJpbmdWYWx1ZSIsImdldEJvb2xlYW5WYWx1ZSIsInZhbHVlRnJvbVVyaSIsImRlZmF1bHRCb29sZWFuVmFsdWUiLCJjb252ZXJ0VGVsZW1ldHJ5TGV2ZWxUb1RlbGVtZXRyeUxldmVsVHlwZSIsImRlZmF1bHRUZWxlbWV0cnlMZXZlbCIsImNvbnZlcnRMb2dnaW5nTGV2ZWxUb0xvZ2dpbmdMZXZlbFR5cGUiLCJkZWZhdWx0TG9nZ2luZ0xldmVsIiwiZGVmYXVsdENvbnNvbGVMb2dnaW5nTGV2ZWwiLCJkZWZhdWx0VGVsZW1ldHJ5TG9nZ2luZ0xldmVsIiwibWV0YVZhbHVlIiwicXVlcnlTZWxlY3RvciIsImdldEF0dHJpYnV0ZSIsInZhbHVlVVJJUGFyYW1ldGVyTmFtZSIsIlVSTFNlYXJjaFBhcmFtcyIsImxvY2F0aW9uIiwic2VhcmNoIiwidW5kZWZpbmVkIiwiRmVhdHVyZUVuYWJsZW1lbnQiLCJHYXJiYWdlQ29sbGVjdG9yTWFuYWdlciIsIkVycm9yIiwiZm9yY2VHYXJiYWdlQ29sbGVjdGlvbiIsImlzRm9yY2VDaHJvbWVHYXJiYWdlQ29sbGVjdGlvblN1cHBvcnRlZCIsImZvcmNlQ2hyb21lR2FyYmFnZUNvbGxlY3Rpb24iLCJpc1F1ZXVlTWljcm90YXNrU3VwcG9ydGVkIiwicXVldWVNaWNyb3Rhc2siLCJvdmVybG9hZE1lbW9yeVRvSW52b2tlR2FyYmFnZUNvbGxlY3Rpb24iLCJzZXRUaW1lb3V0IiwiaW1nIiwiY3JlYXRlRWxlbWVudCIsInNyYyIsIlVSTCIsImNyZWF0ZU9iamVjdFVSTCIsIkJsb2IiLCJBcnJheUJ1ZmZlciIsIm9uZXJyb3IiLCJyZXZva2VPYmplY3RVUkwiLCJOZXR3b3JrTW9uaXRvciIsImlzU3VwcG9ydGVkIiwic2V0dXBOZXR3b3JrQ2hhbmdlTGlzdGVuZXJzIiwidXBkYXRlU3RhdGlzdGljcyIsIl9pc1N1cHBvcnRlZCIsIl9ydHQiLCJfZWZmZWN0aXZlVHlwZSIsIl9kb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eSIsImdldERvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5IiwiZG93bmxpbmsiLCJkb3dubGlua01heCIsImdldEVmZmVjdGl2ZVR5cGUiLCJlZmZlY3RpdmVUeXBlIiwidHlwZSIsImdldFJvdW5kVHJpcFRpbWUiLCJydHQiLCJsaXN0ZW5lciIsIk1ldHJpY3NUeXBlIiwiTWV0cmljVHlwZSIsIkR1cmF0aW9ucyIsIlNESyIsIkxvZ2dlckZhY3RvcnkiLCJTdHJlYW1TZXR1cExpc3RlbmVyIiwicGFnZUxvYWRUaW1lIiwiZ2V0TG9nZ2VyIiwibWV0cmljc1NlcnZpY2UiLCJfc3RhcnRUaW1lIiwiX3BhZ2VMb2FkVGltZSIsInN1Y2Nlc3MiLCJzdHJlYW1JZCIsInJlY29yZFN0cmVhbU1ldHJpYyIsIlNldHVwQ29tcGxldGVkIiwiZmFpbCIsIlNldHVwRmFpbGVkIiwibWV0cmljVHlwZSIsIl9tZXRyaWNTdWJtaXR0ZWQiLCJzZXR1cFRpbWUiLCJtZXRyaWNOYW1lIiwiZ2V0TmFtZSIsInB1c2giLCJydW50aW1lIiwidWludDY0IiwiX2xvZ2dlciIsImluZm8iLCJ0b0lzb1N0cmluZyIsIkVkZ2VUb2tlbiIsImVkZ2VBdXRoVG9rZW5QcmVmaXgiLCJFZGdlQXV0aFBhcnNlciIsInBhcnNlVG9rZW4iLCJ0b2tlbiIsImlzRW5jb2RlZEVkZ2VUb2tlblZhbGlkIiwiZXJyb3IiLCJkZWNvZGVkVG9rZW4iLCJhdG9iIiwic3Vic3RyIiwibGVuZ3RoIiwiZWRnZVRva2VuIiwiSlNPTiIsInBhcnNlIiwiZSIsInN0YXJ0c1dpdGgiLCJfZWRnZVRva2VuJHRva2VuIiwiX2VkZ2VUb2tlbiR0b2tlbjIiLCJfYXBwbGljYXRpb25JZCIsImFwcGxpY2F0aW9uSWQiLCJfdG9rZW4iLCJ1cmkiLCJjYXBhYmlsaXRpZXMiLCJCdWlsZEZlYXR1cmVzIiwiX3NlbmRMb2NhbENhbmRpZGF0ZXMiLCJfc2VuZExvZ3MiLCJfc2VuZE1ldHJpY3MiLCJfbG9nVG9Db25zb2xlIiwiYXBwbHlGZWF0dXJlcyIsImZlYXR1cmVzIiwiX19GRUFUVVJFU19fIiwic2VuZExvY2FsQ2FuZGlkYXRlcyIsInNlbmRMb2dzIiwic2VuZE1ldHJpY3MiLCJsb2dUb0NvbnNvbGUiLCJpc0Nocm9tZTc0IiwiaXNDaHJvbWU3NSIsImlzQ2hyb21lNzYiLCJpc0Nocm9tZTc3IiwiaXNDaHJvbWU2OSIsImlzQ2hyb21lNzAiLCJpc0Nocm9tZTcxIiwiaXNDaHJvbWU3MiIsImJyb3dzZXJOYW1lIiwiYnJvd3Nlck1ham9yVmVyc2lvbiIsIl9kb2N1bWVudCIsIk1lZGlhU3RyZWFtVHJhY2tQcm9jZXNzb3IiLCJNZWRpYVN0cmVhbVRyYWNrR2VuZXJhdG9yIiwiUlRDUnRwUmVjZWl2ZXIiLCJwcm90b3R5cGUiLCJjcmVhdGVFbmNvZGVkU3RyZWFtcyIsIlJUQ1J0cFNjcmlwdFRyYW5zZm9ybSIsIlBhcmFtZXRlcnMiLCJfZGlzY292ZXJ5UGFyYW1ldGVycyIsImFwcGx5UGFyYW1ldGVycyIsInBhcmFtZXRlcnMiLCJfX1BBUkFNRVRFUlNfXyIsImRpc2NvdmVyeSIsImludGVudGlvbnMiLCJkaXNwb3NhYmxlIiwiX2Rpc3Bvc2VkIiwiX2Rpc3Bvc2FibGUiLCJfbGlzdCIsImZvckVhY2giLCJ0b1N0cmluZyIsIm1heERpZ2l0c0luRmxvYXRBZnRlckRvdCIsIk51bWJlcnMiLCJjb3VudE51bWJlckxlbmd0aCIsImluY3JlbWVudEZvck5lZ2F0aXZlVmFsdWUiLCJudW1iZXIiLCJjb3VudERpZ2l0c0JlZm9yZURlY2ltYWwiLCJNYXRoIiwiZmxvb3IiLCJjb3VudERpZ2l0c0FmdGVyRGVjaW1hbCIsImZpeFJvdW5kaW5nIiwicHJlY2lzaW9uIiwicG93ZXIiLCJwb3ciLCJyb3VuZCIsImRpZ2l0c0JlZm9yZURlY2ltYWwiLCJvcmlnaW5hbFZhbHVlIiwibW9kaWZpZWRWYWx1ZSIsImNvdW50IiwiU3RyaW5ncyIsInJhbmRvbSIsInJhbmRvbTEzQ2hhcmFjdGVycyIsImxvb3BzIiwiY2VpbCIsIkFycmF5IiwiZmlsbCIsInJlZHVjZSIsInN0cmluZyIsImZ1bmMiLCJhc3NlcnRVbnJlYWNoYWJsZSIsIngiLCJBcHBlbmRlcnMiLCJfYXBwZW5kZXJzIiwiYXBwZW5kZXIiLCJyZW1vdmUiLCJpdGVtcyIsIml0ZW0iLCJMb2dnaW5nTGV2ZWwiLCJDb25zb2xlQXBwZW5kZXIiLCJ0aHJlc2hvbGQiLCJfdGhyZXNob2xkIiwibG9nIiwibG9nTGV2ZWwiLCJtZXNzYWdlIiwiY2F0ZWdvcnkiLCJkYXRlIiwiZnVsbE1lc3NhZ2UiLCJ0b0lTT1N0cmluZyIsIldhcm4iLCJjb25zb2xlIiwiTG9nZ2VyIiwiYXBwZW5kZXJzIiwiX2NhdGVnb3J5IiwidHJhY2UiLCJUcmFjZSIsIl9sZW4iLCJhcmd1bWVudHMiLCJhcmdzIiwiX2tleSIsImRlYnVnIiwiRGVidWciLCJfbGVuMiIsIl9rZXkyIiwiSW5mbyIsIl9sZW4zIiwiX2tleTMiLCJ3YXJuIiwiX2xlbjQiLCJfa2V5NCIsIl9sZW41IiwiX2tleTUiLCJmYXRhbCIsIkZhdGFsIiwiX2xlbjYiLCJfa2V5NiIsImxldmVsIiwicmVwbGFjZVBsYWNlaG9sZGVycyIsInJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmciLCJpbmRleCIsInJlcGxhY2VBcmd1bWVudCIsInNwbGljZSIsInN0cmluZ2lmeSIsImFjY3VtdWxhdG9yIiwiY3VycmVudFZhbHVlIiwiYXJyYXkiLCJlcnJvclN0YWNrQWxzb0hhc0Vycm9yTWVzc2FnZSIsInN0YWNrIiwiYXJnIiwiY2FjaGUiLCJPYmplY3QiLCJhcmd1bWVudCIsImRhdGEiLCJ0b1N0cmluZ1N0ciIsIkxvZ2dpbmdUaHJlc2hvbGQiLCJUZWxlbWV0cnlBcHBlbmRlciIsIlRlbGVtZXRyeUNvbmZpZ3VyYXRpb24iLCJfdGVsZW1ldHJ5Q29uZmlndXJhdGlvbiIsImxvZ2dlciIsIl9sb2dnZXJzIiwiYXBwbHlMb2dnZXJDb25maWdGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbiIsImFwcGx5TG9nZ2luZ0xldmVsIiwiYXBwbHlBcHBlbmRlckxvZ2dpbmdMZXZlbCIsImFwcGx5Q29uc29sZUxvZ2dlciIsImJpbmQiLCJhcHBseVRlbGVtZXRyeUxvZ2dlciIsInBhcmFtZXRlclZhbHVlIiwiX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIiLCJzZXRUaHJlc2hvbGQiLCJhcHBseUFwcGVuZGVyIiwibG9nZ2luZ0xldmVsIiwiT2ZmIiwiQWxsIiwiY29udmVydExvZ2dpbmdMZXZlbFR5cGVUb0xvZ2dpbmdMZXZlbCIsImxvZ2dpbmdMZXZlbFR5cGUiLCJUZWxlbWV0cnlMZXZlbCIsIm1ldHJpY3MiLCJfbWV0cmljcyIsImdldFRlbGVtZXRyeUxldmVsIiwiVGltZVRvRmlyc3RGcmFtZSIsIkVzc2VudGlhbCIsIkNoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWUiLCJTdGFsbGVkIiwiQnVmZmVyaW5nIiwiUm91bmRUcmlwVGltZSIsIkRvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5IiwiTmV0d29ya1R5cGUiLCJSZXNvbHV0aW9uQ2hhbmdlZCIsIkFwcGxpY2F0aW9uRm9yZWdyb3VuZCIsIkFwcGxpY2F0aW9uQmFja2dyb3VuZCIsIk1ldHJpY3NDb25maWd1cmF0aW9uIiwiX3VybCIsInNldCIsInVybCIsIm1ldHJpY3NVcmwiLCJwYXRobmFtZSIsIl9lbnZpcm9ubWVudCIsImVudmlyb25tZW50IiwiX3RlbmFuY3kiLCJ0ZW5hbmN5IiwiX3Nlc3Npb25JZCIsInNlc3Npb25JZCIsIk1ldHJpY3NTZXJ2aWNlIiwiVGVsZW1ldHJ5VXJsIiwiRW52aXJvbm1lbnQiLCJNZXRyaWNzRmFjdG9yeSIsImdldE1ldHJpY3NTZXJ2aWNlIiwibWV0cmljc1NlcnZpY2VzIiwiX21ldHJpY3NTZXJ2aWNlcyIsIm1ldHJpY3NDb25maWd1cmF0aW9uIiwiY2xpZW50U2Vzc2lvbklkIiwiZ2V0VGVsZW1ldHJ5VXJsIiwiZ2V0RW52aXJvbm1lbnRGcm9tVXJsIiwiY29udmVydFRlbGVtZXRyeUxldmVsVHlwZVRvVGVsZW1ldHJ5TGV2ZWwiLCJ0ZWxlbWV0cnlMZXZlbCIsInNldFRlbGVtZXRyeUxldmVsIiwidmFsdWVzIiwiRXhwb25lbnRpYWxCYWNrb2ZmIiwiVmVyc2lvbk1hbmFnZXIiLCJyZXF1ZXN0U2l6ZUxpbWl0IiwibWF4QnVmZmVyZWRSZWNvcmRzIiwiaG9zdG5hbWUiLCJfbWV0cmljc0NvbmZpZ3VyYXRpb24iLCJfZXhwb25lbnRpYWxCYWNrb2ZmIiwibWV0cmljIiwicHJldmlvdXNWYWx1ZSIsInJlc291cmNlIiwia2luZCIsIm1ldHJpY1JlY29yZCIsInRpbWVzdGFtcCIsImZ1bGxRdWFsaWZpZWROYW1lIiwiX2RvbWFpbiIsInNka1ZlcnNpb24iLCJpZ25vcmVkIiwic2VuZE1ldHJpY3NJZkFibGUiLCJfYXN5bmNUb0dlbmVyYXRvciIsIl9yZWdlbmVyYXRvclJ1bnRpbWUiLCJtYXJrIiwiX2NhbGxlZSIsIm1ldHJpY3NNZXNzYWdlcyIsImZvcm1EYXRhIiwid3JhcCIsIl9jYWxsZWUkIiwiX2NvbnRleHQiLCJwcmV2IiwibmV4dCIsIkZvcm1EYXRhIiwiYXBwZW5kIiwicmVjb3JkcyIsImZldGNoIiwibWV0aG9kIiwiYm9keSIsImFicnVwdCIsInNlbnQiLCJzdG9wIiwiX3giLCJhcHBseSIsIl9zZW5kTWV0cmljc0lmQWJsZSIsIl9jYWxsZWUyIiwiX2NhbGxlZTIkIiwiX2NvbnRleHQyIiwiX2lzU2VuZGluZyIsInNsaWNlIiwidGhlbiIsInJlc3BvbnNlIiwiaXNSZXNwb25zZVN0YXR1c0NvZGVSZXRyeWFibGUiLCJfZmFpbHVyZUNvdW50IiwiX3RvQ29uc3VtYWJsZUFycmF5IiwiZ2V0RXhwb25lbnRpYWxCYWNrb2ZmSW50ZXJ2YWxCeUZhaWx1cmVDb3VudCIsImNhdGNoIiwiX3JlZiIsInN0YXR1cyIsInRlbGVtZXRyeUxldmVsVHlwZSIsIlByb21pc2VIYW5kbGVyIiwiUHJvbWlzZSIsImNhbGxiYWNrIiwiVHlwZUVycm9yIiwiX3N0YXRlIiwiX2hhbmRsZWQiLCJfdmFsdWUiLCJfZGVmZXJyZWRzIiwiZG9SZXNvbHZlIiwiZG9uZSIsInByb21pc2VSZXNvbHZlIiwicmVhc29uIiwicHJvbWlzZVJlamVjdCIsIm5ld1ZhbHVlIiwicHJvbWlzZSIsImZpbmFsZSIsIl9pbW1lZGlhdGUiLCJfdW5oYW5kbGVkUmVqZWN0aW9uIiwiaSIsImxlbiIsImhhbmRsZSIsImRlZmVycmVkIiwib25GdWxmaWxsZWQiLCJvblJlamVjdGVkIiwicmVzdWx0IiwiYWxsIiwiYXJyIiwicmVzb2x2ZSIsInJlamVjdCIsImlzQXJyYXkiLCJyZW1haW5pbmciLCJtYW5hZ2VSZXNwb25zZSIsImNvbnN0cnVjdG9yIiwiXyIsInJhY2UiLCJWYW5pbGxhUGVlckNvbm5lY3Rpb25GYWN0b3J5IiwiUGVlckNvbm5lY3Rpb25TZXJ2aWNlIiwiX3BlZXJDb25uZWN0aW9uRmFjdG9yeSIsImluaXRpYXRlSW5pdGlhbFByZWNhY2hpbmciLCJpc1ByZWNhY2hpbmdFbmFibGVkIiwicHJlY2FjaGVDcmVhdGVQZWVyQ29ubmVjdGlvbk9mZmVyIiwiX3ByZWNhY2hlQ3JlYXRlUGVlckNvbm5lY3Rpb25PZmZlciIsIl9jYWNoZWQiLCJkaXJlY3Rpb24iLCJwZWVyQ29ubmVjdGlvbiIsImNyZWF0ZVBlZXJDb25uZWN0aW9uT2ZmZXIiLCJfY3JlYXRlUGVlckNvbm5lY3Rpb25PZmZlciIsIl9jYWxsZWUzIiwiZW5jb2RlZEluc2VydGFibGVTdHJlYW1zIiwiY29uZmlndXJhdGlvbiIsIl9hcmdzMyIsIl9jYWxsZWUzJCIsIl9jb250ZXh0MyIsImlzRW5jb2RlZEluc2VydGFibGVTdHJlYW1zU3VwcG9ydGVkIiwiY3JlYXRlUGVlckNvbm5lY3Rpb24iLCJzdXBwb3J0c0FkZFRyYW5zY2VpdmVyIiwidmlkZW9UcmFuc2NlaXZlciIsImF1ZGlvVHJhbnNjZWl2ZXIiLCJvcHRpb25zIiwiYWRkVHJhbnNjZWl2ZXIiLCJ0MCIsInQxIiwidDIiLCJjcmVhdGVPZmZlciIsInQzIiwibG9jYWxPZmZlciIsIm9mZmVyVG9SZWNlaXZlQXVkaW8iLCJvZmZlclRvUmVjZWl2ZVZpZGVvIiwidDQiLCJ0NSIsIlJ0Y0NvbmZpZ3VyYXRpb25NYW5hZ2VyIiwidHJ1bmNhdGVJY2VTZXJ2ZXJzIiwiaWNlU2VydmVycyIsInVybHMiLCJ1c2VybmFtZSIsImNyZWRlbnRpYWwiLCJTZHBQYXJzZXIiLCJ1cGRhdGVTdGF0aXN0aWNUaW1lb3V0IiwiUnRjQ29ubmVjdGlvbk1vbml0b3IiLCJtZWRpYVN0cmVhbSIsImVzdGltYXRlZFJvdW5kVHJpcFRpbWUiLCJfcGVlckNvbm5lY3Rpb24iLCJfZXN0aW1hdGVkUm91bmRUcmlwVGltZSIsIl90cmFja3NUb01vbml0b3IiLCJnZXRUcmFja3MiLCJtYXAiLCJ0cmFjayIsImdldEN1cnJlbnRPZmZlckRpc2FibGVkIiwicGFyc2VkU0RQIiwiY3VycmVudFJlbW90ZURlc2NyaXB0aW9uIiwic2RwIiwiX2VzdGltYXRlZEF1ZGlvQ29kZWMiLCJhdWRpb0NvZGVjIiwiX2VzdGltYXRlZFZpZGVvQ29kZWMiLCJ2aWRlb0NvZGVjIiwidXBkYXRlU3RhdGlzdGljIiwiX3J0Y1N0YXRpc3RpYyIsIl9pc01vbml0b3JSdW5uaW5nIiwiX3VwZGF0ZVRpbWVvdXQiLCJjbGVhclRpbWVvdXQiLCJfdXBkYXRlU3RhdGlzdGljIiwiX2lnbm9yZWQiLCJnZXRLaW5kRm9yU2FmYXJpMTEiLCJnZXRTdGF0c1Byb21pc2VCYXNlZERpc2FibGVkIiwidXBkYXRlU3RhdGlzdGljTGVnYWN5IiwiaWQiLCJnZXRTdGF0cyIsInN0YXRzIiwicnRjU3RhdGlzdGljcyIsInJvdW5kVHJpcFRpbWUiLCJsYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXAiLCJyZXBvcnQiLCJjdXJyZW50Um91bmRUcmlwVGltZSIsIm1lZGlhVHlwZSIsImNvZGVjIiwiY29kZWNJZCIsIm1pbWVUeXBlIiwiX3RoaXMkX3J0Y1N0YXRpc3RpYyR2IiwiX3RoaXMkX3J0Y1N0YXRpc3RpYyR2MiIsIl90aGlzJF9ydGNTdGF0aXN0aWMkdjMiLCJfdGhpcyRfcnRjU3RhdGlzdGljJHY0IiwiX3RoaXMkX3J0Y1N0YXRpc3RpYyR2NSIsImJ5dGVzIiwiYnl0ZXNSZWNlaXZlZCIsInByZXZpb3VzQnl0ZXNSZWNlaXZlZCIsImJ5dGVzRGVsdGEiLCJ0aW1lRGVsdGEiLCJiaXRyYXRlIiwic3NyYyIsInBhY2tldHNMb3N0IiwicGFja2V0c1JlY2VpdmVkIiwiZ2V0Q29kZWNCeVR5cGUiLCJ2aWRlbyIsImZyYW1lc0RlY29kZWQiLCJmcHMiLCJfdXBkYXRlU3RhdGlzdGljTGVnYWN5IiwiZ2V0U3RhdHNMZWdhY3kiLCJuYW1lcyIsInN0YXQiLCJSdGNQdWJsaXNoTW9uaXRvciIsInBhcnNlZExvY2FsRGVzY3JpcHRpb24iLCJjdXJyZW50TG9jYWxEZXNjcmlwdGlvbiIsInBhcnNlZFJlbW90ZURlc2NyaXB0aW9uIiwiX2F2YWlsYWJsZVRyYWNrcyIsImF1ZGlvIiwiaXNBdWRpb1RyYWNrRW5hYmxlZCIsImlzVmlkZW9UcmFja0VuYWJsZWQiLCJsYXN0UGFja2V0U2VudFRpbWVzdGFtcCIsImJ5dGVzU2VudCIsInByZXZpb3VzQnl0ZXNTZW50IiwicGFja2V0c1NlbnQiLCJyZXRyYW5zbWl0dGVkQnl0ZXNTZW50IiwiZmlyQ291bnQiLCJmcmFtZUhlaWdodCIsImZyYW1lV2lkdGgiLCJmcmFtZXNFbmNvZGVkIiwiZnJhbWVzU2VudCIsImhlYWRlckJ5dGVzU2VudCIsImh1Z2VGcmFtZXNTZW50IiwicGxpQ291bnQiLCJxcFN1bSIsInRvdGFsRW5jb2RlVGltZSIsInRvdGFsRW5jb2RlZEJ5dGVzVGFyZ2V0IiwiX3NkcCIsInNkcFNwbGl0QnlMaW5lcyIsInNkcFNwbGl0QnlUcmFja3MiLCJfYXVkaW9Db2RlYyIsImFwcGx5Q29kZWMiLCJfdmlkZW9Db2RlYyIsIl9pc0F1ZGlvVHJhY2tFbmFibGVkIiwiaXNUcmFja0J5VHlwZUVuYWJsZWQiLCJfaXNWaWRlb1RyYWNrRW5hYmxlZCIsInNkcFNlY3Rpb25Gb3JUeXBlIiwiZmluZCIsInNkcFRyYWNrIiwidXNlZENvZGVjTGluZSIsInNkcExpbmUiLCJ1c2VkQ29kZWMiLCJjb2RlY05hbWUiLCJWYW5pbGxhUGVlckNvbm5lY3Rpb24iLCJ3ZWJraXRSVENQZWVyQ29ubmVjdGlvbkVuYWJsZWQiLCJ3ZWJraXRSVENQZWVyQ29ubmVjdGlvbiIsIlJUQ1BlZXJDb25uZWN0aW9uIiwiY29ubmVjdGlvblN0YXRlIiwiaWNlQ29ubmVjdGlvblN0YXRlIiwiZ2V0Q29uZmlndXJhdGlvbiIsInNldENvbmZpZ3VyYXRpb24iLCJhZGRUcmFuY2VpdmVyRGlzYWJsZWQiLCJfY3JlYXRlT2ZmZXIiLCJwcm9taXNlQmFzZWRQQ01ldGhvZHNEaXNhYmxlZCIsIl9jcmVhdGVBbnN3ZXIiLCJjcmVhdGVBbnN3ZXIiLCJfeDIiLCJfc2V0TG9jYWxEZXNjcmlwdGlvbiIsImRlc2NyaXB0aW9uIiwic2V0TG9jYWxEZXNjcmlwdGlvbiIsIlJUQ1Nlc3Npb25EZXNjcmlwdGlvbiIsIl94MyIsIl9zZXRSZW1vdGVEZXNjcmlwdGlvbiIsIl9jYWxsZWU0IiwiX2Rlc2NyaXB0aW9uJHNkcCIsImhhc0NyeXB0byIsIl9jYWxsZWU0JCIsIl9jb250ZXh0NCIsInNldFJlbW90ZURlc2NyaXB0aW9uIiwiX3g0IiwiZ2V0U2VuZGVycyIsImdldFJlY2VpdmVycyIsInNlbGVjdG9yIiwiX3RoaXMzIiwiYWRkU3RyZWFtIiwiX3RoaXM0IiwiYWRkVHJhY2siLCJvbnRyYWNrIiwiaGFuZGxlciIsIm9uaWNlY2FuZGlkYXRlIiwib25jb25uZWN0aW9uc3RhdGVjaGFuZ2UiLCJvbmljZWNvbm5lY3Rpb25zdGF0ZWNoYW5nZSIsImNsb3NlIiwiX2NyZWF0ZVBlZXJDb25uZWN0aW9uIiwic3ViamVjdCIsIl9zdWJqZWN0Iiwic3Vic2NyaWJlIiwiRGlzcG9zYWJsZUxpc3RlbmVyIiwiX0Rpc3Bvc2FibGUiLCJsaXN0ZW5lcnMiLCJfY2FsbFN1cGVyIiwiaWR4IiwiX2luaGVyaXRzIiwiX2xpc3RlbmVycyIsImNoYW5nZWQiLCJjb21wYXJhYmxlIiwiZXF1YWxzIiwiYmFzZVVSTCIsIm9yaWdpbiIsIkRpc2NvdmVyeVVyaSIsIl9jbGllbnRTZXNzaW9uSWQiLCJfbG9hZGVkVGltZXN0YW1wIiwiX3JlYWRPbmx5SW5pdGlhbGl6ZWQiLCJfcmVhZE9ubHlEaXNjb3ZlcnlVcmkiLCJfcmVhZE9ubHlQZWVyQ29ubmVjdGlvbkZhY3RvcnkiLCJfYXV0b21hdGljYWxseVJldHJ5T25GYWlsdXJlIiwiX2F1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbiIsIl9hdXRvbWF0aWNhbGx5UGxheU1lZGlhU3RyZWFtIiwiX2F1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlIiwiX2ZvcmNlR2FyYmFnZUNvbGxlY3Rpb25PblJlc3RhcnQiLCJfc2tpcEdhcmJhZ2VDb2xsZWN0aW9uT25Nb2JpbGVEZXZpY2VzIiwiX3dlYlBsYXllckxvYWRlciIsIl9zaGFrYVBsYXllckxvYWRlciIsIl9obHNKc0xvYWRlciIsIl9tZXRyaWNzU2VydmljZSIsIl9hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvciIsIl90ZWxlbWV0cnlVcmwiLCJfbWF4aW1hbE51bWJlck9mUGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyIsInJldHJpZXNBbW91bnQiLCJfdGVsZW1ldHJ5TGV2ZWwiLCJhcHBseVRlbGVtZXRyeUNvbmZpZ3VyYXRpb24iLCJ0ZWxlbWV0cnlDb25maWd1cmF0aW9uIiwiaWdub3JlZEVudmlyb25tZW50IiwiaWdub3JlZERpc2NvdmVyeVVyaSIsInRlbGVtZXRyeVVybCIsInRlbGVtZXRyeUFwcGVuZGVyIiwiaWdub3JlZFRlbmFuY3kiLCJhcHBseU1ldHJpY3NDb25maWd1cmF0aW9uIiwiaWdub3JlZFRlbGVtZXRyeUxldmVsIiwiYXBwbHlBdXRvbWF0aWNhbGx5UmV0cnlPbkZhaWx1cmVGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbiIsImFwcGx5QXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24iLCJhcHBseUZvcmNlR2FyYmFnZUNvbGxlY3Rpb25PblJlc3RhcnRGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbiIsImFwcGx5U2tpcEdhcmJhZ2VDb2xsZWN0aW9uT25Nb2JpbGVEZXZpY2VzRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24iLCJhcHBseURpc2NvdmVyeVVyaURlZmF1bHRGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbiIsImRpc2NvdmVyeVVyaSIsImNoYW5uZWxUb2tlbiIsInVyaVZhbHVlIiwiYmFzZVVSSVZhbHVlIiwiaW5pdCIsIl9pbml0aWFsaXplZCIsInBlZXJDb25uZWN0aW9uRmFjdG9yeSIsImNvbnNvbGVMb2dnaW5nTGV2ZWwiLCJjb25zb2xlQXBwZW5kZXIiLCJhdXRvbWF0aWNhbGx5UGxheU1lZGlhU3RyZWFtIiwiYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmUiLCJ3ZWJQbGF5ZXJMb2FkZXIiLCJzaGFrYVBsYXllckxvYWRlciIsImhsc0pzTG9hZGVyIiwiX1NESyIsInNlZ21lbnRzIiwicHJvdG9jb2wiLCJ1bnNoaWZ0IiwiZW5kc1dpdGgiLCJqb2luIiwiQml0cmF0ZVN0YXRlIiwiQml0cmF0ZU1vZGUiLCJEaW1lbnNpb24iLCJDaGFubmVsU3RhdGUiLCJWaWRlb1RlbGVtZXRyeSIsIlNlc3Npb25UZWxlbWV0cnkiLCJUb2tlbkNvbnRleHQiLCJDaGFubmVsQ29udGV4dCIsIkVuY29kZWRTdHJlYW1TaW5rIiwiU3RyZWFtVHJhY2tUcmFuc2Zvcm0iLCJTdHJlYW1UcmFuc2Zvcm1Db250ZXh0IiwiUGVlckNvbm5lY3Rpb25Db250ZXh0IiwiU3RhdGVDb250ZXh0IiwiU3RyZWFtRmFjdG9yeSIsIkRpc2NvdmVyeSIsImRlZmF1bHRTdHJlYW1UZXJtaW5hdGlvblJlYXNvbiIsImZhaWx1cmVDb3VudENsZWFuVXBJbnRlcnZhbEluTWlsbGlzZWNvbmRzIiwic3RhbmRieVBvbGxpbmdJbnRlcnZhbEluTWlsbGlzZWNvbmRzIiwiQ2hhbm5lbCIsInZpZGVvRWxlbWVudCIsImNoYW5uZWxDb250ZXh0T3B0aW9ucyIsInRhcmdldExhZyIsInN0cmVhbVRyYW5zZm9ybUNvbnRleHRPcHRpb25zIiwiaGFzSW5zZXJ0YWJsZVN0cmVhbXMiLCJoYXNFbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXMiLCJ2aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrIiwiYXVkaW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjayIsImVuY29kZWRWaWRlb1N0cmVhbVNpbmsiLCJlbmNvZGVkQXVkaW9TdHJlYW1TaW5rIiwiX3Rva2VuQ29udGV4dCIsIl9jaGFubmVsQ29udGV4dCIsIl9wZWVyQ29ubmVjdGlvbkNvbnRleHQiLCJfc3RyZWFtVHJhbnNmb3JtQ29udGV4dCIsIl9zdGF0ZUNvbnRleHQiLCJfY2hhbm5lbFN0YXJ0VGltZSIsIl9yZWFkT25seVZpZGVvRWxlbWVudCIsIl9yZWFkT25seVRva2VuIiwiX3JlYWRPbmx5UGVlckNvbm5lY3Rpb24iLCJfcmVhZE9ubHlTdGF0ZSIsInN0YXRlIiwiX3JlYWRPbmx5QXV0b011dGVkIiwiYXV0b011dGVkIiwiX3JlYWRPbmx5QXV0b1BhdXNlZCIsImF1dG9QYXVzZWQiLCJfcmVhZE9ubHlUb2tlbkV4cGlyaW5nIiwidG9rZW5FeHBpcmluZyIsIl9yZWFkT25seUF1dGhvcml6ZWQiLCJhdXRob3JpemVkIiwiX3JlYWRPbmx5T25saW5lIiwib25saW5lIiwiX3JlYWRPbmx5TG9hZGluZyIsImxvYWRpbmciLCJfcmVhZE9ubHlQbGF5aW5nIiwicGxheWluZyIsIl9yZWFkT25seVN0YW5kYnkiLCJzdGFuZGJ5IiwiX3JlYWRPbmx5U3RvcHBlZCIsInN0b3BwZWQiLCJfcmVhZE9ubHlUYXJnZXRMYWciLCJfcmVhZE9ubHlMYWciLCJsYWciLCJfcmVhZE9ubHlCaXRyYXRlTGltaXQiLCJiaXRyYXRlTGltaXQiLCJfcmVhZE9ubHlSZXNvbHV0aW9uIiwicmVzb2x1dGlvbiIsIl9yZWFkT25seUZhaWx1cmVDb3VudCIsImZhaWx1cmVDb3VudCIsIl9yZWFkT25seUVuZFBvaW50IiwiZW5kUG9pbnQiLCJfcmVhZE9ubHlTdHJlYW0iLCJzdHJlYW0iLCJfcmVhZE9ubHlSdGNTdGF0aXN0aWNzIiwiX3JlYWRPbmx5TWVkaWFTdHJlYW0iLCJfc2Vzc2lvblRlbGVtZXRyeSIsImNoYW5uZWxEaXNwb3NhYmxlcyIsIl92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXIiLCJoYW5kbGVWaWRlb01ldGFEYXRhQ2hhbmdlZCIsInJlbmRlcmVyRGlzcG9zYWJsZXMiLCJ2aWRlb1RlbGVtZXRyeSIsImRhdGFzZXQiLCJzZXR1cExpc3RlbmVyRm9yVGltZVRvRmlyc3RUaW1lIiwic2V0dXBMaXN0ZW5lckZvclJlYnVmZmVyaW5nIiwiU3RvcHBlZCIsInJlc3RhcnRBZnRlclN0b3AiLCJjbGVhckZhaWx1cmVDb3VudFRpbWVvdXQiLCJQbGF5aW5nIiwib25WaWRlb1Jlc29sdXRpb25DaGFuZ2VzIiwiZWxhcHNlZEluTWlsbGlzZWNvbmRzIiwiY2hhbm5lbEluaXRpYWxpemF0aW9uIiwiZ2V0VGltZSIsImxpbWl0Qml0cmF0ZSIsIktlZXAiLCJOb3JtYWwiLCJkZXN0cm95U3RyZWFtT25Vbm1vdW50Iiwic3RhcnQiLCJwYXVzZSIsInNyY09iamVjdCIsIndpZHRoIiwidmlkZW9XaWR0aCIsImhlaWdodCIsInZpZGVvSGVpZ2h0IiwiZW1wdHkiLCJkaXNwb3NhYmxlcyIsInNldEJpdHJhdGVMaW1pdCIsImNsZWFyQml0cmF0ZUxpbWl0IiwiYml0cmF0ZUluQml0c1BlclNlY29uZCIsIlJlc2V0IiwidXBkYXRlVGFyZ2V0TGFnIiwiX3N0b3AiLCJpc1N0YXJ0aW5nIiwicHJvY2Vzc1N0b3AiLCJjbGVhblVwUmVzb3VyY2VzIiwiX3Jlc3VtZSIsInBsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50IiwicmVzdW1lIiwibXV0ZSIsIm11dGVkIiwidW5tdXRlIiwiX2Rpc3Bvc2UiLCJpc0Rpc3Bvc2VkIiwiZ2V0VXJpIiwiX3N0YXJ0IiwicHJvY2Vzc1N0YXJ0IiwiX3Byb2Nlc3NTdGFydCIsIl9jYWxsZWU1IiwiX3RoaXM1IiwibGlzdGVuT25TdHJlYW1TZXR1cCIsIl9TdHJlYW1UcmFja1RyYW5zZm9ybSIsInZhbGlkIiwidmFsaWRhdGlvblJlc3VsdCIsIl9TdHJlYW1UcmFja1RyYW5zZm9ybTIiLCJfdmFsaWQiLCJfdmFsaWRhdGlvblJlc3VsdCIsIl9FbmNvZGVkU3RyZWFtU2luayR2YSIsIl92YWxpZDIiLCJfdmFsaWRhdGlvblJlc3VsdDIiLCJfRW5jb2RlZFN0cmVhbVNpbmskdmEyIiwiX3ZhbGlkMyIsIl92YWxpZGF0aW9uUmVzdWx0MyIsImhhc1RyYW5zZm9ybVN0cmVhbUNhbGxiYWNrIiwiaGFzRW5jb2RlZFN0cmVhbVNpbmsiLCJoYW5kbGVTdHJlYW1GYWlsdXJlQ2FsbGJhY2siLCJzdHJlYW1QbGF5ZXIiLCJfY2FsbGVlNSQiLCJfY29udGV4dDUiLCJVbmF1dGhvcml6ZWQiLCJ2YWxpZGF0ZU1lZGlhU3RyZWFtVHJhY2tUcmFuc2Zvcm0iLCJDb25maWd1cmF0aW9uRXJyb3IiLCJ2YWxpZGF0ZUVuY29kZWRTdHJlYW1TaW5rIiwiaXNJbnNlcnRhYmxlU3RyZWFtc1N1cHBvcnRlZCIsIlVuc3VwcG9ydGVkRmVhdHVyZSIsImlzUlRDUnRwU2NyaXB0VHJhbnNmb3JtU3VwcG9ydGVkIiwiU3RhcnRpbmciLCJSZWNvdmVyaW5nIiwiY2xlYXJDYWNoZWRDbG9zZXN0RW5kcG9pbnQiLCJoYW5kbGVTdHJlYW1GYWlsdXJlIiwiY3JlYXRlIiwiQ2xpZW50U3RhcnRFcnJvciIsImZpbmFsbHkiLCJhdXRvbWF0aWNSZXRyeU9uRmFpbHVyZSIsInRpbWVvdXRJZCIsImdldFJldHJ5SW50ZXJ2YWwiLCJfcmVzdGFydEFmdGVyU3RvcCIsIl9jYWxsZWU2IiwiX2NhbGxlZTYkIiwiX2NvbnRleHQ2IiwiX3BsYXkiLCJfY2FsbGVlNyIsIl9jYWxsZWU3JCIsIl9jb250ZXh0NyIsInBsYXkiLCJTdGFuZEJ5IiwiT2ZmbGluZSIsIkdlb1Jlc3RyaWN0ZWQiLCJHZW9CbG9ja2VkIiwiUGF1c2VkIiwiUmVjb25uZWN0aW5nIiwiVHJhbnNpZW50Q29uZmlndXJhdGlvbkVycm9yIiwiQ29ubmVjdGlvbkVycm9yIiwiX2hhbmRsZVN0cmVhbUZhaWx1cmUiLCJfY2FsbGVlOCIsIl9jYWxsZWU4JCIsIl9jb250ZXh0OCIsIl90aGlzNiIsImZvcmNlR2FyYmFnZUNvbGxlY3Rpb25PblJlc3RhcnQiLCJza2lwR2FyYmFnZUNvbGxlY3Rpb25Pbk1vYmlsZURldmljZXMiLCJkZXN0cm95U3RyZWFtIiwiX3JlZjIiLCJwZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzIiwiX3BsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50IiwiX2NhbGxlZTkiLCJfdGhpczciLCJwbGF5UHJvbWlzZSIsIl9jYWxsZWU5JCIsIl9jb250ZXh0OSIsImhhc0F1ZGlvVHJhY2siLCJmaWx0ZXIiLCJhdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZU9mZiIsIkNoYW5uZWxzIiwiY3JlYXRlQ2hhbm5lbCIsImluaXRpYWxpemVkIiwiY2hhbm5lbE9wdGlvbnMiLCJkZWZhdWx0VGFyZ2V0TGFnIiwiX29wdGlvbnMkdGFyZ2V0TGFnIiwiYXBwbHlTdGF0dXMiLCJhcHBseVNlc3Npb25BbmRTdHJlYW1Qcm9wZXJ0aWVzVG9WaWRlb0VsZW1lbnQiLCJtYXBTdWJzY3JpYmVTdGF0dXNUb0NoYW5uZWxTdGF0dXMiLCJkZWZhdWx0RGlzY292ZXJ5VXJpIiwiQml0cmF0ZU1vZGVNYXBwaW5nIiwiY29udmVydEJpdHJhdGVNb2RlVG9CaXRyYXRlTW9kZVR5cGUiLCJiaXRyYXRlTW9kZSIsIkZvcmNlIiwiQml0cmF0ZVN0YXRlTWFwcGluZyIsImNvbnZlcnRCaXRyYXRlU3RhdGVUb0JpdHJhdGVTdGF0ZVR5cGUiLCJiaXRyYXRlU3RhdGUiLCJEaXNjb3ZlcnlTZXJ2aWNlIiwiZGlzY292ZXJ5Q2FjaGVJbnRlcnZhbCIsIl9wcmVjYWNoZUNsb3Nlc3RFbmRQb2ludERpc2NvdmVyeSIsImRpc2NvdmVyQ2xvc2VzdEVuZFBvaW50V2l0aENhY2hpbmciLCJwcmVjYWNoZUNsb3Nlc3RFbmRQb2ludERpc2NvdmVyeSIsIl9kaXNjb3ZlckNsb3Nlc3RFbmRQb2ludFdpdGhDYWNoaW5nIiwiZGlzY292ZXJ5U2VydmljZSIsImNhY2hlZFZhbHVlIiwiX2NhY2hlIiwiZGlzY292ZXJDbG9zZXN0RW5kUG9pbnQiLCJFbmRQb2ludCIsImRlZmF1bHRUaW1lb3V0IiwiX3VyaSIsIl9kaXNjb3Zlck5lYXJieUVuZFBvaW50cyIsInRpbWVvdXQiLCJhc1N0cmluZyIsImVuZFBvaW50cyIsIm9rIiwidGV4dCIsImRpc2NvdmVyTmVhcmJ5RW5kUG9pbnRzIiwiX2Rpc2NvdmVyQ2xvc2VzdEVuZFBvaW50IiwiZmFpbGVkUmVxdWVzdHMiLCJwcm9wYWdhdGVGYWlsdXJlSWZBbGxSZXF1ZXN0c0ZhaWxlZCIsIl9hcmdzMiIsImJ1aWxkRGlzY292ZXJ5VXJsIiwicGluZyIsInRpbWUiLCJfZGlzY292ZXJ5VXJpIiwiZGlzY292ZXJ5UGFyYW1ldGVycyIsInNlYXJjaFBhcmFtcyIsImFwaVZlcnNpb24iLCJfdGltZW91dCIsIl9yb3VuZFRyaXBUaW1lIiwiX3BpbmciLCJmaW5pc2hlZCIsImJ1aWxkUGluZ1VybCIsIl9zdWJzY3JpYmUiLCJsb2NhbFNlc3Npb25EZXNjcmlwdGlvbiIsImNsaWVudFZlcnNpb24iLCJib2R5V2l0aE9mZmVyIiwiYm9keVdpdGhvdXRPZmZlciIsImh0dHBSZXNwb25zZSIsInN1YnNjcmliZVJlc3BvbnNlIiwiYnVpbGRVcmwiLCJiZWFyZXJUb2tlbiIsImh0dHBSb3VuZFRyaXBUaW1lIiwic2Vzc2lvbkRlc2NyaXB0aW9uIiwiY3JlYXRlQW5zd2VyRGVzY3JpcHRpb24iLCJjcmVhdGVPZmZlckRlc2NyaXB0aW9uIiwibWFwSHR0cFN0YXR1c1RvU3Vic2NyaWJlU3RhdHVzIiwiY29udmVydEh0dHBSZXNwb25zZVRvU3Vic2NyaWJlUmVzcG9uc2UiLCJfcHVibGlzaCIsIm1hcEh0dHBTdGF0dXNUb1B1Ymxpc2hTdGF0dXMiLCJjb252ZXJ0SHR0cFJlc3BvbnNlVG9QdWJsaXNoUmVzcG9uc2UiLCJwdWJsaXNoIiwiX3g1IiwiX3g2IiwiX3g3Iiwic2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSIsInNoYXJlZFNlY3JldCIsIm1hcEh0dHBTdGF0dXNUb1NldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzIiwiY29udmVydEh0dHBSZXNwb25zZVRvU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSIsIl94OCIsIl94OSIsIl9saW1pdEJpdHJhdGUiLCJtYXBIdHRwU3RhdHVzVG9TZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVN0YXR1cyIsIl94MTAiLCJfeDExIiwiX3gxMiIsIl94MTMiLCJfeDE0IiwiX2FkZEljZUNhbmRpZGF0ZXMiLCJjYW5kaWRhdGVzIiwiZGlzY292ZXJ5Q29tcGxldGVkIiwiYWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlIiwiX2FyZ3M2IiwibWFwSHR0cFN0YXR1c1RvQWRkSWNlQ2FuZGlkYXRlc1N0YXR1cyIsImNvbnZlcnRIdHRwUmVzcG9uc2VUb0FkZEljZUNhbmRpZGF0ZXNSZXNwb25zZSIsImFkZEljZUNhbmRpZGF0ZXMiLCJfeDE1IiwiX3gxNiIsIl94MTciLCJfZGVzdHJveVN0cmVhbSIsImRlc3Ryb3lTdHJlYW1SZXNwb25zZSIsIm1hcEh0dHBTdGF0dXNUb1NldERlc3Ryb3lTdHJlYW1TdGF0dXMiLCJjb252ZXJ0SHR0cFJlc3BvbnNlVG9EZXN0cm95U3RyZWFtUmVzcG9uc2UiLCJfeDE4IiwiX3gxOSIsIl9kZXN0cm95U3RyZWFtT25Vbm1vdW50Iiwic2VuZEJlYWNvbiIsIl94MjAiLCJfeDIxIiwicGF0aCIsInBhdGhBc0FycmF5IiwiX2NvbnZlcnRIdHRwUmVzcG9uc2VUb1N1YnNjcmliZVJlc3BvbnNlIiwianNvbiIsInJ0Y0NvbmZpZ3VyYXRpb24iLCJjb252ZXJ0SVJ0Y0NvbmZpZ3VyYXRpb25Ub1JUQ0NvbmZpZ3VyYXRpb24iLCJjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlIiwiY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlIiwiX3gyMiIsIl94MjMiLCJfY29udmVydEh0dHBSZXNwb25zZVRvUHVibGlzaFJlc3BvbnNlIiwiX2NhbGxlZTEwIiwicHVibGlzaFJlc3BvbnNlIiwiX2NhbGxlZTEwJCIsIl9jb250ZXh0MTAiLCJfeDI0IiwiX3gyNSIsImJ1bmRsZVBvbGljeSIsImljZUNhbmRpZGF0ZVBvb2xTaXplIiwiaWNlVHJhbnNwb3J0UG9saWN5IiwicnRjcE11eFBvbGljeSIsIl9jb252ZXJ0SHR0cFJlc3BvbnNlVG9TZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlIiwiX2NhbGxlZTExIiwiX2NhbGxlZTExJCIsIl9jb250ZXh0MTEiLCJfeDI2IiwiX2NvbnZlcnRIdHRwUmVzcG9uc2VUb0FkZEljZUNhbmRpZGF0ZXNSZXNwb25zZSIsIl9jYWxsZWUxMiIsIl9jYWxsZWUxMiQiLCJfY29udGV4dDEyIiwiX3gyNyIsIl9jb252ZXJ0SHR0cFJlc3BvbnNlVG9EZXN0cm95U3RyZWFtUmVzcG9uc2UiLCJfY2FsbGVlMTMiLCJfY2FsbGVlMTMkIiwiX2NvbnRleHQxMyIsIl94MjgiLCJQdWJsaXNoZXJTdGF0ZSIsIlB1Ymxpc2hlckNvbnRleHQiLCJSZWFsVGltZVB1Ymxpc2hlciIsIm9uZUhvdXJJbk1pbGxpc2Vjb25kcyIsIm1heFJlY29ubmVjdGluZ0F0dGVtcHRzSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcyIsIlB1Ymxpc2hlciIsIl9wdWJsaXNoZXJDb250ZXh0IiwiX3B1Ymxpc2hlclN0YXJ0VGltZSIsIl9yZWFkT25seVB1Ymxpc2hpbmciLCJwdWJsaXNoaW5nIiwicHVibGlzaGVyRGlzcG9zYWJsZXMiLCJQdWJsaXNoaW5nIiwic2V0TWVkaWFTdHJlYW0iLCJtZWRpYVRyYWNrIiwic2VuZGVyIiwiX3NlbmRlciR0cmFjayIsInJlcGxhY2VUcmFjayIsInN0cmVhbVB1Ymxpc2hlciIsInN0YXJ0UmVjb25uZWN0aW9uQXR0ZW1wdHNUaW1lSW5NaWxsaXNlY29uZHMiLCJOb3RGb3VuZCIsInJlY29ubmVjdGluZ0F0dGVtcHRzSW50ZXJ2YWwiLCJwdWJsaXNoZXJJbml0aWFsaXphdGlvbiIsImdlbmVyYXRlU2NyZWVuTmFtZSIsIm1hcFB1Ymxpc2hTdGF0dXNUb1B1Ymxpc2hlclN0YXR1cyIsIlB1Ymxpc2hlcnMiLCJjcmVhdGVQdWJsaXNoZXIiLCJpY2VDYW5kaWRhdGVBY2N1bXVsYXRpb25JbnRlcnZhbCIsInNvZnRSZXN0YXJ0SW50ZXJ2YWwiLCJwdWJsaXNoZXJDb250ZXh0IiwicGVlckNvbm5lY3Rpb25Db250ZXh0Iiwib25MaW5lIiwiX3JlZjMiLCJfc2xpY2VkVG9BcnJheSIsIl9yZWYzJCIsImNsaWVudE9mZmVyRGlzYWJsZWQiLCJzdXBwb3J0c1NldENvbmZpZ3VyYXRpb24iLCJzdXBwb3J0c0dldENvbmZpZ3VyYXRpb24iLCJfcmVmNCIsImFwcGx5UnRjQ29uZmlndXJhdGlvbiIsInN1Ym1pdENhbmRpZGF0ZXNUaW1lb3V0IiwiY2FuY2VsRGlzY292ZXJ5IiwiY2FuZGlkYXRlIiwiX3JlZjUiLCJyZXRyeUNhbGxiYWNrIiwicmVjb25uZWN0UGVlckNvbm5lY3Rpb24iLCJhbnN3ZXIiLCJfcmVmNiIsIm1hcFNldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzVG9QdWJsaXNoZXJTdGF0dXMiLCJydGNQdWJsaXNoTW9uaXRvciIsInJ0Y1N0YXRpc3RpYyIsInN0YXRpc3RpY3MiLCJfYXBwbHlSdGNDb25maWd1cmF0aW9uIiwib3B0aW9uYWxQZWVyQ29ubmVjdGlvbiIsIm5ld1J0Y0NvbmZpZ3VyYXRpb24iLCJfb2JqZWN0U3ByZWFkIiwibWF4aW1hbE51bWJlck9mUGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyIsImF1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbiIsIl9wZWVyQ29ubmVjdGlvbiRjdXJyZSIsImlzQ2xpZW50T2ZmZXJGbG93IiwicmVjb25uZWN0UGVlckNvbm5lY3Rpb25UaW1lb3V0IiwiaWNlUmVzdGFydCIsIm9mZmVyIiwiQ2h1bmtlZFN0cmVhbWluZyIsIk5ldHdvcmtTdGF0ZXMiLCJDaHVua2VkU3RyZWFtUGxheWJhY2tNb2RlIiwiQ2h1bmtlZFN0cmVhbSIsImNoYW5uZWxDb250ZXh0IiwiY2h1bmtlZFN0cmVhbVBsYXliYWNrTW9kZSIsIl9jaHVua2VkU3RyZWFtUGxheWJhY2tNb2RlIiwib2ZmZXJTZHAiLCJvcmlnaW5TdGFydFRpbWUiLCJwbGF5ZXIiLCJtb25pdG9yIiwiX21vbml0b3JEaXNwb3NhYmxlcyIsIm5ld1N0cmVhbVN0YXRpc3RpY3MiLCJMaXZlIiwibmV0d29ya1N0YXRlIiwiTmV0d29ya05vU291cmNlIiwiY3VycmVudFRpbWUiLCJkdXJhdGlvbiIsIl9tb25pdG9yRmFpbHVyZUNvdW50IiwiX3N0cmVhbVN0YXRpc3RpY3MiLCJwYXVzZWQiLCJkYXRhQnVmZmVyZWQiLCJXZWJQbGF5ZXIiLCJTaGFrYVBsYXllciIsIkhsc1BsYXllciIsIl9obHNQbGF5ZXIiLCJfcGhlbml4V2ViUGxheWVyIiwiX3NoYWthIiwiX29wdGlvbnMiLCJsb2FkZWQiLCJfcGVuZGluZyIsIl9wbGF5ZXIiLCJQbGF5ZXIiLCJkYXNoTWFuaWZlc3RVcmxNYXRjaCIsImhsc01hbmlmZXN0VXJsTWF0Y2giLCJtYW5pZmVzdFVybCIsInBsYXlsaXN0VXJsIiwic2hvdWxkVXNlTmF0aXZlSGxzIiwicHJlZmVyTmF0aXZlIiwibWFuaWZlc3RVUkkiLCJfdmlkZW9FbGVtZW50IiwiX2tpbmQiLCJfc3RyZWFtSWQiLCJfbWFuaWZlc3RVUkkiLCJlbmNvZGVVUkkiLCJyZXBsYWNlIiwiaGxzUGxheWVyIiwiZW5hYmxlV29ya2VyIiwibWF4QnVmZmVyTGVuZ3RoIiwiYmFja0J1ZmZlckxlbmd0aCIsImxpdmVTeW5jRHVyYXRpb24iLCJsaXZlRHVyYXRpb25JbmZpbml0eSIsImxpdmVNYXhMYXRlbmN5RHVyYXRpb24iLCJJbmZpbml0eSIsImhpZ2hCdWZmZXJXYXRjaGRvZ1BlcmlvZCIsImxvYWRTb3VyY2UiLCJhdHRhY2hNZWRpYSIsImNhblBsYXlUeXBlIiwibWVkaWEiLCJvZmZzZXRXaWR0aCIsIm9mZnNldEhlaWdodCIsIk5ldHdvcmtJZGxlIiwiYnVmZmVyZWQiLCJlbmQiLCJzdHJlYW1Db250cm9sbGVyIiwiTmV0d29ya0xvYWRpbmciLCJOZXR3b3JrRW1wdHkiLCJ0cnVlQ3VycmVudFRpbWUiLCJtYXgiLCJkZXN0cm95IiwiSW5zZXJ0YWJsZVN0cmVhbXMiLCJkZWZhdWx0U3RyZWFtU2V0dXBUaW1lb3V0IiwiUmVhbFRpbWVTdHJlYW0iLCJzdHJlYW1UcmFuc2Zvcm1Db250ZXh0IiwibWVkaWFTdHJlYW1Qcm9taXNlIiwib25UcmFja0Rpc2FibGVkIiwic3RyZWFtcyIsInRyYWNrTGlzdGVuZXIiLCJtYXBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1c1RvQ2hhbm5lbFN0YXR1cyIsIl9JbnNlcnRhYmxlU3RyZWFtcyRhcCIsImFwcGx5RW5jb2RlZFN0cmVhbVRyYW5zZm9ybWF0aW9uIiwiX0luc2VydGFibGVTdHJlYW1zJGFwMiIsImFwcGx5SW5zZXJ0YWJsZVN0cmVhbVRyYW5zZm9ybWF0aW9uIiwidHJhbnNmb3JtZWRTdHJlYW0iLCJydGNDb25uZWN0aW9uTW9uaXRvciIsInJ0Y0Nvbm5lY3Rpb25Nb25pdG9yU3RhdGlzdGljU3Vic2NyaXB0aW9uIiwicnRjVmlkZW9TdGF0aXN0aWMiLCJydGNBdWRpb1N0YXRpc3RpYyIsImF1ZGlvVHJhY2tGYWlsZWQiLCJ2aWRlb1RyYWNrRmFpbGVkIiwiX21vbml0b3JlZFN0YXRpc3RpY3MiLCJlc3RpbWF0ZWRCYW5kd2lkdGgiLCJwbGF5VGltZSIsInNoYWthIiwicGxheWVyT3B0aW9ucyIsImFiciIsImRlZmF1bHRCYW5kd2lkdGhFc3RpbWF0ZSIsIm1hbmlmZXN0IiwicmV0cnlQYXJhbWV0ZXJzIiwic3RyZWFtaW5nIiwibGl2ZVN5bmNQYW5pY1RocmVzaG9sZCIsImJ1ZmZlcmluZ0dvYWwiLCJidWZmZXJCZWhpbmQiLCJtYXhBdHRlbXB0cyIsImJhY2tvZmZGYWN0b3IiLCJsb2FkUGxheWVyIiwidW5sb2FkIiwicGxheWVyQ29uZmlnIiwiY29uZmlndXJlIiwibG9hZCIsImNvZGUiLCJ0b2tlbkNhcGFiaWxpdGllcyIsImhhc1N0cmVhbWluZyIsImhhc09uRGVtYW5kIiwiT25kRGVtYW5kIiwiYmFuZHdpZHRoVG9TdGFydEF0IiwibWluVGltZUJlZm9yZU5leHRSZWxvYWQiLCJwaGVuaXhXZWJQbGF5ZXIiLCJlcnJvck9iamVjdCIsImNhblJlbG9hZCIsInNldmVyaXR5IiwiZXJyb3JzIiwiUkVDT1ZFUkFCTEUiLCJyZWxvYWRJZkFibGUiLCJfdGhpcyRfdmlkZW9FbGVtZW50JGIiLCJfdGhpcyRfdmlkZW9FbGVtZW50JGIyIiwiaXNOYXRpdmUiLCJkZWxpdmVyeVR5cGUiLCJoYXNFbGFwc2VkTWluVGltZVNpbmNlTGFzdFJlbG9hZCIsIl9sYXN0UmVsb2FkVGltZSIsInJlbG9hZCIsIm1vZGUiLCJTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyIiwiU2tpcEZyYW1lIiwicmVjZWl2ZXJzIiwicmVjZWl2ZXIiLCJyZWNlaXZlIiwid29ya2VyIiwiV29ya2VyIiwiaW1wb3J0IiwibWV0YSIsIm9ubWVzc2FnZSIsImV2ZW50IiwiY2h1bmsiLCJwb3N0TWVzc2FnZSIsImZvcmNlSW52YWxpZEZyYW1lIiwidHJhbnNmb3JtIiwidGVybWluYXRlIiwiZW5jb2RlZFN0cmVhbVRyYW5zZm9ybUNhbGxiYWNrIiwiY29udHJvbGxlciIsInN1cnJvZ2F0ZSIsImdldEludmFsaWRTdXJyb2dhdGVWaWRlb0lGcmFtZSIsImdldEludmFsaWRTdXJyb2dhdGVWaWRlb1BGcmFtZSIsImdldFN1cnJvZ2F0ZVZpZGVvSUZyYW1lUGVyQ29kZWMiLCJnZXRTdXJyb2dhdGVWaWRlb1BGcmFtZVBlckNvZGVjIiwiZW5xdWV1ZSIsInRyYW5zZm9ybWVyIiwiVHJhbnNmb3JtU3RyZWFtIiwicmVjZWl2ZXJTdHJlYW1zIiwic291cmNlIiwicmVhZGFibGUiLCJzaW5rIiwid3JpdGFibGUiLCJwaXBlVGhyb3VnaCIsInBpcGVUbyIsIk1lZGlhU3RyZWFtIiwiYXVkaW9QdW1wZXIiLCJBdWRpbyIsImFwcGVuZENoaWxkIiwicmVtb3ZlQ2hpbGQiLCJnZXRJbnZhbGlkU3Vycm9nYXRlQXVkaW9EYXRhIiwiZ2V0U3Vycm9nYXRlQXVkaW9TaWxlbnRQZXJDb2RlYyIsImluc2VydGFibGVTdHJlYW1UcmFuc2Zvcm1DYWxsYmFjayIsInZpZGVvVHJhY2siLCJwcm9jZXNzb3IiLCJnZW5lcmF0b3IiLCJyZW1vdmVUcmFjayIsImF1ZGlvVHJhY2siLCJTeW1ib2wiLCJ0b1VwcGVyQ2FzZSIsIl9kdW1teUF1ZGlvU2lsZW50UGVyQ29kZWMiLCJPUFVTIiwiYnVmZmVyIiwiX3NpbmdsZVplcm9CeXRlIiwiX3VzZVVwZGF0ZVN1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXIiLCJfc3Vycm9nYXRlODJ4ODJQRnJhbWVGcmFtZU51bWJlciIsIl9zdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyUmVzZXQiLCJfZHVtbXk4Mng4MkgyNjQiLCJJRnJhbWUiLCJfZHVtbXkyeDJWaWRlb0lGcmFtZVBlckNvZGVjIiwiSDI2NCIsIlZQOCIsIlZQOSIsIl9pc0FuZHJvaWRDaHJvbWUiLCJnZXRTdXJyb2dhdGU4Mng4MlBGcmFtZUFuZFVwZGF0ZUZyYW1lTnVtYmVyIiwiX2R1bW15MngyVmlkZW9QRnJhbWVQZXJDb2RlYyIsInNhdmVkU3Vycm9nYXRlRnJhbWVOdW1iZXIiLCJiaXRNYXNrMSIsImJpdE1hc2syIiwiYml0U2hpZnRSaWdodEJ5MSIsImJpdFNoaWZ0TGVmdEJ5NyIsImJ5dGUxIiwiYnl0ZTIiLCJjb3B5T2ZEdW1teVBGcmFtZXMiLCJQRnJhbWUiLCJidWZmZXJJbmRleCIsIl9kdW1teTgyeDgySDI2NFBGcmFtZUZyYW1lTnVtYmVySW5kZXgiLCJfU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlciIsImlzQW5kcm9pZCIsIlVpbnQ4QXJyYXkiLCJfaXNNb2JpbGVDaHJvbWUiLCJfaXNTYWZhcmkiLCJfX0JVSUxEX1ZFUlNJT05fXyIsIl9kZWZhdWx0VmVyc2lvbiIsIlRlbGVtZXRyeVNlcnZpY2UiLCJfdGVsZW1ldHJ5U2VydmljZSIsInZhbHVlT2YiLCJsb2dSZWNvcmQiLCJfbG9ncyIsInNlbmRMb2dzSWZBYmxlIiwibG9nTWVzc2FnZXMiLCJfc2VuZExvZ3NJZkFibGUiLCJudW1iZXJPZkxvZ3NUb1NlbmQiLCJzaXplT2ZMb2dzVG9TZW5kIiwiZ2V0SXRlbVNpemUiLCJnZXRMb2dTaXplIiwic3VtIiwiX2R1cmF0aW9uIiwiaXNOZWdhdGl2ZSIsImFicyIsIm9mZnNldCIsIm1pbGxpc2Vjb25kcyIsInNlY29uZHMiLCJtaW51dGVzIiwiaG91cnMiLCJwYXJ0cyIsIlN0cmluZyIsInBhZFN0YXJ0IiwidGFyZ2V0TGVuZ3RoIiwicGFkU3RyaW5nIiwicmVwZWF0IiwiZGVmYXVsdEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQiLCJkZWZhdWx0TWluQmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCIsImRlZmF1bHRNYXhCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kIiwiYmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCIsIm1pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQiLCJtYXhCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kIiwiX2JhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQiLCJfbWluQmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCIsIl9tYXhCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kIiwiYmFja29mZkludGVydmFsSW5TZWNvbmRzIiwicmFuZG9taXphdGlvbiIsImV4cG9uZW50aWFsQmFja29mZiIsImV4cG9uZW50aWFsQmFja29mZldpdGhSYW5kb21pemF0aW9uIiwiZXhwb25lbnRpYWxCYWNrb2ZmV2l0aFJhbmRvbWl6YXRpb25Jbk1pbGxpc2Vjb25kIiwibWluIiwib3RoZXIiLCJhcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvciIsIl9uZXR3b3JrTW9uaXRvciIsInJlY29yZEZvcmVncm91bmRDaGFuZ2UiLCJyZWNvcmROZXR3b3JrUlRUVXBkYXRlIiwicmVjb3JkTmV0d29ya1R5cGVDaGFuZ2VVcGRhdGUiLCJkb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eSIsInJlY29yZE5ldHdvcmtEb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eVVwZGF0ZSIsInRpbWVTaW5jZUxhc3RDaGFuZ2UiLCJuZXdSVFQiLCJvbGRSdHQiLCJfbGFzdE5ldHdvcmtTdGF0aXN0aWNzIiwibmV3TmV0d29ya1R5cGUiLCJvbGROZXR3b3JrVHlwZSIsIm5ld0NhcGFjaXR5Iiwib2xkQ2FwYWNpdHkiLCJmbG9hdCIsImNoYW5uZWxTdGFydFRpbWUiLCJfc3RhcnRSZWNvcmRpbmdGaXJzdEZyYW1lIiwiX2xpc3RlblRvRmlyc3RUaW1lIiwiY2FsbFRpbWVUb0ZpcnN0RnJhbWUiLCJfY2xlYXJUaW1lVG9GaXJzdEZyYW1lTGlzdGVuZXIiLCJfbGlzdGVuRm9yU3RhbGwiLCJvblN0YWxsIiwiX2xpc3RlbkZvckNvbnRpbnVhdGlvbiIsIm9uQ29udGludWF0aW9uIiwiX2NsZWFyUmVidWZmZXJpbmdMaXN0ZW5lciIsInB1c2hUaW1lVG9GaXJzdEZyYW1lIiwicHVzaENoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWUiLCJfdGltZVRvRmlyc3RGcmFtZSIsImR1cmF0aW9uU2luY2VQYWdlTG9hZCIsIl9jaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lIiwiX3ZpZGVvU3RhbGxlZCIsImJ1ZmZlckxlbmd0aCIsImhhc05vdFByb2dyZXNzZWRTaW5jZUxhc3RQcm9ncmVzc0V2ZW50IiwiX2xhc3RQcm9ncmVzcyIsInRpbWVTaW5jZVN0b3AiLCJuZXdSZXNvbHV0aW9uIiwiX3ZpZGVvUmVzb2x1dGlvbiJdLCJzb3VyY2VSb290IjoiIn0=
12570
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtFQUFFO0VBQzVEO0VBQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0VBQUU7RUFDeExsQixHQUFHLEVBQUUsSUFBSWtCLFVBQVUsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0VBQ3pTakIsR0FBRyxFQUFFLElBQUlpQixVQUFVLENBQUMs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Q0E7O1VBRUE7VUFDQTs7Ozs7V0N6QkE7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBLGlDQUFpQyxXQUFXO1dBQzVDO1dBQ0E7Ozs7O1dDUEE7V0FDQTtXQUNBO1dBQ0E7V0FDQSx5Q0FBeUMsd0NBQXdDO1dBQ2pGO1dBQ0E7V0FDQTs7Ozs7V0NQQTtXQUNBO1dBQ0E7V0FDQTtXQUNBOzs7OztXQ0pBOzs7OztXQ0FBO1dBQ0E7V0FDQTtXQUNBLHVEQUF1RCxpQkFBaUI7V0FDeEU7V0FDQSxnREFBZ0QsYUFBYTtXQUM3RDs7Ozs7V0NOQTs7Ozs7V0NBQTs7V0FFQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7O1dBRUE7O1dBRUE7O1dBRUE7O1dBRUE7O1dBRUE7O1dBRUE7O1dBRUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3JCQTtBQUNBO0FBQ0E7O0FBRXlCO0FBQ21CO0FBQ1E7QUFDTDtBQUNRO0FBT3ZDO0FBR2hCLCtEQUFlO0VBQ2J6d0MsR0FBRyxFQUFIQSw0Q0FBRztFQUNIcXhCLFFBQVEsRUFBUkEsMERBQVE7RUFDUm5NLFlBQVksRUFBWkEsOERBQVk7RUFDWjRXLFVBQVUsRUFBVkEsMkRBQVU7RUFDVnhCLGNBQWMsRUFBZEEsK0RBQWNBO0FBQ2hCLENBQUMsRSIsInNvdXJjZXMiOlsid2VicGFjazovL3BoZW5peC93ZWJwYWNrL3VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24iLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2RvbS9BcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZG9tL0Jyb3dzZXJEZXRlY3Rvci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZG9tL0NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2RvbS9HYXJiYWdlQ29sbGVjdG9yTWFuYWdlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZG9tL05ldHdvcmtNb25pdG9yLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9kb20vU3RyZWFtU2V0dXBMaXN0ZW5lci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZWRnZUF1dGgvRWRnZUF1dGhQYXJzZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2VkZ2VBdXRoL0VkZ2VUb2tlbi50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZW52aXJvbm1lbnQvQnVpbGRGZWF0dXJlcy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZW52aXJvbm1lbnQvRmVhdHVyZUVuYWJsZW1lbnQudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2Vudmlyb25tZW50L1BhcmFtZXRlcnMudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xhbmcvRGlzcG9zYWJsZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbGFuZy9EaXNwb3NhYmxlTGlzdC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbGFuZy9OdW1iZXJzLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sYW5nL1N0cmluZ3MudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xvZ2dlci9BcHBlbmRlcnMudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xvZ2dlci9Db25zb2xlQXBwZW5kZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xvZ2dlci9Mb2dnZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xvZ2dlci9Mb2dnZXJEZWZhdWx0cy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbG9nZ2VyL0xvZ2dlckZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xvZ2dlci9Mb2dnaW5nTGV2ZWxNYXBwaW5nLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sb2dnZXIvTG9nZ2luZ1RocmVzaG9sZC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbWV0cmljcy9NZXRyaWNUeXBlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9tZXRyaWNzL01ldHJpY3NDb25maWd1cmF0aW9uLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9tZXRyaWNzL01ldHJpY3NGYWN0b3J5LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9tZXRyaWNzL01ldHJpY3NTZXJ2aWNlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9tZXRyaWNzL01ldHJpY3NUeXBlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9tZXRyaWNzL1RlbGVtZXRyaWNMZXZlbE1hcHBpbmcudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL21ldHJpY3MvVGVsZW1ldHJ5RGVmYXVsdC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcHJvbWlzZS9Qcm9taXNlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9wcm9taXNlL1Byb21pc2VIYW5kbGVyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9ydGMvUGVlckNvbm5lY3Rpb25TZXJ2aWNlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9ydGMvUnRjQ29uZmlndXJhdGlvbk1hbmFnZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3J0Yy9SdGNDb25uZWN0aW9uTW9uaXRvci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcnRjL1J0Y1B1Ymxpc2hNb25pdG9yLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9ydGMvU2RwUGFyc2VyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9ydGMvVmFuaWxsYVBlZXJDb25uZWN0aW9uLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9ydGMvVmFuaWxsYVBlZXJDb25uZWN0aW9uRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcngvUmVhZE9ubHlTdWJqZWN0LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9yeC9TdWJqZWN0LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvRW52aXJvbm1lbnQudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9TREsudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9UZWxlbWV0cnlVcmwudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9hcGkvU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGUudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9jaGFubmVscy9DaGFubmVsLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvY2hhbm5lbHMvQ2hhbm5lbFN0YXRlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvY2hhbm5lbHMvQ2hhbm5lbHMudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9jb250ZXh0L0NoYW5uZWxDb250ZXh0LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvY29udGV4dC9QZWVyQ29ubmVjdGlvbkNvbnRleHQudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9jb250ZXh0L1N0YXRlQ29udGV4dC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2NvbnRleHQvU3RyZWFtVHJhbnNmb3JtQ29udGV4dC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2NvbnRleHQvVG9rZW5Db250ZXh0LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGVmYXVsdHMudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kaXNjb3ZlcnkvQml0cmF0ZU1vZGVNYXBwaW5nLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGlzY292ZXJ5L0JpdHJhdGVTdGF0ZU1hcHBpbmcudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kaXNjb3ZlcnkvRGlzY292ZXJ5LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGlzY292ZXJ5L0Rpc2NvdmVyeVNlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kaXNjb3ZlcnkvRGlzY292ZXJ5VXJpLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGlzY292ZXJ5L0VuZFBvaW50LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvcHVibGlzaC9QdWJsaXNoZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9wdWJsaXNoL1B1Ymxpc2hlckNvbnRleHQudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9wdWJsaXNoL1B1Ymxpc2hlclN0YXRlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvcHVibGlzaC9QdWJsaXNoZXJzLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvcHVibGlzaC9SZWFsVGltZVB1Ymxpc2hlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3N0cmVhbWluZy9DaHVua2VkU3RyZWFtLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvc3RyZWFtaW5nL0NodW5rZWRTdHJlYW1QbGF5YmFja01vZGUudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9zdHJlYW1pbmcvQ2h1bmtlZFN0cmVhbWluZy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3N0cmVhbWluZy9IbHNQbGF5ZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9zdHJlYW1pbmcvTmV0d29ya1N0YXRlcy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3N0cmVhbWluZy9SZWFsVGltZVN0cmVhbS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3N0cmVhbWluZy9TaGFrYVBsYXllci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3N0cmVhbWluZy9TdHJlYW1GYWN0b3J5LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvc3RyZWFtaW5nL1dlYlBsYXllci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3RyYW5zZm9ybWF0aW9uL0VuY29kZWRTdHJlYW1TaW5rLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvdHJhbnNmb3JtYXRpb24vSW5zZXJ0YWJsZVN0cmVhbXMudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay90cmFuc2Zvcm1hdGlvbi9TdHJlYW1UcmFja1RyYW5zZm9ybS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3RyYW5zZm9ybWF0aW9uL1N1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay92ZXJzaW9uL1ZlcnNpb25NYW5hZ2VyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy90ZWxlbWV0cnkvVGVsZW1ldHJ5QXBlbmRlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvdGVsZW1ldHJ5L1RlbGVtZXRyeUNvbmZpZ3VyYXRpb24udHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3RlbGVtZXRyeS9UZWxlbWV0cnlTZXJ2aWNlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy90aW1lL0R1cmF0aW9uLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy90aW1lL0V4cG9uZW50aWFsQmFja29mZi50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvdmlkZW8vRGltZW5zaW9uLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy92aWRlby9TZXNzaW9uVGVsZW1ldHJ5LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy92aWRlby9WaWRlb1RlbGVtZXRyeS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9hcnJheUxpa2VUb0FycmF5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2FycmF5V2l0aEhvbGVzLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2FycmF5V2l0aG91dEhvbGVzLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2Fzc2VydFRoaXNJbml0aWFsaXplZC5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9hc3luY1RvR2VuZXJhdG9yLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2RlZmluZVByb3BlcnR5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2dldFByb3RvdHlwZU9mLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2luaGVyaXRzLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2l0ZXJhYmxlVG9BcnJheS5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pdGVyYWJsZVRvQXJyYXlMaW1pdC5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9ub25JdGVyYWJsZVJlc3QuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvbm9uSXRlcmFibGVTcHJlYWQuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvcG9zc2libGVDb25zdHJ1Y3RvclJldHVybi5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9yZWdlbmVyYXRvclJ1bnRpbWUuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvc2V0UHJvdG90eXBlT2YuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvc2xpY2VkVG9BcnJheS5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy90b0NvbnN1bWFibGVBcnJheS5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy90b1ByaW1pdGl2ZS5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy90b1Byb3BlcnR5S2V5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3R5cGVvZi5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheS5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvcmVnZW5lcmF0b3IvaW5kZXguanMiLCJ3ZWJwYWNrOi8vcGhlbml4L3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL3BoZW5peC93ZWJwYWNrL3J1bnRpbWUvY29tcGF0IGdldCBkZWZhdWx0IGV4cG9ydCIsIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay9ydW50aW1lL2RlZmluZSBwcm9wZXJ0eSBnZXR0ZXJzIiwid2VicGFjazovL3BoZW5peC93ZWJwYWNrL3J1bnRpbWUvZ2V0IGphdmFzY3JpcHQgY2h1bmsgZmlsZW5hbWUiLCJ3ZWJwYWNrOi8vcGhlbml4L3dlYnBhY2svcnVudGltZS9oYXNPd25Qcm9wZXJ0eSBzaG9ydGhhbmQiLCJ3ZWJwYWNrOi8vcGhlbml4L3dlYnBhY2svcnVudGltZS9tYWtlIG5hbWVzcGFjZSBvYmplY3QiLCJ3ZWJwYWNrOi8vcGhlbml4L3dlYnBhY2svcnVudGltZS9wdWJsaWNQYXRoIiwid2VicGFjazovL3BoZW5peC93ZWJwYWNrL3J1bnRpbWUvanNvbnAgY2h1bmsgbG9hZGluZyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2Z1bGwvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoW10sIGZhY3RvcnkpO1xuXHRlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jylcblx0XHRleHBvcnRzW1wicGhlbml4XCJdID0gZmFjdG9yeSgpO1xuXHRlbHNlXG5cdFx0cm9vdFtcInBoZW5peFwiXSA9IGZhY3RvcnkoKTtcbn0pKHNlbGYsICgpID0+IHtcbnJldHVybiAiLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvRGlzcG9zYWJsZSc7XG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi9yeC9TdWJqZWN0JztcbmltcG9ydCBSZWFkT25seVN1YmplY3QgZnJvbSAnLi4vcngvUmVhZE9ubHlTdWJqZWN0JztcbmltcG9ydCBEaXNwb3NhYmxlTGlzdCBmcm9tICcuLi9sYW5nL0Rpc3Bvc2FibGVMaXN0JztcblxuY29uc3QgZGVmYXVsdERvY3VtZW50Rm9jdXNJbnRlcnZhbFRpbWVvdXQgPSAzMDAwO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdCA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUlzRm9yZWdyb3VuZDogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9pc0ZvcmVncm91bmQ6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgX3RpbWVPZkxhc3RUYWJGb2N1c0NoYW5nZTogbnVtYmVyID0gRGF0ZS5ub3coKTtcbiAgcHJpdmF0ZSBfZG9jdW1lbnRGb2N1c0ludGVydmFsOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5faXNGb3JlZ3JvdW5kID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG4gICAgdGhpcy5fcmVhZE9ubHlJc0ZvcmVncm91bmQgPSBuZXcgUmVhZE9ubHlTdWJqZWN0KHRoaXMuX2lzRm9yZWdyb3VuZCk7XG4gICAgdGhpcy5kZXRlY3RUYWJGb2N1c0NoYW5nZSgpO1xuICB9XG5cbiAgZ2V0IGlzRm9yZWdyb3VuZCgpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seUlzRm9yZWdyb3VuZDtcbiAgfVxuXG4gIGdldFRpbWVTaW5jZUxhc3RDaGFuZ2UoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gRGF0ZS5ub3coKSAtIHRoaXMuX3RpbWVPZkxhc3RUYWJGb2N1c0NoYW5nZTtcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBkZXRlY3RUYWJGb2N1c0NoYW5nZSgpOiB2b2lkIHtcbiAgICBsZXQgaGlkZGVuO1xuICAgIGxldCB2aXNpYmlsaXR5Q2hhbmdlO1xuXG4gICAgaWYgKHR5cGVvZiBkb2N1bWVudCAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBEdWUgdG8gdHlwZXNjcmlwdCBub3QgaGF2aW5nIGEgZGVmaW5pdGlvbiBmb3IgJ21zSGlkZGVuJyBvciAnd2Via2l0SGlkZGVuJyB0eXBlc1xuICAgIC8vIFJlcXVpcmVkIHRvIEB0cy1pZ25vcmUgdG8gcHJldmVudCB0eXBlc2NyaXB0IGVycm9yc1xuICAgIC8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudCAqL1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBpZiAodHlwZW9mIGRvY3VtZW50Lm1zSGlkZGVuICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgaGlkZGVuID0gJ21zSGlkZGVuJztcbiAgICAgIHZpc2liaWxpdHlDaGFuZ2UgPSAnbXN2aXNpYmlsaXR5Y2hhbmdlJztcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBkb2N1bWVudC53ZWJraXRIaWRkZW4gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBoaWRkZW4gPSAnd2Via2l0SGlkZGVuJztcbiAgICAgIHZpc2liaWxpdHlDaGFuZ2UgPSAnd2Via2l0dmlzaWJpbGl0eWNoYW5nZSc7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZG9jdW1lbnQuaGlkZGVuICE9PSAndW5kZWZpbmVkJykgeyAvLyBPcGVyYSAxMi4xMCBhbmQgRmlyZWZveCAxOCBhbmQgbGF0ZXIgc3VwcG9ydFxuICAgICAgaGlkZGVuID0gJ2hpZGRlbic7XG4gICAgICB2aXNpYmlsaXR5Q2hhbmdlID0gJ3Zpc2liaWxpdHljaGFuZ2UnO1xuICAgIH1cbiAgICAvKiBlc2xpbnQtZW5hYmxlIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudCAqL1xuXG4gICAgY29uc3QgaGFuZGxlVmlzaWJpbGl0eUNoYW5nZSA9ICgpOiB2b2lkID0+IHtcbiAgICAgIGNvbnN0IGlzRm9yZWdyb3VuZCA9ICFkb2N1bWVudFtoaWRkZW5dO1xuXG4gICAgICB0aGlzLnNldEZvY3VzU3RhdGUoaXNGb3JlZ3JvdW5kKTtcbiAgICB9O1xuXG4gICAgaWYgKHR5cGVvZiBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgZG9jdW1lbnRbaGlkZGVuXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIodmlzaWJpbGl0eUNoYW5nZSwgaGFuZGxlVmlzaWJpbGl0eUNoYW5nZSwgZmFsc2UpO1xuXG4gICAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4ge1xuICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKHZpc2liaWxpdHlDaGFuZ2UsIGhhbmRsZVZpc2liaWxpdHlDaGFuZ2UsIGZhbHNlKTtcbiAgICAgIH0pKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5saXN0ZW5Gb3JEb2N1bWVudEZvY3VzLmNhbGwodGhpcyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBsaXN0ZW5Gb3JEb2N1bWVudEZvY3VzKCk6IHZvaWQge1xuICAgIHRoaXMuX2RvY3VtZW50Rm9jdXNJbnRlcnZhbCA9IHdpbmRvdy5zZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICBjb25zdCBpc0ZvcmVncm91bmQgPSBkb2N1bWVudC5oYXNGb2N1cygpO1xuXG4gICAgICB0aGlzLnNldEZvY3VzU3RhdGUoaXNGb3JlZ3JvdW5kKTtcbiAgICB9LCBkZWZhdWx0RG9jdW1lbnRGb2N1c0ludGVydmFsVGltZW91dCk7XG5cbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2RvY3VtZW50Rm9jdXNJbnRlcnZhbCkge1xuICAgICAgICBjbGVhckludGVydmFsKHRoaXMuX2RvY3VtZW50Rm9jdXNJbnRlcnZhbCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2RvY3VtZW50Rm9jdXNJbnRlcnZhbCA9IG51bGw7XG4gICAgfSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRGb2N1c1N0YXRlKGlzRm9yZWdyb3VuZCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9pc0ZvcmVncm91bmQgPT09IGlzRm9yZWdyb3VuZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2lzRm9yZWdyb3VuZC52YWx1ZSA9IGlzRm9yZWdyb3VuZDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQnJvd3NlckRldGVjdG9yIHtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2Jyb3dzZXJOYW1lQW5kVmVyc2lvblJlZ2V4ID0gLyhNU0lFfCg/IUdlY2tvLispRmlyZWZveHwoPyFBcHBsZVdlYktpdC4rQ2hyb21lLispU2FmYXJpfCg/IUFwcGxlV2ViS2l0LispQ2hyb21lfEFwcGxlV2ViS2l0KD8hLitDaHJvbWV8LitTYWZhcmkpfEdlY2tvKD8hLitGaXJlZm94KSkoPzogfFxcLykoW1xcZC5hcHJlXSspL2c7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9icm93c2VyTmFtZUFuZFZlcnNpb24gPSBCcm93c2VyRGV0ZWN0b3IucGFyc2VCcm93c2VyTmFtZUFuZFZlcnNpb24oKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2Jyb3dzZXJOYW1lID0gQnJvd3NlckRldGVjdG9yLnBhcnNlQnJvd3Nlck5hbWUoKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2Jyb3dzZXJNYWpvclZlcnNpb24gPSBCcm93c2VyRGV0ZWN0b3IucGFyc2VCcm93c2VyTWFqb3JWZXJzaW9uKCk7XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzTW9iaWxlID0gKC9BbmRyb2lkfGlQaG9uZXxpUGFkfGlQb2R8QmxhY2tCZXJyeXxPcGVyYSBNaW5pL2kpLnRlc3QobmF2aWdhdG9yPy51c2VyQWdlbnQpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNBbmRyb2lkID0gKC9BbmRyb2lkL2kpLnRlc3QobmF2aWdhdG9yPy51c2VyQWdlbnQpO1xuXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc0Nocm9tZTY5ID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uaW5jbHVkZXMoJ0Nocm9tZS82OS4nKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzQ2hyb21lNzAgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5pbmNsdWRlcygnQ2hyb21lLzcwLicpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNDaHJvbWU3MSA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNzEuJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc0Nocm9tZTcyID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uaW5jbHVkZXMoJ0Nocm9tZS83Mi4nKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzQ2hyb21lNzQgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5pbmNsdWRlcygnQ2hyb21lLzc0LicpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNDaHJvbWU3NSA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNzUuJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc0Nocm9tZTc2ID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uaW5jbHVkZXMoJ0Nocm9tZS83Ni4nKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzQ2hyb21lNzcgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5pbmNsdWRlcygnQ2hyb21lLzc3LicpO1xuXG4gIHN0YXRpYyBnZXQgYnJvd3Nlck5hbWVBbmRWZXJzaW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uO1xuICB9XG5cbiAgc3RhdGljIGdldCBicm93c2VyTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9icm93c2VyTmFtZTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYnJvd3Nlck1ham9yVmVyc2lvbigpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9icm93c2VyTWFqb3JWZXJzaW9uO1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0FuZHJvaWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNBbmRyb2lkO1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0Nocm9tZTY5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNjk7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzQ2hyb21lNzAoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNDaHJvbWU3MDtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNDaHJvbWU3MSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0Nocm9tZTcxO1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0Nocm9tZTcyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzI7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzQ2hyb21lNzQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNDaHJvbWU3NDtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNDaHJvbWU3NSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0Nocm9tZTc1O1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0Nocm9tZTc2KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzY7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzQ2hyb21lNzcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNDaHJvbWU3NztcbiAgfVxuXG4gIHN0YXRpYyBpc01vYmlsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc01vYmlsZTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIHBhcnNlQnJvd3Nlck5hbWVBbmRWZXJzaW9uKCk6IHN0cmluZyB7XG4gICAgaWYgKCFuYXZpZ2F0b3IgfHwgIW5hdmlnYXRvci51c2VyQWdlbnQpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBjb25zdCBicm93c2VyTmFtZUFuZFZlcnNpb24gPSBuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uUmVnZXgpO1xuXG4gICAgaWYgKGJyb3dzZXJOYW1lQW5kVmVyc2lvbiAmJiBicm93c2VyTmFtZUFuZFZlcnNpb25bMF0pIHtcbiAgICAgIHJldHVybiBicm93c2VyTmFtZUFuZFZlcnNpb25bMF07XG4gICAgfVxuXG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5wYXJzZUJyb3dzZXJOYW1lQW5kVmVyc2lvbkZvcklFKCk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBwYXJzZUJyb3dzZXJOYW1lKCk6IHN0cmluZyB7XG4gICAgaWYgKCFCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbikge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGNvbnN0IGJyb3dzZXJOYW1lTGlzdCA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLnNwbGl0KCcvJyk7XG5cbiAgICBpZiAoIWJyb3dzZXJOYW1lTGlzdCB8fCAhYnJvd3Nlck5hbWVMaXN0WzBdKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJyb3dzZXJOYW1lTGlzdFswXTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIHBhcnNlQnJvd3Nlck1ham9yVmVyc2lvbigpOiBudW1iZXIge1xuICAgIGlmICghQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24pIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIGNvbnN0IGJyb3dzZXJWZXJzaW9uTGlzdCA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLnNwbGl0KCcvJyk7XG5cbiAgICBpZiAoIWJyb3dzZXJWZXJzaW9uTGlzdCB8fCAhYnJvd3NlclZlcnNpb25MaXN0WzFdKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICBjb25zdCBmdWxsVmVyc2lvbiA9IGJyb3dzZXJWZXJzaW9uTGlzdFsxXTtcblxuICAgIGlmICghZnVsbFZlcnNpb24pIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIHJldHVybiBOdW1iZXIoZnVsbFZlcnNpb24uc3BsaXQoJy4nKVswXSkgfHwgMDtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIHBhcnNlQnJvd3Nlck5hbWVBbmRWZXJzaW9uRm9ySUUoKTogc3RyaW5nIHtcbiAgICBpZiAoIW5hdmlnYXRvciB8fCAhbmF2aWdhdG9yLnVzZXJBZ2VudCkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGNvbnN0IHVzZXJBZ2VudCA9IG5hdmlnYXRvci51c2VyQWdlbnQ7XG4gICAgY29uc3QgbXNpZSA9IHVzZXJBZ2VudC5pbmRleE9mKCdNU0lFICcpO1xuXG4gICAgaWYgKG1zaWUgPiAwKSB7XG4gICAgICAvLyBJRSAxMCBvciBvbGRlciA9PiByZXR1cm4gdmVyc2lvbiBudW1iZXJcbiAgICAgIHJldHVybiBgSUUvJHtwYXJzZUludCh1c2VyQWdlbnQuc3Vic3RyaW5nKG1zaWUgKyA1LCB1c2VyQWdlbnQuaW5kZXhPZignLicsIG1zaWUpKSwgMTApfWA7XG4gICAgfVxuXG4gICAgY29uc3QgdHJpZGVudCA9IHVzZXJBZ2VudC5pbmRleE9mKCdUcmlkZW50LycpO1xuXG4gICAgaWYgKHRyaWRlbnQgPiAwKSB7XG4gICAgICAvLyBJRSAxMSA9PiByZXR1cm4gdmVyc2lvbiBudW1iZXJcbiAgICAgIGNvbnN0IHZlcnNpb24gPSB1c2VyQWdlbnQuaW5kZXhPZigncnY6Jyk7XG5cbiAgICAgIHJldHVybiBgSUUvJHtwYXJzZUludCh1c2VyQWdlbnQuc3Vic3RyaW5nKHZlcnNpb24gKyAzLCB1c2VyQWdlbnQuaW5kZXhPZignLicsIHZlcnNpb24pKSwgMTApfWA7XG4gICAgfVxuXG4gICAgcmV0dXJuICcnO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgVGVsZW1ldHJ5RGVmYXVsdCBmcm9tICcuLi9tZXRyaWNzL1RlbGVtZXRyeURlZmF1bHQnO1xuaW1wb3J0IFRlbGVtZXRyeUxldmVsTWFwcGluZyBmcm9tICcuLi9tZXRyaWNzL1RlbGVtZXRyaWNMZXZlbE1hcHBpbmcnO1xuaW1wb3J0IExvZ2dpbmdMZXZlbE1hcHBpbmcgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dpbmdMZXZlbE1hcHBpbmcnO1xuaW1wb3J0IExvZ2dlckRlZmF1bHRzIGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJEZWZhdWx0cyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIge1xuICBnZXRTdHJpbmdWYWx1ZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnJlYWRDb25maWd1cmF0aW9uUGFyYW1ldGVyVmFsdWUobmFtZSkgfHxcbiAgICAgIHRoaXMucmVhZENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJVUklWYWx1ZShgJHtuYW1lfS11cmktcGFyYW1ldGVyLW5hbWVgKSB8fFxuICAgICAgdGhpcy5kZWZhdWx0U3RyaW5nVmFsdWVbbmFtZV07XG4gIH1cblxuICBnZXRCb29sZWFuVmFsdWUobmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLnJlYWRDb25maWd1cmF0aW9uUGFyYW1ldGVyVmFsdWUobmFtZSk7XG5cbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHJldHVybiB2YWx1ZSA9PT0gJ3RydWUnIHx8IHZhbHVlID09PSAnMScgfHwgdmFsdWUgPT09ICdPbic7XG4gICAgfVxuXG4gICAgY29uc3QgdmFsdWVGcm9tVXJpID0gdGhpcy5yZWFkQ29uZmlndXJhdGlvblBhcmFtZXRlclVSSVZhbHVlKGAke25hbWV9LXVyaS1wYXJhbWV0ZXItbmFtZWApO1xuXG4gICAgaWYgKHZhbHVlRnJvbVVyaSkge1xuICAgICAgcmV0dXJuIHZhbHVlRnJvbVVyaSA9PT0gJ3RydWUnIHx8IHZhbHVlRnJvbVVyaSA9PT0gJzEnIHx8IHZhbHVlRnJvbVVyaSA9PT0gJ09uJztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5kZWZhdWx0Qm9vbGVhblZhbHVlW25hbWVdID09PSB0cnVlO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgZGVmYXVsdFN0cmluZ1ZhbHVlKCk6IHsgW25hbWU6IHN0cmluZ106IHN0cmluZ30ge1xuICAgIHJldHVybiB7XG4gICAgICAncGhlbml4LW1ldHJpY3MtbGV2ZWwnOiBUZWxlbWV0cnlMZXZlbE1hcHBpbmcuY29udmVydFRlbGVtZXRyeUxldmVsVG9UZWxlbWV0cnlMZXZlbFR5cGUoVGVsZW1ldHJ5RGVmYXVsdC5kZWZhdWx0VGVsZW1ldHJ5TGV2ZWwpLFxuICAgICAgJ3BoZW5peC1sb2dnaW5nLWxldmVsJzogTG9nZ2luZ0xldmVsTWFwcGluZy5jb252ZXJ0TG9nZ2luZ0xldmVsVG9Mb2dnaW5nTGV2ZWxUeXBlKExvZ2dlckRlZmF1bHRzLmRlZmF1bHRMb2dnaW5nTGV2ZWwpLFxuICAgICAgJ3BoZW5peC1jb25zb2xlLWxvZ2dpbmctbGV2ZWwnOiBMb2dnaW5nTGV2ZWxNYXBwaW5nLmNvbnZlcnRMb2dnaW5nTGV2ZWxUb0xvZ2dpbmdMZXZlbFR5cGUoTG9nZ2VyRGVmYXVsdHMuZGVmYXVsdENvbnNvbGVMb2dnaW5nTGV2ZWwpLFxuICAgICAgJ3BoZW5peC10ZWxlbWV0cnktbG9nZ2luZy1sZXZlbCc6IExvZ2dpbmdMZXZlbE1hcHBpbmcuY29udmVydExvZ2dpbmdMZXZlbFRvTG9nZ2luZ0xldmVsVHlwZShMb2dnZXJEZWZhdWx0cy5kZWZhdWx0VGVsZW1ldHJ5TG9nZ2luZ0xldmVsKSxcbiAgICAgICdwaGVuaXgtY2hhbm5lbC10b2tlbic6ICcnLFxuICAgICAgJ3BoZW5peC11cmknOiAnJyxcbiAgICAgICdwaGVuaXgtYmFzZS11cmknOiAnJ1xuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGdldCBkZWZhdWx0Qm9vbGVhblZhbHVlKCk6IHsgW25hbWU6IHN0cmluZ106IGJvb2xlYW4gfSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICdwaGVuaXgtYXV0b21hdGljYWxseS1yZXRyeS1vbi1mYWlsdXJlJzogdHJ1ZSxcbiAgICAgICdwaGVuaXgtYXV0b21hdGljYWxseS1yZWNvbm5lY3QtcGVlci1jb25uZWN0aW9uJzogdHJ1ZSxcbiAgICAgICdwaGVuaXgtZm9yY2UtZ2FyYmFnZS1jb2xsZWN0aW9uLW9uLXJlc3RhcnQnOiB0cnVlLFxuICAgICAgJ3BoZW5peC1za2lwLWdhcmJhZ2UtY29sbGVjdGlvbi1vbi1tb2JpbGUtZGV2aWNlcyc6IHRydWVcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkQ29uZmlndXJhdGlvblBhcmFtZXRlclZhbHVlKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgbWV0YVZhbHVlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgbWV0YVtuYW1lPScke25hbWV9J11gKTtcblxuICAgIGlmICghbWV0YVZhbHVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdmFsdWUgPSBtZXRhVmFsdWUuZ2V0QXR0cmlidXRlKCd2YWx1ZScpO1xuXG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJVUklWYWx1ZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IHZhbHVlVVJJUGFyYW1ldGVyTmFtZSA9IHRoaXMucmVhZENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJWYWx1ZShuYW1lKTtcblxuICAgIGlmICghdmFsdWVVUklQYXJhbWV0ZXJOYW1lKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdmFsdWUgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKGxvY2F0aW9uLnNlYXJjaCkuZ2V0KHZhbHVlVVJJUGFyYW1ldGVyTmFtZSkgfHwgdW5kZWZpbmVkO1xuXG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IEZlYXR1cmVFbmFibGVtZW50IGZyb20gJy4uL2Vudmlyb25tZW50L0ZlYXR1cmVFbmFibGVtZW50JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgR2FyYmFnZUNvbGxlY3Rvck1hbmFnZXIge1xuICBzdGF0aWMgZm9yY2VHYXJiYWdlQ29sbGVjdGlvbigpOiB2b2lkIHtcbiAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQuaXNGb3JjZUNocm9tZUdhcmJhZ2VDb2xsZWN0aW9uU3VwcG9ydGVkKSB7XG4gICAgICB0aGlzLmZvcmNlQ2hyb21lR2FyYmFnZUNvbGxlY3Rpb24oKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBmb3JjZUNocm9tZUdhcmJhZ2VDb2xsZWN0aW9uKCk6IHZvaWQge1xuICAgIGlmIChGZWF0dXJlRW5hYmxlbWVudC5pc1F1ZXVlTWljcm90YXNrU3VwcG9ydGVkKSB7XG4gICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgIHRoaXMub3ZlcmxvYWRNZW1vcnlUb0ludm9rZUdhcmJhZ2VDb2xsZWN0aW9uKCk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMub3ZlcmxvYWRNZW1vcnlUb0ludm9rZUdhcmJhZ2VDb2xsZWN0aW9uKCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBvdmVybG9hZE1lbW9yeVRvSW52b2tlR2FyYmFnZUNvbGxlY3Rpb24oKTogdm9pZCB7XG4gICAgbGV0IGltZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpO1xuXG4gICAgaW1nLnNyYyA9IHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKG5ldyBCbG9iKFtuZXcgQXJyYXlCdWZmZXIoMTBlKzcpXSkpOyAvLyAxMDBNYiBvciBsZXNzIG9yIG1vcmUgZGVwZW5kaW5nIG9uIGFzIHlvdSB3aXNoIHRvIGZvcmNlL2ludm9rZSBHQyBjeWNsZSBydW5cbiAgICBpbWcub25lcnJvciA9IGZ1bmN0aW9uKCkge1xuICAgICAgd2luZG93LlVSTC5yZXZva2VPYmplY3RVUkwodGhpcy5zcmMpO1xuXG4gICAgICBpbWcgPSBudWxsO1xuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignR2FyYmFnZUNvbGxlY3Rvck1hbmFnZXIgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0lEaXNwb3NhYmxlJztcbmltcG9ydCBEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvRGlzcG9zYWJsZSc7XG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi9yeC9TdWJqZWN0JztcbmltcG9ydCBEaXNwb3NhYmxlTGlzdCBmcm9tICcuLi9sYW5nL0Rpc3Bvc2FibGVMaXN0JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTmV0d29ya01vbml0b3IgaW1wbGVtZW50cyBJRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdCA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9pc1N1cHBvcnRlZCA9IG5hdmlnYXRvciAmJiBuYXZpZ2F0b3JbJ2Nvbm5lY3Rpb24nXTtcbiAgcHJpdmF0ZSByZWFkb25seSBfcnR0OiBTdWJqZWN0PG51bWJlcj4gPSBuZXcgU3ViamVjdCh1bmRlZmluZWQpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9lZmZlY3RpdmVUeXBlOiBTdWJqZWN0PHN0cmluZz4gPSBuZXcgU3ViamVjdCh1bmRlZmluZWQpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9kb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eTogU3ViamVjdDxudW1iZXI+ID0gbmV3IFN1YmplY3QodW5kZWZpbmVkKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBpZiAoIXRoaXMuaXNTdXBwb3J0ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnNldHVwTmV0d29ya0NoYW5nZUxpc3RlbmVycygpO1xuICAgIHRoaXMudXBkYXRlU3RhdGlzdGljcygpO1xuICB9XG5cbiAgZ2V0IGlzU3VwcG9ydGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pc1N1cHBvcnRlZDtcbiAgfVxuXG4gIGdldCBydHQoKTogU3ViamVjdDxudW1iZXI+IHtcbiAgICByZXR1cm4gdGhpcy5fcnR0O1xuICB9XG5cbiAgZ2V0IGVmZmVjdGl2ZVR5cGUoKTogU3ViamVjdDxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5fZWZmZWN0aXZlVHlwZTtcbiAgfVxuXG4gIGdldCBkb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eSgpOiBTdWJqZWN0PG51bWJlcj4ge1xuICAgIHJldHVybiB0aGlzLl9kb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eTtcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXREb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eSgpOiBudW1iZXIge1xuICAgIGlmICghdGhpcy5pc1N1cHBvcnRlZCkge1xuICAgICAgcmV0dXJuIC0xO1xuICAgIH1cblxuICAgIHJldHVybiBuYXZpZ2F0b3JbJ2Nvbm5lY3Rpb24nXS5kb3dubGluayB8fCBuYXZpZ2F0b3JbJ2Nvbm5lY3Rpb24nXS5kb3dubGlua01heDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RWZmZWN0aXZlVHlwZSgpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5pc1N1cHBvcnRlZCkge1xuICAgICAgcmV0dXJuICdVbmtub3duJztcbiAgICB9XG5cbiAgICByZXR1cm4gbmF2aWdhdG9yWydjb25uZWN0aW9uJ10uZWZmZWN0aXZlVHlwZSB8fCBuYXZpZ2F0b3JbJ2Nvbm5lY3Rpb24nXS50eXBlO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRSb3VuZFRyaXBUaW1lKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIG5hdmlnYXRvclsnY29ubmVjdGlvbiddLnJ0dDtcbiAgfVxuXG4gIHByaXZhdGUgc2V0dXBOZXR3b3JrQ2hhbmdlTGlzdGVuZXJzKCk6IHZvaWQge1xuICAgIGNvbnN0IGxpc3RlbmVyID0gKCk6IHZvaWQgPT4ge1xuICAgICAgdGhpcy51cGRhdGVTdGF0aXN0aWNzKCk7XG4gICAgfTtcblxuICAgIG5hdmlnYXRvclsnY29ubmVjdGlvbiddLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGxpc3RlbmVyKTtcblxuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZChuZXcgRGlzcG9zYWJsZSgoKSA9PiB7XG4gICAgICBuYXZpZ2F0b3JbJ2Nvbm5lY3Rpb24nXS5yZW1vdmVFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBsaXN0ZW5lcik7XG4gICAgfSkpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVTdGF0aXN0aWNzKCk6IHZvaWQge1xuICAgIHRoaXMuX3J0dC52YWx1ZSA9IHRoaXMuZ2V0Um91bmRUcmlwVGltZSgpO1xuICAgIHRoaXMuX2VmZmVjdGl2ZVR5cGUudmFsdWUgPSB0aGlzLmdldEVmZmVjdGl2ZVR5cGUoKTtcbiAgICB0aGlzLl9kb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eS52YWx1ZSA9IHRoaXMuZ2V0RG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkoKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IE1ldHJpY3NUeXBlIGZyb20gJy4uL21ldHJpY3MvTWV0cmljc1R5cGUnO1xuaW1wb3J0IE1ldHJpY1R5cGUgZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNUeXBlJztcbmltcG9ydCBEdXJhdGlvbnMgZnJvbSAnLi4vdGltZS9EdXJhdGlvbic7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IFNESyBmcm9tICcuLi9zZGsvU0RLJztcbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcblxuZXhwb3J0IGNsYXNzIFN0cmVhbVNldHVwTGlzdGVuZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignU3RyZWFtU2V0dXBMaXN0ZW5lcicpO1xuICBwcml2YXRlIHJlYWRvbmx5IG1ldHJpY3NTZXJ2aWNlID0gU0RLLm1ldHJpY3NTZXJ2aWNlO1xuICBwcml2YXRlIHJlYWRvbmx5IF9wYWdlTG9hZFRpbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfc3RhcnRUaW1lOiBudW1iZXI7XG4gIHByaXZhdGUgX21ldHJpY1N1Ym1pdHRlZCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKHBhZ2VMb2FkVGltZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICB0aGlzLl9wYWdlTG9hZFRpbWUgPSBwYWdlTG9hZFRpbWU7XG4gIH1cblxuICBzdWNjZXNzKHN0cmVhbUlkKTogdm9pZCB7XG4gICAgdGhpcy5yZWNvcmRTdHJlYW1NZXRyaWMoTWV0cmljc1R5cGUuU2V0dXBDb21wbGV0ZWQsIHN0cmVhbUlkKTtcbiAgfVxuXG4gIGZhaWwoKTogdm9pZCB7XG4gICAgdGhpcy5yZWNvcmRTdHJlYW1NZXRyaWMoTWV0cmljc1R5cGUuU2V0dXBGYWlsZWQpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWNvcmRTdHJlYW1NZXRyaWMobWV0cmljVHlwZTogTWV0cmljc1R5cGUsIHN0cmVhbUlkPzogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX21ldHJpY1N1Ym1pdHRlZCkge1xuICAgICAgcmV0dXJuIDtcbiAgICB9XG5cbiAgICB0aGlzLl9tZXRyaWNTdWJtaXR0ZWQgPSB0cnVlO1xuXG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBzZXR1cFRpbWUgPSBub3cgLSB0aGlzLl9zdGFydFRpbWU7XG4gICAgY29uc3QgbWV0cmljTmFtZSA9IG5ldyBNZXRyaWNUeXBlKG1ldHJpY1R5cGUpLmdldE5hbWUoKTtcblxuICAgIHRoaXMubWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlLFxuICAgICAgcnVudGltZTogKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgdmFsdWU6IHt1aW50NjQ6IHNldHVwVGltZX0sXG4gICAgICBzdHJlYW1JZFxuICAgIH0pO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAnWyVzXSBbJXNdIFN0cmVhbSBtZXRyaWMgWyVzXSBpbiBbJXNdJyxcbiAgICAgIG5ldyBEdXJhdGlvbnMobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKS50b0lzb1N0cmluZygpLFxuICAgICAgc3RyZWFtSWQsXG4gICAgICBtZXRyaWNOYW1lLFxuICAgICAgbmV3IER1cmF0aW9ucyhzZXR1cFRpbWUpLnRvSXNvU3RyaW5nKClcbiAgICApO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IEVkZ2VUb2tlbiBmcm9tICcuL0VkZ2VUb2tlbic7XG5pbXBvcnQge0VuY29kZWRFZGdlVG9rZW59IGZyb20gJy4vRW5jb2RlZEVkZ2VUb2tlbic7XG5cbmNvbnN0IGVkZ2VBdXRoVG9rZW5QcmVmaXggPSAnRElHRVNUOic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVkZ2VBdXRoUGFyc2VyIHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdFZGdlQXV0aFBhcnNlcicpO1xuXG4gIHN0YXRpYyBwYXJzZVRva2VuKHRva2VuOiBFbmNvZGVkRWRnZVRva2VuKTogRWRnZVRva2VuIHtcbiAgICBpZiAoIXRoaXMuaXNFbmNvZGVkRWRnZVRva2VuVmFsaWQodG9rZW4pKSB7XG4gICAgICBFZGdlQXV0aFBhcnNlci5fbG9nZ2VyLmVycm9yKCdUb2tlbiBpcyBub3QgdmFsaWQgWyVzXScsIHRva2VuKTtcblxuICAgICAgcmV0dXJuIG5ldyBFZGdlVG9rZW4obnVsbCk7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGRlY29kZWRUb2tlbiA9IGF0b2IodG9rZW4uc3Vic3RyKGVkZ2VBdXRoVG9rZW5QcmVmaXgubGVuZ3RoKSk7XG4gICAgICBjb25zdCBlZGdlVG9rZW4gPSBKU09OLnBhcnNlKGRlY29kZWRUb2tlbik7XG5cbiAgICAgIGVkZ2VUb2tlbi50b2tlbiA9IEpTT04ucGFyc2UoZWRnZVRva2VuLnRva2VuKTtcblxuICAgICAgcmV0dXJuIG5ldyBFZGdlVG9rZW4oZWRnZVRva2VuKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBFZGdlQXV0aFBhcnNlci5fbG9nZ2VyLmVycm9yKCdDYW5ub3QgcGFyc2UgdG9rZW4gdmFsdWUnLCBlKTtcblxuICAgICAgcmV0dXJuIG5ldyBFZGdlVG9rZW4obnVsbCk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGlzRW5jb2RlZEVkZ2VUb2tlblZhbGlkKHRva2VuOiBFbmNvZGVkRWRnZVRva2VuKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdG9rZW4gJiYgdG9rZW4uc3RhcnRzV2l0aChlZGdlQXV0aFRva2VuUHJlZml4KTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW50ZXJmYWNlIElUb2tlbiB7XG4gIHVyaTogVVJMIHwgbnVsbDtcbiAgY2FwYWJpbGl0aWVzOiBzdHJpbmdbXTtcbn1cblxuaW50ZXJmYWNlIElFZGdlVG9rZW4ge1xuICBhcHBsaWNhdGlvbklkOiBzdHJpbmc7XG4gIHRva2VuOiBJVG9rZW47XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVkZ2VUb2tlbiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2FwcGxpY2F0aW9uSWQ6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfdG9rZW46IElUb2tlbjtcblxuICBjb25zdHJ1Y3RvcihlZGdlVG9rZW46IElFZGdlVG9rZW4pIHtcbiAgICB0aGlzLl9hcHBsaWNhdGlvbklkID0gZWRnZVRva2VuPy5hcHBsaWNhdGlvbklkIHx8ICcnO1xuICAgIHRoaXMuX3Rva2VuID0ge1xuICAgICAgdXJpOiBlZGdlVG9rZW4/LnRva2VuPy51cmkgPyBuZXcgVVJMKGVkZ2VUb2tlbi50b2tlbi51cmkpIDogbnVsbCxcbiAgICAgIGNhcGFiaWxpdGllczogZWRnZVRva2VuPy50b2tlbj8uY2FwYWJpbGl0aWVzIHx8IFtdXG4gICAgfTtcbiAgfVxuXG4gIGdldCB1cmkoKTogVVJMIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3Rva2VuLnVyaTtcbiAgfVxuXG4gIGdldCBjYXBhYmlsaXRpZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLl90b2tlbi5jYXBhYmlsaXRpZXM7XG4gIH1cblxuICBnZXQgdGVuYW5jeSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9hcHBsaWNhdGlvbklkO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0xvZ2dpbmdMZXZlbFR5cGV9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXInO1xuaW1wb3J0IHtUZWxlbWV0cnlMZXZlbFR5cGV9IGZyb20gJy4uL21ldHJpY3MvTWV0cmljc0NvbmZpZ3VyYXRpb24nO1xuXG5kZWNsYXJlIGNvbnN0IF9fRkVBVFVSRVNfXzoge1xuICBzZW5kTG9jYWxDYW5kaWRhdGVzOiBib29sZWFuO1xuICBzZW5kTG9nczogTG9nZ2luZ0xldmVsVHlwZTtcbiAgc2VuZE1ldHJpY3M6IFRlbGVtZXRyeUxldmVsVHlwZTtcbiAgbG9nVG9Db25zb2xlOiBMb2dnaW5nTGV2ZWxUeXBlO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQnVpbGRGZWF0dXJlcyB7XG4gIHByaXZhdGUgc3RhdGljIF9zZW5kTG9jYWxDYW5kaWRhdGVzOiBib29sZWFuO1xuICBwcml2YXRlIHN0YXRpYyBfc2VuZExvZ3M6IExvZ2dpbmdMZXZlbFR5cGU7XG4gIHByaXZhdGUgc3RhdGljIF9zZW5kTWV0cmljczogVGVsZW1ldHJ5TGV2ZWxUeXBlO1xuICBwcml2YXRlIHN0YXRpYyBfbG9nVG9Db25zb2xlOiBMb2dnaW5nTGV2ZWxUeXBlO1xuXG4gIHN0YXRpYyBnZXQgc2VuZExvY2FsQ2FuZGlkYXRlcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fc2VuZExvY2FsQ2FuZGlkYXRlcztcbiAgfVxuXG4gIHN0YXRpYyBnZXQgc2VuZExvZ3MoKTogTG9nZ2luZ0xldmVsVHlwZSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbmRMb2dzO1xuICB9XG5cbiAgc3RhdGljIGdldCBzZW5kTWV0cmljcygpOiBUZWxlbWV0cnlMZXZlbFR5cGUge1xuICAgIHJldHVybiB0aGlzLl9zZW5kTWV0cmljcztcbiAgfVxuXG4gIHN0YXRpYyBnZXQgbG9nVG9Db25zb2xlKCk6IExvZ2dpbmdMZXZlbFR5cGUge1xuICAgIHJldHVybiB0aGlzLl9sb2dUb0NvbnNvbGU7XG4gIH1cblxuICBzdGF0aWMgYXBwbHlGZWF0dXJlcygpOiB2b2lkIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZmVhdHVyZXMgPSBfX0ZFQVRVUkVTX187XG5cbiAgICAgIHRoaXMuX3NlbmRMb2NhbENhbmRpZGF0ZXMgPSAnc2VuZExvY2FsQ2FuZGlkYXRlcycgaW4gZmVhdHVyZXMgPyBmZWF0dXJlcy5zZW5kTG9jYWxDYW5kaWRhdGVzIDogdHJ1ZTtcbiAgICAgIHRoaXMuX3NlbmRMb2dzID0gJ3NlbmRMb2dzJyBpbiBmZWF0dXJlcyA/IGZlYXR1cmVzLnNlbmRMb2dzIDogJ0FsbCc7XG4gICAgICB0aGlzLl9zZW5kTWV0cmljcyA9ICdzZW5kTWV0cmljcycgaW4gZmVhdHVyZXMgPyBmZWF0dXJlcy5zZW5kTWV0cmljcyA6ICdBbGwnO1xuICAgICAgdGhpcy5fbG9nVG9Db25zb2xlID0gJ2xvZ1RvQ29uc29sZScgaW4gZmVhdHVyZXMgPyBmZWF0dXJlcy5sb2dUb0NvbnNvbGUgOiAnQWxsJztcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLl9zZW5kTG9jYWxDYW5kaWRhdGVzID0gdHJ1ZTtcbiAgICAgIHRoaXMuX3NlbmRMb2dzID0gJ0FsbCc7XG4gICAgICB0aGlzLl9zZW5kTWV0cmljcyA9ICdBbGwnO1xuICAgICAgdGhpcy5fbG9nVG9Db25zb2xlID0gJ0FsbCc7XG4gICAgfVxuICB9XG59XG5cbkJ1aWxkRmVhdHVyZXMuYXBwbHlGZWF0dXJlcygpOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IEJyb3dzZXJEZXRlY3RvciBmcm9tICcuLi9kb20vQnJvd3NlckRldGVjdG9yJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRmVhdHVyZUVuYWJsZW1lbnQge1xuICBzdGF0aWMgZ2V0IGNsaWVudE9mZmVyRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgLy8gQ2xpZW50IG9mZmVyIHdvcmtmbG93IGRvZXMgbm90IHdvcmsgY29ycmVjdGx5IGluIHRoZSBmb2xsb3dpbmcgYnJvd3NlcnNcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmlzQ2hyb21lNzQgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5pc0Nocm9tZTc1IHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuaXNDaHJvbWU3NiB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmlzQ2hyb21lNzc7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGFkZFRyYW5jZWl2ZXJEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICAvLyBDaHJvbWUgNjksIDcwLCA3MSwgNzIgZXhwb3NlcyBgYWRkVHJhbmNlaXZlcmAgYnV0IGl0IGRvZXMgbm90IHdvcmsgY29ycmVjdGx5XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5pc0Nocm9tZTY5IHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuaXNDaHJvbWU3MCB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmlzQ2hyb21lNzEgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5pc0Nocm9tZTcyO1xuICB9XG5cbiAgc3RhdGljIGdldCBnZXRTdGF0c1Byb21pc2VCYXNlZERpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdDaHJvbWUnICYmIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTWFqb3JWZXJzaW9uIDw9IDY2O1xuICB9XG5cbiAgc3RhdGljIGdldCBnZXRDdXJyZW50T2ZmZXJEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnQ2hyb21lJyAmJiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck1ham9yVmVyc2lvbiA8PSA2OSB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnRmlyZWZveCcgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJNYWpvclZlcnNpb24gPD0gNTY7XG4gIH1cblxuICBzdGF0aWMgZ2V0IG9uVHJhY2tEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnQ2hyb21lJyAmJiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck1ham9yVmVyc2lvbiA8PSA2MyB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnRmlyZWZveCcgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJNYWpvclZlcnNpb24gPD0gNTI7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHdlYmtpdFJUQ1BlZXJDb25uZWN0aW9uRW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnQ2hyb21lJyAmJiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck1ham9yVmVyc2lvbiA8PSA1NTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgcHJvbWlzZUJhc2VkUENNZXRob2RzRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0ZpcmVmb3gnICYmIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTWFqb3JWZXJzaW9uIDw9IDUyO1xuICB9XG5cbiAgc3RhdGljIGdldCBzaG91bGRVc2VOYXRpdmVIbHMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ1NhZmFyaScgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ1NhbXN1bmdCcm93c2VyJztcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNQcmVjYWNoaW5nRW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lICE9PSAnSUUnO1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0ZvcmNlQ2hyb21lR2FyYmFnZUNvbGxlY3Rpb25TdXBwb3J0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0Nocm9tZScgJiYgdHlwZW9mIGRvY3VtZW50Py5jcmVhdGVFbGVtZW50ID09PSAnZnVuY3Rpb24nO1xuICB9XG5cbiAgc3RhdGljIGdldCBpc1F1ZXVlTWljcm90YXNrU3VwcG9ydGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdDaHJvbWUnICYmIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTWFqb3JWZXJzaW9uID49IDcxIHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdGaXJlZm94JyAmJiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck1ham9yVmVyc2lvbiA+PSA2OSB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnU2FmYXJpJztcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNNb2JpbGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5pc01vYmlsZSgpO1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0luc2VydGFibGVTdHJlYW1zU3VwcG9ydGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhKHR5cGVvZiBNZWRpYVN0cmVhbVRyYWNrUHJvY2Vzc29yID09PSAndW5kZWZpbmVkJyB8fFxuICAgICAgdHlwZW9mIE1lZGlhU3RyZWFtVHJhY2tHZW5lcmF0b3IgPT09ICd1bmRlZmluZWQnKTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNFbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXNTdXBwb3J0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHR5cGVvZiBSVENSdHBSZWNlaXZlciAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIFJUQ1J0cFJlY2VpdmVyLnByb3RvdHlwZS5jcmVhdGVFbmNvZGVkU3RyZWFtcyAhPT0gJ3VuZGVmaW5lZCc7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzUlRDUnRwU2NyaXB0VHJhbnNmb3JtU3VwcG9ydGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0eXBlb2YgUlRDUnRwU2NyaXB0VHJhbnNmb3JtICE9PSAndW5kZWZpbmVkJztcbiAgfVxuXG4gIHN0YXRpYyBnZXQgZXJyb3JTdGFja0Fsc29IYXNFcnJvck1lc3NhZ2UoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSAhPT0gJ0ZpcmVmb3gnICYmIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSAhPT0gJ1NhZmFyaSc7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmRlY2xhcmUgY29uc3QgX19QQVJBTUVURVJTX186IHtcbiAgZGlzY292ZXJ5OiBJRGlzY292ZXJ5UGFyYW1ldGVyO1xufTtcblxuaW50ZXJmYWNlIElEaXNjb3ZlcnlQYXJhbWV0ZXJ7XG4gIGludGVudGlvbnM6IHN0cmluZztcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGFyYW1ldGVycyB7XG4gIHByaXZhdGUgc3RhdGljIF9kaXNjb3ZlcnlQYXJhbWV0ZXJzOiBJRGlzY292ZXJ5UGFyYW1ldGVyIDtcblxuICBzdGF0aWMgZ2V0IGRpc2NvdmVyeVBhcmFtZXRlcnMoKTogSURpc2NvdmVyeVBhcmFtZXRlciB7XG4gICAgcmV0dXJuIHRoaXMuX2Rpc2NvdmVyeVBhcmFtZXRlcnM7XG4gIH1cblxuICBzdGF0aWMgYXBwbHlQYXJhbWV0ZXJzKCk6IHZvaWQge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXJhbWV0ZXJzID0gX19QQVJBTUVURVJTX187XG5cbiAgICAgIHRoaXMuX2Rpc2NvdmVyeVBhcmFtZXRlcnMgPSAnZGlzY292ZXJ5JyBpbiBwYXJhbWV0ZXJzID8gcGFyYW1ldGVycy5kaXNjb3ZlcnkgOiB7aW50ZW50aW9uczogJyd9O1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuX2Rpc2NvdmVyeVBhcmFtZXRlcnMgPSB7aW50ZW50aW9uczogJyd9O1xuICAgIH1cbiAgfVxufVxuXG5QYXJhbWV0ZXJzLmFwcGx5UGFyYW1ldGVycygpOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4vSURpc3Bvc2FibGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaXNwb3NhYmxlIGltcGxlbWVudHMgSURpc3Bvc2FibGUge1xuICBwcml2YXRlIF9kaXNwb3NlZDogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfZGlzcG9zYWJsZTogKCkgPT4gdm9pZDtcblxuICBjb25zdHJ1Y3RvcihkaXNwb3NhYmxlOiAoKSA9PiB2b2lkKSB7XG4gICAgdGhpcy5fZGlzcG9zZWQgPSBmYWxzZTtcbiAgICB0aGlzLl9kaXNwb3NhYmxlID0gZGlzcG9zYWJsZTtcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2Rpc3Bvc2VkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fZGlzcG9zZWQgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXMuX2Rpc3Bvc2FibGUuY2FsbCh0aGlzKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4vSURpc3Bvc2FibGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaXNwb3NhYmxlTGlzdCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xpc3Q6IElEaXNwb3NhYmxlW10gPSBbXTtcblxuICBhZGQoZGlzcG9zYWJsZTogSURpc3Bvc2FibGUpOiB2b2lkIHtcbiAgICB0aGlzLl9saXN0LnB1c2goZGlzcG9zYWJsZSk7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX2xpc3QuZm9yRWFjaChkaXNwb3NhYmxlID0+IGRpc3Bvc2FibGUuZGlzcG9zZSgpKTtcbiAgICB0aGlzLl9saXN0Lmxlbmd0aCA9IDA7XG4gIH1cblxuICB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiBgRGlzcG9zYWJsZUxpc3RbZGlzcG9zYWJsZXM9JHt0aGlzLl9saXN0Lmxlbmd0aH1dYDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuLy8gQXMgZmxvYXQgaW4gRUNNQVNjcmlwdCB1c2UgNjQtYml0IGZvcm1hdCBpdCBjYW5ub3QgaGF2ZS9oYW5kbGUgbW9yZSB0aGFuIDE1IHN5bWJvbHMgYWZ0ZXIgZG90LlxuY29uc3QgbWF4RGlnaXRzSW5GbG9hdEFmdGVyRG90ID0gMTU7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE51bWJlcnMge1xuICBzdGF0aWMgY291bnROdW1iZXJMZW5ndGgodmFsdWU6IG51bWJlcik6IG51bWJlciB7XG4gICAgbGV0IGluY3JlbWVudEZvck5lZ2F0aXZlVmFsdWUgPSAwO1xuICAgIGxldCBudW1iZXIgPSB2YWx1ZTtcblxuICAgIGlmIChudW1iZXIgPCAwKSB7XG4gICAgICBudW1iZXIgKj0gLTE7XG4gICAgICBpbmNyZW1lbnRGb3JOZWdhdGl2ZVZhbHVlKys7XG4gICAgfVxuXG4gICAgcmV0dXJuIE51bWJlcnMuY291bnREaWdpdHNCZWZvcmVEZWNpbWFsKG51bWJlcikgKyBpbmNyZW1lbnRGb3JOZWdhdGl2ZVZhbHVlICsgKG51bWJlciAhPT0gTWF0aC5mbG9vcihudW1iZXIpID8gTnVtYmVycy5jb3VudERpZ2l0c0FmdGVyRGVjaW1hbChudW1iZXIpICsgMSA6IDApO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgZml4Um91bmRpbmcodmFsdWU6IG51bWJlciwgcHJlY2lzaW9uOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGNvbnN0IHBvd2VyID0gTWF0aC5wb3coMTAsIHByZWNpc2lvbik7XG5cbiAgICByZXR1cm4gTWF0aC5yb3VuZCh2YWx1ZSAqIHBvd2VyKSAvIHBvd2VyO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgY291bnREaWdpdHNCZWZvcmVEZWNpbWFsKHZhbHVlOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGxldCBkaWdpdHNCZWZvcmVEZWNpbWFsID0gMTtcbiAgICBsZXQgbnVtYmVyID0gdmFsdWU7XG5cbiAgICB3aGlsZSAobnVtYmVyID49IDEwKSB7XG4gICAgICBudW1iZXIgPSBudW1iZXIgLyAxMDtcbiAgICAgIGRpZ2l0c0JlZm9yZURlY2ltYWwrKztcbiAgICB9XG5cbiAgICByZXR1cm4gZGlnaXRzQmVmb3JlRGVjaW1hbDtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGNvdW50RGlnaXRzQWZ0ZXJEZWNpbWFsKHZhbHVlOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGNvbnN0IG9yaWdpbmFsVmFsdWUgPSB2YWx1ZTtcbiAgICBsZXQgbW9kaWZpZWRWYWx1ZSA9IE1hdGguZmxvb3IodmFsdWUpO1xuICAgIGxldCBjb3VudCA9IDA7XG5cbiAgICB3aGlsZSAobW9kaWZpZWRWYWx1ZSAhPT0gb3JpZ2luYWxWYWx1ZSAmJiBjb3VudCA8IG1heERpZ2l0c0luRmxvYXRBZnRlckRvdCkge1xuICAgICAgY291bnQrKztcbiAgICAgIG1vZGlmaWVkVmFsdWUgPSBOdW1iZXJzLmZpeFJvdW5kaW5nKG9yaWdpbmFsVmFsdWUsIGNvdW50KTtcbiAgICB9XG5cbiAgICByZXR1cm4gY291bnQ7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignTnVtYmVycyBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN0cmluZ3Mge1xuICBzdGF0aWMgcmFuZG9tKGxlbmd0aDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBjb25zdCByYW5kb20xM0NoYXJhY3RlcnMgPSAoKTogc3RyaW5nID0+IHtcbiAgICAgIHJldHVybiBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDE2KS5zdWJzdHJpbmcoMiwgMTUpO1xuICAgIH07XG5cbiAgICBjb25zdCBsb29wczogbnVtYmVyID0gTWF0aC5jZWlsKGxlbmd0aCAvIDEzKTtcblxuICAgIHJldHVybiBuZXcgQXJyYXkobG9vcHMpLmZpbGwocmFuZG9tMTNDaGFyYWN0ZXJzKS5yZWR1Y2UoKHN0cmluZywgZnVuYykgPT4ge1xuICAgICAgcmV0dXJuIHN0cmluZyArIGZ1bmMoKTtcbiAgICB9LCAnJykuc3Vic3RyaW5nKDAsIGxlbmd0aCk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignU3RyaW5ncyBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRVbnJlYWNoYWJsZSh4OiBuZXZlcik6IG5ldmVyIHtcbiAgdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIHZhbHVlIFske3h9XS4gVGhpcyBzaG91bGQgbmV2ZXIgYmUgcmVhY2hlZGApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBhc3NlcnRVbnJlYWNoYWJsZTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7SUFwcGVuZGVyfSBmcm9tICcuL0lBcHBlbmRlcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEFwcGVuZGVycyB7XG4gIHByaXZhdGUgX2FwcGVuZGVyczogQXJyYXk8SUFwcGVuZGVyPiA9IFtdO1xuXG4gIGdldCB2YWx1ZSgpOiBBcnJheTxJQXBwZW5kZXI+IHtcbiAgICByZXR1cm4gdGhpcy5fYXBwZW5kZXJzO1xuICB9XG5cbiAgYWRkKGFwcGVuZGVyOiBJQXBwZW5kZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9hcHBlbmRlcnMucHVzaChhcHBlbmRlcik7XG4gIH1cblxuICByZW1vdmUoYXBwZW5kZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9hcHBlbmRlcnMgPSB0aGlzLl9hcHBlbmRlcnMucmVkdWNlKChpdGVtcywgaXRlbSkgPT4ge1xuICAgICAgaWYgKCEoaXRlbSA9PT0gYXBwZW5kZXIpKSB7XG4gICAgICAgIGl0ZW1zLnB1c2goaXRlbSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBpdGVtcztcbiAgICB9LCBbXSBhcyBBcnJheTxJQXBwZW5kZXI+KTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtJQXBwZW5kZXJ9IGZyb20gJy4vSUFwcGVuZGVyJztcbmltcG9ydCB7TG9nZ2luZ0xldmVsfSBmcm9tICcuL0xvZ2dlcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbnNvbGVBcHBlbmRlciBpbXBsZW1lbnRzIElBcHBlbmRlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RocmVzaG9sZDogTG9nZ2luZ0xldmVsO1xuXG4gIGxvZyhsb2dMZXZlbDogTG9nZ2luZ0xldmVsLCBtZXNzYWdlOiBzdHJpbmcsIGNhdGVnb3J5OiBzdHJpbmcsIGRhdGU6IERhdGUpOiB2b2lkIHtcbiAgICBpZiAobG9nTGV2ZWwgPCB0aGlzLl90aHJlc2hvbGQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBmdWxsTWVzc2FnZSA9IGAke2RhdGUudG9JU09TdHJpbmcoKX0gWyR7Y2F0ZWdvcnl9XSBbJHtMb2dnaW5nTGV2ZWxbbG9nTGV2ZWxdfV0gJHttZXNzYWdlfWA7XG5cbiAgICBpZiAobG9nTGV2ZWwgPCBMb2dnaW5nTGV2ZWwuV2Fybikge1xuICAgICAgY29uc29sZS5sb2coZnVsbE1lc3NhZ2UpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc29sZS5lcnJvcihmdWxsTWVzc2FnZSk7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcih0aHJlc2hvbGQ6IExvZ2dpbmdMZXZlbCkge1xuICAgIHRoaXMuX3RocmVzaG9sZCA9IHRocmVzaG9sZDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuaW1wb3J0IHtJQXBwZW5kZXJ9IGZyb20gJy4vSUFwcGVuZGVyJztcbmltcG9ydCBBcHBlbmRlcnMgZnJvbSAnLi9BcHBlbmRlcnMnO1xuaW1wb3J0IExvZ2dpbmdUaHJlc2hvbGQgZnJvbSAnLi9Mb2dnaW5nVGhyZXNob2xkJztcbmltcG9ydCBGZWF0dXJlRW5hYmxlbWVudCBmcm9tICcuLi9lbnZpcm9ubWVudC9GZWF0dXJlRW5hYmxlbWVudCc7XG5cbmV4cG9ydCBlbnVtIExvZ2dpbmdMZXZlbCB7XG4gIEFsbCA9IC0xLFxuICBUcmFjZSA9IDEwLFxuICBEZWJ1ZyA9IDIwLFxuICBJbmZvID0gMzAsXG4gIFdhcm4gPSA0MCxcbiAgRXJyb3IgPSA1MCxcbiAgRmF0YWwgPSA2MCxcbiAgT2ZmID0gMTAwLFxufVxuXG5leHBvcnQgdHlwZSBMb2dnaW5nTGV2ZWxUeXBlID0gJ09mZicgfCAnVHJhY2UnIHwgJ0RlYnVnJyB8ICdJbmZvJyB8ICdXYXJuJyB8ICdFcnJvcicgfCAnRmF0YWwnIHwgJ0FsbCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExvZ2dlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NhdGVnb3J5OiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2FwcGVuZGVyczogQXBwZW5kZXJzO1xuICBwcml2YXRlIHJlYWRvbmx5IF90aHJlc2hvbGQ6IExvZ2dpbmdUaHJlc2hvbGQ7XG5cbiAgZ2V0IGNhdGVnb3J5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2NhdGVnb3J5O1xuICB9XG5cbiAgZ2V0IGFwcGVuZGVycygpOiBBcHBlbmRlcnMge1xuICAgIHJldHVybiB0aGlzLl9hcHBlbmRlcnM7XG4gIH1cblxuICBnZXQgdGhyZXNob2xkKCk6IExvZ2dpbmdUaHJlc2hvbGQge1xuICAgIHJldHVybiB0aGlzLl90aHJlc2hvbGQ7XG4gIH1cblxuICB0cmFjZSguLi5hcmdzOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX3RocmVzaG9sZC52YWx1ZSB8fCB0aGlzLl90aHJlc2hvbGQudmFsdWUgPiBMb2dnaW5nTGV2ZWwuVHJhY2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmxvZyhMb2dnaW5nTGV2ZWwuVHJhY2UsIGFyZ3MpO1xuICB9XG5cbiAgZGVidWcoLi4uYXJnczogYW55KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl90aHJlc2hvbGQudmFsdWUgfHwgdGhpcy5fdGhyZXNob2xkLnZhbHVlID4gTG9nZ2luZ0xldmVsLkRlYnVnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5sb2coTG9nZ2luZ0xldmVsLkRlYnVnLCBhcmdzKTtcbiAgfVxuXG4gIGluZm8oLi4uYXJnczogYW55KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl90aHJlc2hvbGQudmFsdWUgfHwgdGhpcy5fdGhyZXNob2xkLnZhbHVlID4gTG9nZ2luZ0xldmVsLkluZm8pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmxvZyhMb2dnaW5nTGV2ZWwuSW5mbywgYXJncyk7XG4gIH1cblxuICB3YXJuKC4uLmFyZ3M6IGFueSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fdGhyZXNob2xkLnZhbHVlIHx8IHRoaXMuX3RocmVzaG9sZC52YWx1ZSA+IExvZ2dpbmdMZXZlbC5XYXJuKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5sb2coTG9nZ2luZ0xldmVsLldhcm4sIGFyZ3MpO1xuICB9XG5cbiAgZXJyb3IoLi4uYXJnczogYW55KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl90aHJlc2hvbGQudmFsdWUgfHwgdGhpcy5fdGhyZXNob2xkLnZhbHVlID4gTG9nZ2luZ0xldmVsLkVycm9yKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5sb2coTG9nZ2luZ0xldmVsLkVycm9yLCBhcmdzKTtcbiAgfVxuXG4gIGZhdGFsKC4uLmFyZ3M6IGFueSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fdGhyZXNob2xkLnZhbHVlIHx8IHRoaXMuX3RocmVzaG9sZC52YWx1ZSA+IExvZ2dpbmdMZXZlbC5GYXRhbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubG9nKExvZ2dpbmdMZXZlbC5GYXRhbCwgYXJncyk7XG4gIH1cblxuICBwcml2YXRlIGxvZyhsZXZlbDogbnVtYmVyLCBhcmdzOiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoKTtcbiAgICBjb25zdCBtZXNzYWdlID0gdGhpcy5yZXBsYWNlUGxhY2Vob2xkZXJzKGFyZ3MpO1xuXG4gICAgdGhpcy5fYXBwZW5kZXJzLnZhbHVlLmZvckVhY2goKGFwcGVuZGVyOiBJQXBwZW5kZXIpID0+IHtcbiAgICAgIGFwcGVuZGVyLmxvZyhsZXZlbCwgbWVzc2FnZSwgdGhpcy5jYXRlZ29yeSwgZGF0ZSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHJlcGxhY2VQbGFjZWhvbGRlcnMoYXJnczogYW55KTogc3RyaW5nIHtcbiAgICBsZXQgcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZyA9IGFyZ3NbMF07XG4gICAgbGV0IGluZGV4ID0gMDtcblxuICAgIHdoaWxlIChyZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLmluZGV4T2YgJiYgYXJncy5sZW5ndGggPiAxICYmIGluZGV4ID49IDApIHtcbiAgICAgIGluZGV4ID0gcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZy5pbmRleE9mKCclJywgaW5kZXgpO1xuXG4gICAgICBpZiAoaW5kZXggPiAwKSB7XG4gICAgICAgIGNvbnN0IHR5cGUgPSByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLnN1YnN0cmluZyhpbmRleCArIDEsIGluZGV4ICsgMik7XG5cbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgY2FzZSAnJSc6XG4gICAgICAgICAgICAvLyBFc2NhcGVkICclJScgdHVybnMgaW50byAnJSdcbiAgICAgICAgICAgIHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcgPSByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLnN1YnN0cmluZygwLCBpbmRleCkgKyByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLnN1YnN0cmluZyhpbmRleCArIDEpO1xuICAgICAgICAgICAgaW5kZXgrKztcblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAncyc6XG4gICAgICAgICAgY2FzZSAnZCc6XG4gICAgICAgICAgICAvLyBSZXBsYWNlICclZCcgb3IgJyVzJyB3aXRoIHRoZSBhcmd1bWVudFxuICAgICAgICAgICAgYXJnc1swXSA9IHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcgPSB0aGlzLnJlcGxhY2VBcmd1bWVudChcbiAgICAgICAgICAgICAgdGhpcy50b1N0cmluZyhhcmdzWzFdKSxcbiAgICAgICAgICAgICAgcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZyxcbiAgICAgICAgICAgICAgaW5kZXhcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBhcmdzLnNwbGljZSgxLCAxKTtcblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnaic6XG4gICAgICAgICAgICAvLyBSZXBsYWNlICVqJyB3aXRoIHRoZSBhcmd1bWVudFxuICAgICAgICAgICAgYXJnc1swXSA9IHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcgPSB0aGlzLnJlcGxhY2VBcmd1bWVudChcbiAgICAgICAgICAgICAgdGhpcy5zdHJpbmdpZnkoYXJnc1sxXSksXG4gICAgICAgICAgICAgIHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcsXG4gICAgICAgICAgICAgIGluZGV4XG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBhcmdzLnNwbGljZSgxLCAxKTtcblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBhcmdzLnRvU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoYXJncy5sZW5ndGggPiAxKSB7XG4gICAgICBhcmdzID0gYXJncy5yZWR1Y2UoKGFjY3VtdWxhdG9yLCBjdXJyZW50VmFsdWUsIGluZGV4LCBhcnJheSkgPT4ge1xuICAgICAgICBpZiAoaW5kZXggKyAxID09PSBhcnJheS5sZW5ndGggJiYgY3VycmVudFZhbHVlIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQuZXJyb3JTdGFja0Fsc29IYXNFcnJvck1lc3NhZ2UpIHtcbiAgICAgICAgICAgIHJldHVybiBhY2N1bXVsYXRvciArICdcXG4nICsgdGhpcy50b1N0cmluZyhjdXJyZW50VmFsdWUuc3RhY2spO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBhY2N1bXVsYXRvciArICdcXG4nICsgdGhpcy50b1N0cmluZyhjdXJyZW50VmFsdWUubWVzc2FnZSkgKyAnXFxuJyArIHRoaXMudG9TdHJpbmcoY3VycmVudFZhbHVlLnN0YWNrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhY2N1bXVsYXRvciArIGBbJHt0aGlzLnRvU3RyaW5nKGN1cnJlbnRWYWx1ZSl9XWA7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXJncy50b1N0cmluZygpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdHJpbmdpZnkoYXJnOiBhbnkpOiBzdHJpbmcge1xuICAgIGNvbnN0IGNhY2hlID0gW107XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KFxuICAgICAgICBhcmcgaW5zdGFuY2VvZiBFcnJvciA/IHRoaXMudG9TdHJpbmcoYXJnKSA6IGFyZyxcbiAgICAgICAgKGtleSwgdmFsdWUpID0+IHtcbiAgICAgICAgICBpZiAoISF2YWx1ZSAmJiB2YWx1ZSBpbnN0YW5jZW9mIE9iamVjdCkge1xuICAgICAgICAgICAgaWYgKGNhY2hlLmluY2x1ZGVzKHZhbHVlKSkge1xuICAgICAgICAgICAgICByZXR1cm4gJzxyZWN1cnNpdmU+JztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2FjaGUucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICAyXG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiAnW29iamVjdCBpbnZhbGlkIEpTT04uc3RyaW5naWZ5XSc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZXBsYWNlQXJndW1lbnQoYXJndW1lbnQ6IGFueSwgcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZzogc3RyaW5nLCBpbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZy5zdWJzdHJpbmcoMCwgaW5kZXgpICsgdGhpcy50b1N0cmluZyhhcmd1bWVudCkgKyByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLnN1YnN0cmluZyhpbmRleCArIDIpO1xuICB9XG5cbiAgcHJpdmF0ZSB0b1N0cmluZyhkYXRhOiBhbnkpOiBzdHJpbmcge1xuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICByZXR1cm4gZGF0YSA/ICd0cnVlJyA6ICdmYWxzZSc7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSAnbnVtYmVyJykge1xuICAgICAgcmV0dXJuIGRhdGEudG9TdHJpbmcoKTtcbiAgICB9XG5cbiAgICBsZXQgdG9TdHJpbmdTdHIgPSAnJztcblxuICAgIGlmIChkYXRhKSB7XG4gICAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdG9TdHJpbmdTdHIgPSBkYXRhLnRvU3RyaW5nKCk7XG4gICAgICB9IGVsc2UgaWYgKGRhdGEgaW5zdGFuY2VvZiBPYmplY3QpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB0b1N0cmluZ1N0ciA9IGRhdGEudG9TdHJpbmcoKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIHRvU3RyaW5nU3RyID0gJ1tvYmplY3QgaW52YWxpZCB0b1N0cmluZygpXSc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdG9TdHJpbmdTdHI7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihjYXRlZ29yeTogc3RyaW5nLCBhcHBlbmRlcnM6IEFwcGVuZGVycywgdGhyZXNob2xkOiBMb2dnaW5nVGhyZXNob2xkKSB7XG4gICAgdGhpcy5fY2F0ZWdvcnkgPSBjYXRlZ29yeTtcbiAgICB0aGlzLl9hcHBlbmRlcnMgPSBhcHBlbmRlcnM7XG4gICAgdGhpcy5fdGhyZXNob2xkID0gdGhyZXNob2xkO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgQnVpbGRGZWF0dXJlcyBmcm9tICcuLi9lbnZpcm9ubWVudC9CdWlsZEZlYXR1cmVzJztcbmltcG9ydCB7TG9nZ2luZ0xldmVsfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTG9nZ2VyRGVmYXVsdHMge1xuICBzdGF0aWMgZ2V0IGRlZmF1bHRMb2dnaW5nTGV2ZWwoKTogTG9nZ2luZ0xldmVsIHtcbiAgICByZXR1cm4gTG9nZ2luZ0xldmVsW0J1aWxkRmVhdHVyZXMuc2VuZExvZ3NdO1xuICB9XG5cbiAgc3RhdGljIGdldCBkZWZhdWx0Q29uc29sZUxvZ2dpbmdMZXZlbCgpOiBMb2dnaW5nTGV2ZWwge1xuICAgIHJldHVybiBMb2dnaW5nTGV2ZWxbQnVpbGRGZWF0dXJlcy5sb2dUb0NvbnNvbGVdO1xuICB9XG5cbiAgc3RhdGljIGdldCBkZWZhdWx0VGVsZW1ldHJ5TG9nZ2luZ0xldmVsKCk6IExvZ2dpbmdMZXZlbCB7XG4gICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5JbmZvO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4vTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBMb2dnZXIsIHtMb2dnaW5nTGV2ZWx9IGZyb20gJy4vTG9nZ2VyJztcbmltcG9ydCBBcHBlbmRlcnMgZnJvbSAnLi9BcHBlbmRlcnMnO1xuaW1wb3J0IExvZ2dpbmdUaHJlc2hvbGQgZnJvbSAnLi9Mb2dnaW5nVGhyZXNob2xkJztcbmltcG9ydCBDb25zb2xlQXBwZW5kZXIgZnJvbSAnLi9Db25zb2xlQXBwZW5kZXInO1xuaW1wb3J0IFRlbGVtZXRyeUFwcGVuZGVyIGZyb20gJy4uL3RlbGVtZXRyeS9UZWxlbWV0cnlBcGVuZGVyJztcbmltcG9ydCBUZWxlbWV0cnlDb25maWd1cmF0aW9uIGZyb20gJy4uL3RlbGVtZXRyeS9UZWxlbWV0cnlDb25maWd1cmF0aW9uJztcbmltcG9ydCBDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyIGZyb20gJy4uL2RvbS9Db25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyJztcbmltcG9ydCB7SUNvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXJ9IGZyb20gJy4uL2RvbS9JQ29uZmlndXJhdGlvblBhcmFtYXRlclJlYWRlcic7XG5pbXBvcnQgTG9nZ2VyRGVmYXVsdHMgZnJvbSAnLi9Mb2dnZXJEZWZhdWx0cyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExvZ2dlckZhY3Rvcnkge1xuICBwcml2YXRlIHN0YXRpYyBfY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlcjogSUNvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIgPSBuZXcgQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlcigpO1xuICBwcml2YXRlIHN0YXRpYyBfbG9nZ2Vyczoge1tjYXRlZ29yeTogc3RyaW5nXTogSUxvZ2dlcn0gPSB7fTtcbiAgcHJpdmF0ZSBzdGF0aWMgX2FwcGVuZGVyczogQXBwZW5kZXJzID0gbmV3IEFwcGVuZGVycygpO1xuICBwcml2YXRlIHN0YXRpYyBfdGhyZXNob2xkOiBMb2dnaW5nVGhyZXNob2xkID0gbmV3IExvZ2dpbmdUaHJlc2hvbGQoKTtcbiAgcHJpdmF0ZSBzdGF0aWMgX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb246IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24gPSBuZXcgVGVsZW1ldHJ5Q29uZmlndXJhdGlvbigpO1xuXG4gIHN0YXRpYyBnZXQgdGVsZW1ldHJ5Q29uZmlndXJhdGlvbigpOiBUZWxlbWV0cnlDb25maWd1cmF0aW9uIHtcbiAgICByZXR1cm4gTG9nZ2VyRmFjdG9yeS5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbjtcbiAgfVxuXG4gIHN0YXRpYyBnZXRMb2dnZXIoY2F0ZWdvcnk6IHN0cmluZyk6IElMb2dnZXIge1xuICAgIGlmICh0eXBlb2YgY2F0ZWdvcnkgIT09ICdzdHJpbmcnKSB7XG4gICAgICBjYXRlZ29yeSA9ICdTREsnO1xuICAgIH1cblxuICAgIGNvbnN0IGxvZ2dlciA9IExvZ2dlckZhY3RvcnkuX2xvZ2dlcnNbY2F0ZWdvcnldO1xuXG4gICAgaWYgKGxvZ2dlcikge1xuICAgICAgcmV0dXJuIGxvZ2dlcjtcbiAgICB9XG5cbiAgICByZXR1cm4gTG9nZ2VyRmFjdG9yeS5fbG9nZ2Vyc1tjYXRlZ29yeV0gPSBuZXcgTG9nZ2VyKGNhdGVnb3J5LCB0aGlzLl9hcHBlbmRlcnMsIHRoaXMuX3RocmVzaG9sZCk7XG4gIH1cblxuICBzdGF0aWMgYXBwbHlMb2dnZXJDb25maWdGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpOiB2b2lkIHtcbiAgICBMb2dnZXJGYWN0b3J5LmFwcGx5TG9nZ2luZ0xldmVsKCk7XG4gICAgTG9nZ2VyRmFjdG9yeS5hcHBseUFwcGVuZGVyTG9nZ2luZ0xldmVsKCdjb25zb2xlJywgTG9nZ2VyRmFjdG9yeS5hcHBseUNvbnNvbGVMb2dnZXIuYmluZCh0aGlzKSk7XG4gICAgTG9nZ2VyRmFjdG9yeS5hcHBseUFwcGVuZGVyTG9nZ2luZ0xldmVsKCd0ZWxlbWV0cnknLCBMb2dnZXJGYWN0b3J5LmFwcGx5VGVsZW1ldHJ5TG9nZ2VyLmJpbmQodGhpcykpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgYXBwbHlMb2dnaW5nTGV2ZWwoKTogdm9pZCB7XG4gICAgY29uc3QgcGFyYW1ldGVyVmFsdWUgPSB0aGlzLl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldFN0cmluZ1ZhbHVlKCdwaGVuaXgtbG9nZ2luZy1sZXZlbCcpO1xuXG4gICAgaWYgKExvZ2dpbmdMZXZlbFtwYXJhbWV0ZXJWYWx1ZV0pIHtcbiAgICAgIHRoaXMuX3RocmVzaG9sZC5zZXRUaHJlc2hvbGQoTG9nZ2luZ0xldmVsW3BhcmFtZXRlclZhbHVlXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgYXBwbHlBcHBlbmRlckxvZ2dpbmdMZXZlbChuYW1lOiBzdHJpbmcsIGFwcGx5QXBwZW5kZXI6IChsZXZlbDogTG9nZ2luZ0xldmVsKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgY29uc3QgcGFyYW1ldGVyVmFsdWUgPSB0aGlzLl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldFN0cmluZ1ZhbHVlKGBwaGVuaXgtJHtuYW1lfS1sb2dnaW5nLWxldmVsYCk7XG5cbiAgICBpZiAocGFyYW1ldGVyVmFsdWUgPT09ICdPZmYnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgYXBwbHlBcHBlbmRlcihMb2dnaW5nTGV2ZWxbcGFyYW1ldGVyVmFsdWVdKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGFwcGx5Q29uc29sZUxvZ2dlcihsZXZlbDogTG9nZ2luZ0xldmVsKTogdm9pZCB7XG4gICAgdGhpcy5fYXBwZW5kZXJzLmFkZChuZXcgQ29uc29sZUFwcGVuZGVyKGxldmVsIHx8IExvZ2dlckRlZmF1bHRzLmRlZmF1bHRDb25zb2xlTG9nZ2luZ0xldmVsKSk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBhcHBseVRlbGVtZXRyeUxvZ2dlcihsZXZlbDogTG9nZ2luZ0xldmVsKTogdm9pZCB7XG4gICAgdGhpcy5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi50aHJlc2hvbGQgPSBsZXZlbCB8fCBMb2dnZXJEZWZhdWx0cy5kZWZhdWx0VGVsZW1ldHJ5TG9nZ2luZ0xldmVsO1xuXG4gICAgdGhpcy5fYXBwZW5kZXJzLmFkZChuZXcgVGVsZW1ldHJ5QXBwZW5kZXIodGhpcy5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbikpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0xvZ2dlckZhY3RvcnkgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59XG5cbkxvZ2dlckZhY3RvcnkuYXBwbHlMb2dnZXJDb25maWdGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuaW1wb3J0IHtMb2dnaW5nTGV2ZWwsIExvZ2dpbmdMZXZlbFR5cGV9IGZyb20gJy4vTG9nZ2VyJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTG9nZ2luZ0xldmVsTWFwcGluZyB7XG4gIHN0YXRpYyBjb252ZXJ0TG9nZ2luZ0xldmVsVG9Mb2dnaW5nTGV2ZWxUeXBlKGxvZ2dpbmdMZXZlbDogTG9nZ2luZ0xldmVsKTogTG9nZ2luZ0xldmVsVHlwZSB7XG4gICAgc3dpdGNoIChsb2dnaW5nTGV2ZWwpIHtcbiAgICAgIGNhc2UgTG9nZ2luZ0xldmVsLk9mZjpcbiAgICAgICAgcmV0dXJuICdPZmYnO1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuVHJhY2U6XG4gICAgICAgIHJldHVybiAnVHJhY2UnO1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuRGVidWc6XG4gICAgICAgIHJldHVybiAnRGVidWcnO1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuSW5mbzpcbiAgICAgICAgcmV0dXJuICdUcmFjZSc7XG4gICAgICBjYXNlIExvZ2dpbmdMZXZlbC5XYXJuOlxuICAgICAgICByZXR1cm4gJ1dhcm4nO1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuRXJyb3I6XG4gICAgICAgIHJldHVybiAnRXJyb3InO1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuRmF0YWw6XG4gICAgICAgIHJldHVybiAnRmF0YWwnO1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuQWxsOlxuICAgICAgICByZXR1cm4gJ0FsbCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZShsb2dnaW5nTGV2ZWwpO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBjb252ZXJ0TG9nZ2luZ0xldmVsVHlwZVRvTG9nZ2luZ0xldmVsKGxvZ2dpbmdMZXZlbFR5cGU6IExvZ2dpbmdMZXZlbFR5cGUpOiBMb2dnaW5nTGV2ZWwge1xuICAgIHN3aXRjaCAobG9nZ2luZ0xldmVsVHlwZSkge1xuICAgICAgY2FzZSAnT2ZmJzpcbiAgICAgICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5PZmY7XG4gICAgICBjYXNlICdUcmFjZSc6XG4gICAgICAgIHJldHVybiBMb2dnaW5nTGV2ZWwuVHJhY2U7XG4gICAgICBjYXNlICdEZWJ1Zyc6XG4gICAgICAgIHJldHVybiBMb2dnaW5nTGV2ZWwuRGVidWc7XG4gICAgICBjYXNlICdJbmZvJzpcbiAgICAgICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5JbmZvO1xuICAgICAgY2FzZSAnV2Fybic6XG4gICAgICAgIHJldHVybiBMb2dnaW5nTGV2ZWwuV2FybjtcbiAgICAgIGNhc2UgJ0Vycm9yJzpcbiAgICAgICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5FcnJvcjtcbiAgICAgIGNhc2UgJ0ZhdGFsJzpcbiAgICAgICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5GYXRhbDtcbiAgICAgIGNhc2UgJ0FsbCc6XG4gICAgICAgIHJldHVybiBMb2dnaW5nTGV2ZWwuQWxsO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUobG9nZ2luZ0xldmVsVHlwZSk7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgTG9nZ2VyRGVmYXVsdHMgZnJvbSAnLi9Mb2dnZXJEZWZhdWx0cyc7XG5pbXBvcnQge0xvZ2dpbmdMZXZlbH0gZnJvbSAnLi9Mb2dnZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMb2dnaW5nVGhyZXNob2xkIHtcbiAgcHJpdmF0ZSBfdGhyZXNob2xkOiBMb2dnaW5nTGV2ZWwgPSBMb2dnZXJEZWZhdWx0cy5kZWZhdWx0TG9nZ2luZ0xldmVsO1xuXG4gIGdldCB2YWx1ZSgpOiBMb2dnaW5nTGV2ZWwge1xuICAgIHJldHVybiB0aGlzLl90aHJlc2hvbGQ7XG4gIH1cblxuICBzZXRUaHJlc2hvbGQodGhyZXNob2xkOiBMb2dnaW5nTGV2ZWwpOiB2b2lkIHtcbiAgICB0aGlzLl90aHJlc2hvbGQgPSB0aHJlc2hvbGQ7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7VGVsZW1ldHJ5TGV2ZWx9IGZyb20gJy4vTWV0cmljc0NvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuaW1wb3J0IE1ldHJpY3NUeXBlIGZyb20gJy4vTWV0cmljc1R5cGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNZXRyaWNUeXBlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbWV0cmljczogTWV0cmljc1R5cGU7XG5cbiAgY29uc3RydWN0b3IobWV0cmljczogTWV0cmljc1R5cGUpIHtcbiAgICB0aGlzLl9tZXRyaWNzID0gbWV0cmljcztcbiAgfVxuXG4gIGdldE5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gTWV0cmljc1R5cGVbdGhpcy5fbWV0cmljc107XG4gIH1cblxuICBnZXRUZWxlbWV0cnlMZXZlbCgpOiBUZWxlbWV0cnlMZXZlbCB7XG4gICAgc3dpdGNoICh0aGlzLl9tZXRyaWNzKSB7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLlRpbWVUb0ZpcnN0RnJhbWU6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5Fc3NlbnRpYWw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLkNoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWU6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5Fc3NlbnRpYWw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLlN0YWxsZWQ6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLkJ1ZmZlcmluZzpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuU2V0dXBDb21wbGV0ZWQ6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLlNldHVwRmFpbGVkOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5Sb3VuZFRyaXBUaW1lOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5Eb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eTpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuTmV0d29ya1R5cGU6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLlJlc29sdXRpb25DaGFuZ2VkOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5BcHBsaWNhdGlvbkZvcmVncm91bmQ6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLkFwcGxpY2F0aW9uQmFja2dyb3VuZDpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHRoaXMuX21ldHJpY3MpO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFRlbGVtZXRyeURlZmF1bHQgZnJvbSAnLi9UZWxlbWV0cnlEZWZhdWx0JztcblxuZXhwb3J0IGVudW0gVGVsZW1ldHJ5TGV2ZWwge1xuICBPZmYgPSAxMDAsXG4gIEVzc2VudGlhbCA9IDEwLFxuICBBbGwgPSAtMVxufVxuXG5leHBvcnQgdHlwZSBUZWxlbWV0cnlMZXZlbFR5cGUgPSAnT2ZmJyB8ICdFc3NlbnRpYWwnIHwgJ0FsbCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1ldHJpY3NDb25maWd1cmF0aW9uIHtcbiAgcHJpdmF0ZSBfdXJsID0gJ2h0dHBzOi8vdGVsZW1ldHJ5LnBoZW5peHJ0cy5jb20vdGVsZW1ldHJ5L21ldHJpY3MnO1xuICBwcml2YXRlIF90ZW5hbmN5OiBzdHJpbmc7XG4gIHByaXZhdGUgX3Nlc3Npb25JZDogc3RyaW5nO1xuICBwcml2YXRlIF9lbnZpcm9ubWVudDogc3RyaW5nO1xuICBwcml2YXRlIF90aHJlc2hvbGQ6IFRlbGVtZXRyeUxldmVsID0gVGVsZW1ldHJ5RGVmYXVsdC5kZWZhdWx0VGVsZW1ldHJ5TGV2ZWw7XG5cbiAgZ2V0IHVybCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl91cmw7XG4gIH1cblxuICBzZXQgdXJsKHVybDogc3RyaW5nKSB7XG4gICAgY29uc3QgbWV0cmljc1VybCA9IG5ldyBVUkwodXJsKTtcblxuICAgIG1ldHJpY3NVcmwucGF0aG5hbWUgPSBtZXRyaWNzVXJsLnBhdGhuYW1lICsgJy9tZXRyaWNzJztcblxuICAgIHRoaXMuX3VybCA9IG1ldHJpY3NVcmwudG9TdHJpbmcoKTtcbiAgfVxuXG4gIGdldCBlbnZpcm9ubWVudCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9lbnZpcm9ubWVudDtcbiAgfVxuXG4gIHNldCBlbnZpcm9ubWVudChlbnZpcm9ubWVudDogc3RyaW5nKSB7XG4gICAgdGhpcy5fZW52aXJvbm1lbnQgPSBlbnZpcm9ubWVudDtcbiAgfVxuXG4gIGdldCB0ZW5hbmN5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3RlbmFuY3k7XG4gIH1cblxuICBzZXQgdGVuYW5jeSh0ZW5hbmN5OiBzdHJpbmcpIHtcbiAgICB0aGlzLl90ZW5hbmN5ID0gdGVuYW5jeTtcbiAgfVxuXG4gIGdldCBzZXNzaW9uSWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fc2Vzc2lvbklkO1xuICB9XG5cbiAgc2V0IHNlc3Npb25JZChzZXNzaW9uSWQ6IHN0cmluZykge1xuICAgIHRoaXMuX3Nlc3Npb25JZCA9IHNlc3Npb25JZDtcbiAgfVxuXG4gIGdldCB0aHJlc2hvbGQoKTogVGVsZW1ldHJ5TGV2ZWwge1xuICAgIHJldHVybiB0aGlzLl90aHJlc2hvbGQ7XG4gIH1cblxuICBzZXQgdGhyZXNob2xkKHRocmVzaG9sZDogVGVsZW1ldHJ5TGV2ZWwpIHtcbiAgICB0aGlzLl90aHJlc2hvbGQgPSB0aHJlc2hvbGQ7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IE1ldHJpY3NTZXJ2aWNlIGZyb20gJy4vTWV0cmljc1NlcnZpY2UnO1xuaW1wb3J0IE1ldHJpY3NDb25maWd1cmF0aW9uLCB7VGVsZW1ldHJ5TGV2ZWx9IGZyb20gJy4vTWV0cmljc0NvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IFNESyBmcm9tICcuLi9zZGsvU0RLJztcbmltcG9ydCBUZWxlbWV0cnlVcmwgZnJvbSAnLi4vc2RrL1RlbGVtZXRyeVVybCc7XG5pbXBvcnQgRW52aXJvbm1lbnQgZnJvbSAnLi4vc2RrL0Vudmlyb25tZW50JztcbmltcG9ydCBUZWxlbWV0cnlMZXZlbE1hcHBpbmcgZnJvbSAnLi9UZWxlbWV0cmljTGV2ZWxNYXBwaW5nJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWV0cmljc0ZhY3Rvcnkge1xuICBwcml2YXRlIHN0YXRpYyBfbWV0cmljc1NlcnZpY2VzOiB7W2NhdGVnb3J5OiBzdHJpbmddOiBNZXRyaWNzU2VydmljZX0gPSB7fTtcblxuICBzdGF0aWMgZ2V0TWV0cmljc1NlcnZpY2UodXJsOiBzdHJpbmcpOiBNZXRyaWNzU2VydmljZSB7XG4gICAgaWYgKHR5cGVvZiB1cmwgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3VyJyk7XG4gICAgfVxuXG4gICAgY29uc3QgbWV0cmljc1NlcnZpY2VzID0gTWV0cmljc0ZhY3RvcnkuX21ldHJpY3NTZXJ2aWNlc1t1cmxdO1xuXG4gICAgaWYgKG1ldHJpY3NTZXJ2aWNlcykge1xuICAgICAgcmV0dXJuIG1ldHJpY3NTZXJ2aWNlcztcbiAgICB9XG5cbiAgICBjb25zdCBtZXRyaWNzQ29uZmlndXJhdGlvbiA9IG5ldyBNZXRyaWNzQ29uZmlndXJhdGlvbigpO1xuXG4gICAgbWV0cmljc0NvbmZpZ3VyYXRpb24uc2Vzc2lvbklkID0gU0RLLmNsaWVudFNlc3Npb25JZDtcbiAgICBtZXRyaWNzQ29uZmlndXJhdGlvbi50ZW5hbmN5ID0gU0RLLnRlbmFuY3kudmFsdWU7XG4gICAgbWV0cmljc0NvbmZpZ3VyYXRpb24udXJsID0gVGVsZW1ldHJ5VXJsLmdldFRlbGVtZXRyeVVybCh1cmwpO1xuICAgIG1ldHJpY3NDb25maWd1cmF0aW9uLmVudmlyb25tZW50ID0gRW52aXJvbm1lbnQuZ2V0RW52aXJvbm1lbnRGcm9tVXJsKHVybCk7XG5cbiAgICBtZXRyaWNzQ29uZmlndXJhdGlvbi50aHJlc2hvbGQgPSBUZWxlbWV0cnlMZXZlbE1hcHBpbmcuY29udmVydFRlbGVtZXRyeUxldmVsVHlwZVRvVGVsZW1ldHJ5TGV2ZWwoU0RLLnRlbGVtZXRyeUxldmVsKTtcblxuICAgIHJldHVybiBNZXRyaWNzRmFjdG9yeS5fbWV0cmljc1NlcnZpY2VzW3VybF0gPSBuZXcgTWV0cmljc1NlcnZpY2UobWV0cmljc0NvbmZpZ3VyYXRpb24pO1xuICB9XG5cbiAgc3RhdGljIHNldFRlbGVtZXRyeUxldmVsKHRlbGVtZXRyeUxldmVsOiBUZWxlbWV0cnlMZXZlbCk6IHZvaWQge1xuICAgIGNvbnN0IG1ldHJpY3NTZXJ2aWNlcyA9IE9iamVjdC52YWx1ZXMoTWV0cmljc0ZhY3RvcnkuX21ldHJpY3NTZXJ2aWNlcyk7XG5cbiAgICBpZiAobWV0cmljc1NlcnZpY2VzICYmIG1ldHJpY3NTZXJ2aWNlcy5sZW5ndGgpIHtcbiAgICAgIG1ldHJpY3NTZXJ2aWNlcy5mb3JFYWNoKG1ldHJpY3NTZXJ2aWNlID0+IHtcbiAgICAgICAgY29uc3QgbWV0cmljc0NvbmZpZ3VyYXRpb24gPSBtZXRyaWNzU2VydmljZS5tZXRyaWNzQ29uZmlndXJhdGlvbjtcblxuICAgICAgICBtZXRyaWNzQ29uZmlndXJhdGlvbi50aHJlc2hvbGQgPSB0ZWxlbWV0cnlMZXZlbDtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdMb2dnZXJGYWN0b3J5IGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCBFeHBvbmVudGlhbEJhY2tvZmYgZnJvbSAnLi4vdGltZS9FeHBvbmVudGlhbEJhY2tvZmYnO1xuaW1wb3J0IFZlcnNpb25NYW5hZ2VyIGZyb20gJy4uL3Nkay92ZXJzaW9uL1ZlcnNpb25NYW5hZ2VyJztcbmltcG9ydCBNZXRyaWNzQ29uZmlndXJhdGlvbiBmcm9tICcuL01ldHJpY3NDb25maWd1cmF0aW9uJztcbmltcG9ydCBNZXRyaWNUeXBlIGZyb20gJy4vTWV0cmljVHlwZSc7XG5pbXBvcnQgTWV0cmljc1R5cGUgZnJvbSAnLi9NZXRyaWNzVHlwZSc7XG5cbmNvbnN0IHJlcXVlc3RTaXplTGltaXQgPSAxMDI0O1xuY29uc3QgbWF4QnVmZmVyZWRSZWNvcmRzID0gMjA0ODtcblxuaW50ZXJmYWNlIElWYWx1ZSB7XG4gIHN0cmluZz86IHN0cmluZztcbiAgdWludDY0PzogbnVtYmVyO1xuICBmbG9hdD86IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIElNZXRyaWNSZWNvcmQge1xuICB0aW1lc3RhbXA6IHN0cmluZztcbiAgdGVuYW5jeTogc3RyaW5nO1xuICBzZXNzaW9uSWQ6IHN0cmluZztcbiAgc3RyZWFtSWQ6IHN0cmluZztcbiAgbWV0cmljOiBzdHJpbmc7XG4gIHZhbHVlOiBJVmFsdWU7XG4gIHByZXZpb3VzVmFsdWU6IElWYWx1ZTtcbiAgZnVsbFF1YWxpZmllZE5hbWU6IHN0cmluZztcbiAgZW52aXJvbm1lbnQ6IHN0cmluZztcbiAgdmVyc2lvbjogc3RyaW5nO1xuICBydW50aW1lOiBudW1iZXI7XG4gIHJlc291cmNlPzogc3RyaW5nO1xuICBraW5kPzogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgSU1ldHJpYyB7XG4gIHN0cmVhbUlkPzogc3RyaW5nO1xuICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZTtcbiAgdmFsdWU/OiBJVmFsdWU7XG4gIHByZXZpb3VzVmFsdWU/OiBJVmFsdWU7XG4gIHJ1bnRpbWU6IG51bWJlcjtcbiAgcmVzb3VyY2U/OiBzdHJpbmc7XG4gIGtpbmQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1ldHJpY3NTZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ01ldHJpY3NTZXJ2aWNlJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21ldHJpY3NDb25maWd1cmF0aW9uOiBNZXRyaWNzQ29uZmlndXJhdGlvbjtcbiAgcHJpdmF0ZSByZWFkb25seSBfZXhwb25lbnRpYWxCYWNrb2ZmOiBFeHBvbmVudGlhbEJhY2tvZmY7XG4gIHByaXZhdGUgX21ldHJpY3M6IEFycmF5PElNZXRyaWNSZWNvcmQ+ID0gW107XG4gIHByaXZhdGUgX2lzU2VuZGluZzogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfZmFpbHVyZUNvdW50ID0gMDtcbiAgcHJpdmF0ZSBfZG9tYWluID0gbG9jYXRpb24uaG9zdG5hbWU7XG5cbiAgY29uc3RydWN0b3IobWV0cmljc0NvbmZpZ3VyYXRpb246IE1ldHJpY3NDb25maWd1cmF0aW9uKSB7XG4gICAgdGhpcy5fbWV0cmljc0NvbmZpZ3VyYXRpb24gPSBtZXRyaWNzQ29uZmlndXJhdGlvbjtcbiAgICB0aGlzLl9leHBvbmVudGlhbEJhY2tvZmYgPSBuZXcgRXhwb25lbnRpYWxCYWNrb2ZmKCk7XG4gIH1cblxuICBnZXQgbWV0cmljc0NvbmZpZ3VyYXRpb24oKTogTWV0cmljc0NvbmZpZ3VyYXRpb24ge1xuICAgIHJldHVybiB0aGlzLl9tZXRyaWNzQ29uZmlndXJhdGlvbjtcbiAgfVxuXG4gIHB1c2gobWV0cmljOiBJTWV0cmljKTogdm9pZCB7XG4gICAgY29uc3Qge3N0cmVhbUlkLCB2YWx1ZSwgcHJldmlvdXNWYWx1ZSwgcnVudGltZSwgcmVzb3VyY2UsIGtpbmR9ID0gbWV0cmljO1xuICAgIGNvbnN0IG1ldHJpY1R5cGUgPSBuZXcgTWV0cmljVHlwZShtZXRyaWMubWV0cmljVHlwZSk7XG5cbiAgICBpZiAodGhpcy5fbWV0cmljc0NvbmZpZ3VyYXRpb24udGhyZXNob2xkID4gbWV0cmljVHlwZS5nZXRUZWxlbWV0cnlMZXZlbCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbWV0cmljUmVjb3JkID0ge1xuICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICB0ZW5hbmN5OiB0aGlzLl9tZXRyaWNzQ29uZmlndXJhdGlvbi50ZW5hbmN5LFxuICAgICAgc2Vzc2lvbklkOiB0aGlzLl9tZXRyaWNzQ29uZmlndXJhdGlvbi5zZXNzaW9uSWQsXG4gICAgICBzdHJlYW1JZCxcbiAgICAgIG1ldHJpYzogbWV0cmljVHlwZS5nZXROYW1lKCksXG4gICAgICB2YWx1ZSxcbiAgICAgIHByZXZpb3VzVmFsdWUsXG4gICAgICBmdWxsUXVhbGlmaWVkTmFtZTogdGhpcy5fZG9tYWluLFxuICAgICAgZW52aXJvbm1lbnQ6IHRoaXMuX21ldHJpY3NDb25maWd1cmF0aW9uLmVudmlyb25tZW50LFxuICAgICAgdmVyc2lvbjogVmVyc2lvbk1hbmFnZXIuc2RrVmVyc2lvbixcbiAgICAgIHJ1bnRpbWUsXG4gICAgICByZXNvdXJjZSxcbiAgICAgIGtpbmRcbiAgICB9O1xuXG4gICAgdGhpcy5fbWV0cmljcy5wdXNoKG1ldHJpY1JlY29yZCk7XG5cbiAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5zZW5kTWV0cmljc0lmQWJsZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzZW5kTWV0cmljcyhtZXRyaWNzTWVzc2FnZXM6IEFycmF5PElNZXRyaWNSZWNvcmQ+KTogUHJvbWlzZTxSZXNwb25zZT4ge1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG5cbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoe3JlY29yZHM6IG1ldHJpY3NNZXNzYWdlc30pKTtcblxuICAgIHJldHVybiBhd2FpdCBmZXRjaCh0aGlzLl9tZXRyaWNzQ29uZmlndXJhdGlvbi51cmwsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgYm9keTogZm9ybURhdGFcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2VuZE1ldHJpY3NJZkFibGUoKTogUHJvbWlzZTxSZXNwb25zZSB8IHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fbWV0cmljcy5sZW5ndGggPD0gMCB8fCB0aGlzLl9pc1NlbmRpbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9pc1NlbmRpbmcgPSB0cnVlO1xuXG4gICAgY29uc3QgbWV0cmljc01lc3NhZ2VzID0gdGhpcy5fbWV0cmljcy5zbGljZSgwLCByZXF1ZXN0U2l6ZUxpbWl0KTtcblxuICAgIHRoaXMuX21ldHJpY3MgPSB0aGlzLl9tZXRyaWNzLnNsaWNlKHJlcXVlc3RTaXplTGltaXQpO1xuXG4gICAgcmV0dXJuIHRoaXMuc2VuZE1ldHJpY3MobWV0cmljc01lc3NhZ2VzKS50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgIGlmICh0aGlzLmlzUmVzcG9uc2VTdGF0dXNDb2RlUmV0cnlhYmxlKHJlc3BvbnNlKSkge1xuICAgICAgICBpZiAodGhpcy5fbWV0cmljcy5sZW5ndGggPD0gbWF4QnVmZmVyZWRSZWNvcmRzKSB7XG4gICAgICAgICAgdGhpcy5fZmFpbHVyZUNvdW50Kys7XG5cbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX21ldHJpY3MgPSBbLi4ubWV0cmljc01lc3NhZ2VzLCAuLi50aGlzLl9tZXRyaWNzXTtcblxuICAgICAgICAgICAgdGhpcy5faXNTZW5kaW5nID0gZmFsc2U7XG5cbiAgICAgICAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLnNlbmRNZXRyaWNzSWZBYmxlKCk7XG4gICAgICAgICAgfSwgdGhpcy5fZXhwb25lbnRpYWxCYWNrb2ZmLmdldEV4cG9uZW50aWFsQmFja29mZkludGVydmFsQnlGYWlsdXJlQ291bnQodGhpcy5fZmFpbHVyZUNvdW50KSk7XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ1RvbyBtYW55IGNhY2hlZCBtZXRyaWMgcmVjb3JkcyBbJXNdLCBkcm9wcGluZyBbJXNdIHJlY29yZHMnLCB0aGlzLl9tZXRyaWNzLmxlbmd0aCwgbWV0cmljc01lc3NhZ2VzLmxlbmd0aCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2lzU2VuZGluZyA9IGZhbHNlO1xuICAgICAgdGhpcy5fZmFpbHVyZUNvdW50ID0gMDtcblxuICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuc2VuZE1ldHJpY3NJZkFibGUoKTtcblxuICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgIH0pLmNhdGNoKCgpID0+IHtcbiAgICAgIHRoaXMuX2lzU2VuZGluZyA9IGZhbHNlO1xuXG4gICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5zZW5kTWV0cmljc0lmQWJsZSgpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBpc1Jlc3BvbnNlU3RhdHVzQ29kZVJldHJ5YWJsZSh7c3RhdHVzfTogUmVzcG9uc2UpOiBib29sZWFuIHtcbiAgICByZXR1cm4gL141XFxkezJ9JC8udGVzdChzdGF0dXMudG9TdHJpbmcoKSk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmVudW0gTWV0cmljc1R5cGUge1xuICBUaW1lVG9GaXJzdEZyYW1lLFxuICBDaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lLFxuICBTdGFsbGVkLFxuICBCdWZmZXJpbmcsXG4gIFNldHVwQ29tcGxldGVkLFxuICBTZXR1cEZhaWxlZCxcbiAgUm91bmRUcmlwVGltZSxcbiAgRG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHksXG4gIE5ldHdvcmtUeXBlLFxuICBSZXNvbHV0aW9uQ2hhbmdlZCxcbiAgQXBwbGljYXRpb25Gb3JlZ3JvdW5kLFxuICBBcHBsaWNhdGlvbkJhY2tncm91bmRcbn1cblxuZXhwb3J0IGRlZmF1bHQgTWV0cmljc1R5cGU7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge1RlbGVtZXRyeUxldmVsLCBUZWxlbWV0cnlMZXZlbFR5cGV9IGZyb20gJy4vTWV0cmljc0NvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZWxlbWV0cnlMZXZlbE1hcHBpbmcge1xuICBzdGF0aWMgY29udmVydFRlbGVtZXRyeUxldmVsVG9UZWxlbWV0cnlMZXZlbFR5cGUodGVsZW1ldHJ5TGV2ZWw6IFRlbGVtZXRyeUxldmVsKTogVGVsZW1ldHJ5TGV2ZWxUeXBlIHtcbiAgICBzd2l0Y2ggKHRlbGVtZXRyeUxldmVsKSB7XG4gICAgICBjYXNlIFRlbGVtZXRyeUxldmVsLk9mZjpcbiAgICAgICAgcmV0dXJuICdPZmYnO1xuICAgICAgY2FzZSBUZWxlbWV0cnlMZXZlbC5Fc3NlbnRpYWw6XG4gICAgICAgIHJldHVybiAnRXNzZW50aWFsJztcbiAgICAgIGNhc2UgVGVsZW1ldHJ5TGV2ZWwuQWxsOlxuICAgICAgICByZXR1cm4gJ0FsbCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZSh0ZWxlbWV0cnlMZXZlbCk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGNvbnZlcnRUZWxlbWV0cnlMZXZlbFR5cGVUb1RlbGVtZXRyeUxldmVsKHRlbGVtZXRyeUxldmVsVHlwZTogVGVsZW1ldHJ5TGV2ZWxUeXBlKTogVGVsZW1ldHJ5TGV2ZWwge1xuICAgIHN3aXRjaCAodGVsZW1ldHJ5TGV2ZWxUeXBlKSB7XG4gICAgICBjYXNlICdPZmYnOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuT2ZmO1xuICAgICAgY2FzZSAnRXNzZW50aWFsJzpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkVzc2VudGlhbDtcbiAgICAgIGNhc2UgJ0FsbCc6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZSh0ZWxlbWV0cnlMZXZlbFR5cGUpO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IEJ1aWxkRmVhdHVyZXMgZnJvbSAnLi4vZW52aXJvbm1lbnQvQnVpbGRGZWF0dXJlcyc7XG5pbXBvcnQge1RlbGVtZXRyeUxldmVsfSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NDb25maWd1cmF0aW9uJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVsZW1ldHJ5RGVmYXVsdCB7XG4gIHN0YXRpYyBnZXQgZGVmYXVsdFRlbGVtZXRyeUxldmVsKCk6IFRlbGVtZXRyeUxldmVsIHtcbiAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWxbQnVpbGRGZWF0dXJlcy5zZW5kTWV0cmljc107XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBQcm9taXNlSGFuZGxlciBmcm9tICcuL1Byb21pc2VIYW5kbGVyJztcblxuY2xhc3MgUHJvbWlzZSB7XG4gIF9zdGF0ZTogbnVtYmVyO1xuICBfaGFuZGxlZDogYm9vbGVhbjtcbiAgX3ZhbHVlOiBQcm9taXNlO1xuICBfZGVmZXJyZWRzOiBBcnJheTxQcm9taXNlSGFuZGxlcj47XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbiAgLy8gQHRzLWlnbm9yZVxuICB0aGVuKG9uRnVsZmlsbGVkOiBGdW5jdGlvbiwgb25SZWplY3RlZDogRnVuY3Rpb24pOiBQcm9taXNlIHwgdm9pZDtcblxuICBjb25zdHJ1Y3RvcihjYWxsYmFjaykge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBQcm9taXNlKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUHJvbWlzZXMgbXVzdCBiZSBjb25zdHJ1Y3RlZCB2aWEgbmV3Jyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignbm90IGEgZnVuY3Rpb24nKTtcbiAgICB9XG5cbiAgICB0aGlzLl9zdGF0ZSA9IDA7XG4gICAgdGhpcy5faGFuZGxlZCA9IGZhbHNlO1xuICAgIHRoaXMuX3ZhbHVlID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuX2RlZmVycmVkcyA9IFtdO1xuXG4gICAgdGhpcy5kb1Jlc29sdmUoY2FsbGJhY2spO1xuICB9XG5cbiAgZG9SZXNvbHZlKGNhbGxiYWNrOiBGdW5jdGlvbik6IHZvaWQge1xuICAgIGxldCBkb25lID0gZmFsc2U7XG5cbiAgICB0cnkge1xuICAgICAgY2FsbGJhY2soXG4gICAgICAgIHZhbHVlID0+IHtcbiAgICAgICAgICBpZiAoZG9uZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgICAgIHRoaXMucHJvbWlzZVJlc29sdmUodmFsdWUpO1xuICAgICAgICB9LFxuICAgICAgICByZWFzb24gPT4ge1xuICAgICAgICAgIGlmIChkb25lKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZG9uZSA9IHRydWU7XG4gICAgICAgICAgdGhpcy5wcm9taXNlUmVqZWN0KHJlYXNvbik7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChkb25lKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZG9uZSA9IHRydWU7XG4gICAgICB0aGlzLnByb21pc2VSZWplY3QoZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIHByb21pc2VSZXNvbHZlKG5ld1ZhbHVlOiBQcm9taXNlIHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgY29uc3QgcHJvbWlzZSA9IHRoaXMgYXMgUHJvbWlzZTtcblxuICAgIHRyeSB7XG4gICAgICAvLyBQcm9taXNlIFJlc29sdXRpb24gUHJvY2VkdXJlOiBodHRwczovL2dpdGh1Yi5jb20vUHJvbWlzZXMtYXBsdXMvUHJvbWlzZXMtc3BlYyN0aGUtUHJvbWlzZS1yZXNvbHV0aW9uLXByb2NlZHVyZVxuICAgICAgaWYgKG5ld1ZhbHVlID09PSBwcm9taXNlKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0EgUHJvbWlzZSBjYW5ub3QgYmUgcmVzb2x2ZWQgd2l0aCBpdCBzZWxmLicpO1xuICAgICAgfVxuXG4gICAgICBpZiAobmV3VmFsdWUgJiYgKHR5cGVvZiBuZXdWYWx1ZSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIG5ld1ZhbHVlID09PSAnZnVuY3Rpb24nKSkge1xuICAgICAgICBjb25zdCB0aGVuID0gbmV3VmFsdWUudGhlbjtcblxuICAgICAgICBpZiAobmV3VmFsdWUgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgcHJvbWlzZS5fc3RhdGUgPSAzO1xuICAgICAgICAgIHByb21pc2UuX3ZhbHVlID0gbmV3VmFsdWU7XG4gICAgICAgICAgcHJvbWlzZS5maW5hbGUoKTtcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdGhlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHByb21pc2UuZG9SZXNvbHZlKGZ1bmN0aW9uKCk6IHZvaWQge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1yZXN0LXBhcmFtc1xuICAgICAgICAgICAgdGhlbi5hcHBseShuZXdWYWx1ZSwgYXJndW1lbnRzKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBwcm9taXNlLl9zdGF0ZSA9IDE7XG4gICAgICBwcm9taXNlLl92YWx1ZSA9IG5ld1ZhbHVlO1xuICAgICAgcHJvbWlzZS5maW5hbGUoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBwcm9taXNlLnByb21pc2VSZWplY3QoZSk7XG4gICAgfVxuICB9XG5cbiAgcHJvbWlzZVJlamVjdChuZXdWYWx1ZTogUHJvbWlzZSB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICAgIHRoaXMuX3N0YXRlID0gMjtcbiAgICB0aGlzLl92YWx1ZSA9IG5ld1ZhbHVlO1xuICAgIHRoaXMuZmluYWxlKCk7XG4gIH1cblxuICBmaW5hbGUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3N0YXRlID09PSAyICYmIHRoaXMuX2RlZmVycmVkcy5sZW5ndGggPT09IDApIHtcbiAgICAgIFByb21pc2UuX2ltbWVkaWF0ZSgoKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5faGFuZGxlZCkge1xuICAgICAgICAgIFByb21pc2UuX3VuaGFuZGxlZFJlamVjdGlvbih0aGlzLl92YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSB0aGlzLl9kZWZlcnJlZHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIHRoaXMuaGFuZGxlKHRoaXMuX2RlZmVycmVkc1tpXSk7XG4gICAgfVxuXG4gICAgdGhpcy5fZGVmZXJyZWRzID0gbnVsbDtcbiAgfVxuXG4gIGhhbmRsZShkZWZlcnJlZDogUHJvbWlzZUhhbmRsZXIpOiB2b2lkIHtcbiAgICBsZXQgcHJvbWlzZSA9IHRoaXMgYXMgUHJvbWlzZTtcblxuICAgIHdoaWxlIChwcm9taXNlLl9zdGF0ZSA9PT0gMykge1xuICAgICAgcHJvbWlzZSA9IHByb21pc2UuX3ZhbHVlO1xuICAgIH1cblxuICAgIGlmIChwcm9taXNlLl9zdGF0ZSA9PT0gMCkge1xuICAgICAgcHJvbWlzZS5fZGVmZXJyZWRzLnB1c2goZGVmZXJyZWQpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcHJvbWlzZS5faGFuZGxlZCA9IHRydWU7XG4gICAgUHJvbWlzZS5faW1tZWRpYXRlKCgpID0+IHtcbiAgICAgIGNvbnN0IGNhbGxiYWNrID0gcHJvbWlzZS5fc3RhdGUgPT09IDEgPyBkZWZlcnJlZC5vbkZ1bGZpbGxlZCA6IGRlZmVycmVkLm9uUmVqZWN0ZWQ7XG5cbiAgICAgIGlmIChjYWxsYmFjayA9PT0gbnVsbCkge1xuICAgICAgICBpZiAocHJvbWlzZS5fc3RhdGUgPT09IDEpIHtcbiAgICAgICAgICBkZWZlcnJlZC5wcm9taXNlLnByb21pc2VSZXNvbHZlKHByb21pc2UuX3ZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkZWZlcnJlZC5wcm9taXNlLnByb21pc2VSZWplY3QocHJvbWlzZS5fdmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBsZXQgcmVzdWx0O1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXN1bHQgPSBjYWxsYmFjayhwcm9taXNlLl92YWx1ZSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGRlZmVycmVkLnByb21pc2UucHJvbWlzZVJlamVjdChlKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGRlZmVycmVkLnByb21pc2UucHJvbWlzZVJlc29sdmUocmVzdWx0KTtcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBhbGwoYXJyOiBBcnJheTxQcm9taXNlPik6IFByb21pc2Uge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkoYXJyKSkge1xuICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBUeXBlRXJyb3IoJ1Byb21pc2UuYWxsIGFjY2VwdHMgYW4gYXJyYXknKSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcnIpO1xuXG4gICAgICBpZiAoYXJncy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHJlc29sdmUoW10pO1xuICAgICAgfVxuXG4gICAgICBsZXQgcmVtYWluaW5nID0gYXJncy5sZW5ndGg7XG4gICAgICBjb25zdCBtYW5hZ2VSZXNwb25zZSA9IChpLCB2YWx1ZSk6IHZvaWQgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGlmICh2YWx1ZSAmJiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyB8fCB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpKSB7XG4gICAgICAgICAgICBjb25zdCB0aGVuID0gdmFsdWUudGhlbjtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgIHRoZW4uY2FsbChcbiAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICB2YWx1ZSA9PiBtYW5hZ2VSZXNwb25zZShpLCB2YWx1ZSksXG4gICAgICAgICAgICAgICAgcmVqZWN0XG4gICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGFyZ3NbaV0gPSB2YWx1ZTtcblxuICAgICAgICAgIGlmICgtLXJlbWFpbmluZyA9PT0gMCkge1xuICAgICAgICAgICAgcmVzb2x2ZShhcmdzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIG1hbmFnZVJlc3BvbnNlKGksIGFyZ3NbaV0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIHJlc29sdmUodmFsdWUpOiBQcm9taXNlIHtcbiAgICBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZS5jb25zdHJ1Y3RvciA9PT0gUHJvbWlzZSkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHJlc29sdmUodmFsdWUpKTtcbiAgfVxuXG4gIHN0YXRpYyByZWplY3QodmFsdWUpOiBQcm9taXNlIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKF8sIHJlamVjdCkgPT4gcmVqZWN0KHZhbHVlKSk7XG4gIH1cblxuICBzdGF0aWMgcmFjZShhcnI6IEFycmF5PFByb21pc2U+KTogUHJvbWlzZSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShhcnIpKSB7XG4gICAgICAgIHJldHVybiByZWplY3QobmV3IFR5cGVFcnJvcignUHJvbWlzZS5yYWNlIGFjY2VwdHMgYW4gYXJyYXknKSk7XG4gICAgICB9XG5cbiAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBhcnIubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgUHJvbWlzZS5yZXNvbHZlKGFycltpXSkudGhlbihyZXNvbHZlLCByZWplY3QpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIF9pbW1lZGlhdGUoY2FsbGJhY2s6IEZ1bmN0aW9uKTogdm9pZCB7XG4gICAgY29uc3QgaWdub3JlZCA9IHNldFRpbWVvdXQoY2FsbGJhY2ssIDApO1xuICB9XG5cbiAgc3RhdGljIF91bmhhbmRsZWRSZWplY3Rpb24oZXJyb3IpOiB2b2lkIHtcbiAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnICYmIGNvbnNvbGUpIHtcbiAgICAgIGNvbnNvbGUud2FybignUG9zc2libGUgVW5oYW5kbGVkIFByb21pc2UgUmVqZWN0aW9uOicsIGVycm9yKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25zb2xlXG4gICAgfVxuICB9XG59XG5cblByb21pc2UucHJvdG90eXBlWydjYXRjaCddID0gZnVuY3Rpb24ob25SZWplY3RlZDogRnVuY3Rpb24pOiBQcm9taXNlIHwgdm9pZCB7XG4gIHJldHVybiB0aGlzLnRoZW4obnVsbCwgb25SZWplY3RlZCk7XG59O1xuXG5Qcm9taXNlLnByb3RvdHlwZVsndGhlbiddID0gZnVuY3Rpb24ob25GdWxmaWxsZWQ6IEZ1bmN0aW9uLCBvblJlamVjdGVkOiBGdW5jdGlvbik6IFByb21pc2UgfCB2b2lkIHtcbiAgY29uc3QgcHJvbWlzZSA9IG5ldyB0aGlzLmNvbnN0cnVjdG9yKCgpID0+IG51bGwpO1xuXG4gIHRoaXMuaGFuZGxlKG5ldyBQcm9taXNlSGFuZGxlcihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCwgcHJvbWlzZSkpO1xuXG4gIHJldHVybiBwcm9taXNlO1xufTtcblxuUHJvbWlzZS5wcm90b3R5cGVbJ2ZpbmFsbHknXSA9IGZ1bmN0aW9uKGNhbGxiYWNrOiBGdW5jdGlvbik6IFByb21pc2UgfCB2b2lkIHtcbiAgY29uc3QgY29uc3RydWN0b3IgPSB0aGlzLmNvbnN0cnVjdG9yO1xuXG4gIHJldHVybiB0aGlzLnRoZW4oXG4gICAgdmFsdWUgPT4gY29uc3RydWN0b3IucmVzb2x2ZShjYWxsYmFjaygpKS50aGVuKCgpID0+IHZhbHVlKSxcbiAgICByZWFzb24gPT4gY29uc3RydWN0b3IucmVzb2x2ZShjYWxsYmFjaygpKS50aGVuKCgpID0+IGNvbnN0cnVjdG9yLnJlamVjdChyZWFzb24pKVxuICApO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgUHJvbWlzZTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBQcm9taXNlIGZyb20gJy4vUHJvbWlzZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFByb21pc2VIYW5kbGVyIHtcbiAgb25GdWxmaWxsZWQ6IEZ1bmN0aW9uO1xuICBvblJlamVjdGVkOiBGdW5jdGlvbjtcbiAgcHJvbWlzZTogUHJvbWlzZTtcblxuICBjb25zdHJ1Y3RvcihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCwgcHJvbWlzZSkge1xuICAgIHRoaXMub25GdWxmaWxsZWQgPSB0eXBlb2Ygb25GdWxmaWxsZWQgPT09ICdmdW5jdGlvbicgPyBvbkZ1bGZpbGxlZCA6IG51bGw7XG4gICAgdGhpcy5vblJlamVjdGVkID0gdHlwZW9mIG9uUmVqZWN0ZWQgPT09ICdmdW5jdGlvbicgPyBvblJlamVjdGVkIDogbnVsbDtcbiAgICB0aGlzLnByb21pc2UgPSBwcm9taXNlO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vcngvU3ViamVjdCc7XG5pbXBvcnQgRmVhdHVyZUVuYWJsZW1lbnQgZnJvbSAnLi4vZW52aXJvbm1lbnQvRmVhdHVyZUVuYWJsZW1lbnQnO1xuaW1wb3J0IElQZWVyQ29ubmVjdGlvbiBmcm9tICcuL0lQZWVyQ29ubmVjdGlvbic7XG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uRmFjdG9yeSBmcm9tICcuL0lQZWVyQ29ubmVjdGlvbkZhY3RvcnknO1xuaW1wb3J0IFZhbmlsbGFQZWVyQ29ubmVjdGlvbkZhY3RvcnkgZnJvbSAnLi9WYW5pbGxhUGVlckNvbm5lY3Rpb25GYWN0b3J5JztcblxuZXhwb3J0IGludGVyZmFjZSBJUGVlckNvbm5lY3Rpb25PZmZlckluaXQge1xuICBhdWRpb1RyYW5zY2VpdmVyPzogUlRDUnRwVHJhbnNjZWl2ZXI7XG4gIHZpZGVvVHJhbnNjZWl2ZXI/OiBSVENSdHBUcmFuc2NlaXZlcjtcbiAgcGVlckNvbm5lY3Rpb246IElQZWVyQ29ubmVjdGlvbjtcbiAgbG9jYWxPZmZlcjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGVlckNvbm5lY3Rpb25TZXJ2aWNlIHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdQZWVyQ29ubmVjdGlvblNlcnZpY2UnKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX3BlZXJDb25uZWN0aW9uRmFjdG9yeTogU3ViamVjdDxJUGVlckNvbm5lY3Rpb25GYWN0b3J5PiA9IG5ldyBTdWJqZWN0PElQZWVyQ29ubmVjdGlvbkZhY3Rvcnk+KG5ldyBWYW5pbGxhUGVlckNvbm5lY3Rpb25GYWN0b3J5KCkpO1xuICBwcml2YXRlIHN0YXRpYyBfY2FjaGVkOiB7XG4gICAgZGlyZWN0aW9uPzogUlRDUnRwVHJhbnNjZWl2ZXJEaXJlY3Rpb247XG4gICAgcGVlckNvbm5lY3Rpb246IFByb21pc2U8SVBlZXJDb25uZWN0aW9uT2ZmZXJJbml0PjtcbiAgfTtcblxuICBzdGF0aWMgZ2V0IHBlZXJDb25uZWN0aW9uRmFjdG9yeSgpOiBTdWJqZWN0PElQZWVyQ29ubmVjdGlvbkZhY3Rvcnk+IHtcbiAgICByZXR1cm4gUGVlckNvbm5lY3Rpb25TZXJ2aWNlLl9wZWVyQ29ubmVjdGlvbkZhY3Rvcnk7XG4gIH1cblxuICBzdGF0aWMgaW5pdGlhdGVJbml0aWFsUHJlY2FjaGluZygpOiB2b2lkIHtcbiAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQuaXNQcmVjYWNoaW5nRW5hYmxlZCkge1xuICAgICAgY29uc3QgaWdub3JlZCA9IFBlZXJDb25uZWN0aW9uU2VydmljZS5wcmVjYWNoZUNyZWF0ZVBlZXJDb25uZWN0aW9uT2ZmZXIoKVxuICAgICAgICAuY2F0Y2goZSA9PiBQZWVyQ29ubmVjdGlvblNlcnZpY2UuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHByZS1jYWNoZSBwZWVyIGNvbm5lY3Rpb24gb2ZmZXInLCBlKSk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGFzeW5jIHByZWNhY2hlQ3JlYXRlUGVlckNvbm5lY3Rpb25PZmZlcigpOiBQcm9taXNlPHsgcGVlckNvbm5lY3Rpb246IFByb21pc2U8SVBlZXJDb25uZWN0aW9uT2ZmZXJJbml0IHwgdm9pZD47IGRpcmVjdGlvbjogUlRDUnRwVHJhbnNjZWl2ZXJEaXJlY3Rpb24gfT4ge1xuICAgIHJldHVybiBQZWVyQ29ubmVjdGlvblNlcnZpY2UuX2NhY2hlZCA9IHtcbiAgICAgIGRpcmVjdGlvbjogJ3JlY3Zvbmx5JyxcbiAgICAgIHBlZXJDb25uZWN0aW9uOiBQZWVyQ29ubmVjdGlvblNlcnZpY2UuY3JlYXRlUGVlckNvbm5lY3Rpb25PZmZlcigpXG4gICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICBQZWVyQ29ubmVjdGlvblNlcnZpY2UuX2NhY2hlZCA9IG51bGw7XG5cbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9KVxuICAgIH07XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgY3JlYXRlUGVlckNvbm5lY3Rpb25PZmZlcihkaXJlY3Rpb246IFJUQ1J0cFRyYW5zY2VpdmVyRGlyZWN0aW9uID0gJ3JlY3Zvbmx5JywgZW5jb2RlZEluc2VydGFibGVTdHJlYW1zID0gZmFsc2UpOiBQcm9taXNlPElQZWVyQ29ubmVjdGlvbk9mZmVySW5pdD4ge1xuICAgIGlmIChQZWVyQ29ubmVjdGlvblNlcnZpY2UuX2NhY2hlZCAmJiBQZWVyQ29ubmVjdGlvblNlcnZpY2UuX2NhY2hlZC5kaXJlY3Rpb24gPT09IGRpcmVjdGlvbiAmJiAhZW5jb2RlZEluc2VydGFibGVTdHJlYW1zKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IFBlZXJDb25uZWN0aW9uU2VydmljZS5fY2FjaGVkLnBlZXJDb25uZWN0aW9uO1xuXG4gICAgICBQZWVyQ29ubmVjdGlvblNlcnZpY2UuX2NhY2hlZCA9IG51bGw7XG5cbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICBjb25zdCBjb25maWd1cmF0aW9uOiBSVENDb25maWd1cmF0aW9uID0gRmVhdHVyZUVuYWJsZW1lbnQuaXNFbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXNTdXBwb3J0ZWQgPyB7ZW5jb2RlZEluc2VydGFibGVTdHJlYW1zfSA6IHVuZGVmaW5lZDtcblxuICAgIHJldHVybiBQZWVyQ29ubmVjdGlvblNlcnZpY2UuX3BlZXJDb25uZWN0aW9uRmFjdG9yeS52YWx1ZS5jcmVhdGVQZWVyQ29ubmVjdGlvbihjb25maWd1cmF0aW9uKVxuICAgICAgLnRoZW4oYXN5bmMgcGVlckNvbm5lY3Rpb24gPT4ge1xuICAgICAgICBjb25zdCBzdXBwb3J0c0FkZFRyYW5zY2VpdmVyID0gcGVlckNvbm5lY3Rpb24uc3VwcG9ydHNBZGRUcmFuc2NlaXZlcjtcbiAgICAgICAgbGV0IHZpZGVvVHJhbnNjZWl2ZXIsIGF1ZGlvVHJhbnNjZWl2ZXI7XG5cbiAgICAgICAgaWYgKHN1cHBvcnRzQWRkVHJhbnNjZWl2ZXIpIHtcbiAgICAgICAgICBhdWRpb1RyYW5zY2VpdmVyID0gcGVlckNvbm5lY3Rpb24uYWRkVHJhbnNjZWl2ZXIoJ2F1ZGlvJywge2RpcmVjdGlvbn0pO1xuICAgICAgICAgIHZpZGVvVHJhbnNjZWl2ZXIgPSBwZWVyQ29ubmVjdGlvbi5hZGRUcmFuc2NlaXZlcigndmlkZW8nLCB7ZGlyZWN0aW9ufSk7XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYXVkaW9UcmFuc2NlaXZlcixcbiAgICAgICAgICAgIHZpZGVvVHJhbnNjZWl2ZXIsXG4gICAgICAgICAgICBwZWVyQ29ubmVjdGlvbjogcGVlckNvbm5lY3Rpb24sXG4gICAgICAgICAgICBsb2NhbE9mZmVyOiBhd2FpdCBwZWVyQ29ubmVjdGlvbi5jcmVhdGVPZmZlcih1bmRlZmluZWQpXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBkaXJlY3Rpb24gPT09ICdyZWN2b25seScgPyB7XG4gICAgICAgICAgb2ZmZXJUb1JlY2VpdmVBdWRpbzogdHJ1ZSxcbiAgICAgICAgICBvZmZlclRvUmVjZWl2ZVZpZGVvOiB0cnVlXG4gICAgICAgIH0gOiB7fTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHBlZXJDb25uZWN0aW9uOiBwZWVyQ29ubmVjdGlvbixcbiAgICAgICAgICBsb2NhbE9mZmVyOiBhd2FpdCBwZWVyQ29ubmVjdGlvbi5jcmVhdGVPZmZlcihvcHRpb25zKVxuICAgICAgICB9O1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignUGVlckNvbm5lY3Rpb25TZXJ2aWNlIGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufVxuXG5QZWVyQ29ubmVjdGlvblNlcnZpY2UuaW5pdGlhdGVJbml0aWFsUHJlY2FjaGluZygpOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUnRjQ29uZmlndXJhdGlvbk1hbmFnZXIge1xuICBzdGF0aWMgdHJ1bmNhdGVJY2VTZXJ2ZXJzKGNvbmZpZ3VyYXRpb246IFJUQ0NvbmZpZ3VyYXRpb24pOiBSVENDb25maWd1cmF0aW9uIHtcbiAgICBjb25zdCBpY2VTZXJ2ZXJzOiBSVENJY2VTZXJ2ZXJbXSA9IFtdO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb25maWd1cmF0aW9uLmljZVNlcnZlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHVybHM6IHN0cmluZ1tdID0gW107XG5cbiAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCAyOyBpbmRleCsrKSB7XG4gICAgICAgIGNvbnN0IHVybCA9IGNvbmZpZ3VyYXRpb24uaWNlU2VydmVyc1tpXS51cmxzW2luZGV4XTtcblxuICAgICAgICBpZiAodXJsKSB7XG4gICAgICAgICAgdXJscy5wdXNoKGNvbmZpZ3VyYXRpb24uaWNlU2VydmVyc1tpXS51cmxzW2luZGV4XSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWNlU2VydmVycy5wdXNoKHtcbiAgICAgICAgdXJsczogdXJscyxcbiAgICAgICAgdXNlcm5hbWU6IGNvbmZpZ3VyYXRpb24uaWNlU2VydmVyc1tpXS51c2VybmFtZSxcbiAgICAgICAgY3JlZGVudGlhbDogY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzW2ldLmNyZWRlbnRpYWxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbmZpZ3VyYXRpb24uaWNlU2VydmVycyA9IGljZVNlcnZlcnM7XG5cbiAgICByZXR1cm4gY29uZmlndXJhdGlvbjtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdSdGNDb25maWd1cmF0aW9uTWFuYWdlciBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBJUGVlckNvbm5lY3Rpb24gZnJvbSAnLi9JUGVlckNvbm5lY3Rpb24nO1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vcngvU3ViamVjdCc7XG5pbXBvcnQgRmVhdHVyZUVuYWJsZW1lbnQgZnJvbSAnLi4vZW52aXJvbm1lbnQvRmVhdHVyZUVuYWJsZW1lbnQnO1xuaW1wb3J0IFNkcFBhcnNlciBmcm9tICcuL1NkcFBhcnNlcic7XG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVJ0Y01vbml0b3JTdGF0aXN0aWMge1xuICBba2luZDogc3RyaW5nXTogSVJ0Y1N0YXRpc3RpYztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJTGVnYWN5UlRDU3RhdHNSZXBvcnQge1xuICByZXN1bHQ6ICgpID0+IElMZWdhY3lSVENTdGF0c1JlcG9ydEl0ZW1bXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJTGVnYWN5UlRDU3RhdHNSZXBvcnRJdGVtIGV4dGVuZHMgUlRDU3RhdHNSZXBvcnQge1xuICB0eXBlOiBzdHJpbmc7XG4gIG5hbWVzOiAoKSA9PiBzdHJpbmdbXTtcbiAgc3RhdDogKG5hbWUpID0+IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJUnRjU3RhdGlzdGljIHtcbiAgc3NyYz86IHN0cmluZztcbiAgbWVkaWFUeXBlPzogc3RyaW5nO1xuICB0aW1lc3RhbXA6IG51bWJlcjtcbiAgYml0cmF0ZT86IG51bWJlcjtcbiAgYnl0ZXNSZWNlaXZlZD86IG51bWJlcjtcbiAgZnJhbWVzRGVjb2RlZD86IG51bWJlcjtcbiAgcGFja2V0c0xvc3Q/OiBudW1iZXI7XG4gIHBhY2tldHNSZWNlaXZlZD86IG51bWJlcjtcbiAgY29kZWM/OiBzdHJpbmc7XG4gIGZwcz86IG51bWJlcjtcbiAgcm91bmRUcmlwVGltZT86IG51bWJlcjtcbiAgbGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wPzogbnVtYmVyO1xufVxuXG5jb25zdCB1cGRhdGVTdGF0aXN0aWNUaW1lb3V0ID0gMTAwMDtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUnRjQ29ubmVjdGlvbk1vbml0b3IgaW1wbGVtZW50cyBJRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2VzdGltYXRlZFJvdW5kVHJpcFRpbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfZXN0aW1hdGVkVmlkZW9Db2RlYzogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9lc3RpbWF0ZWRBdWRpb0NvZGVjOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3J0Y1N0YXRpc3RpYzogU3ViamVjdDxJUnRjTW9uaXRvclN0YXRpc3RpYz4gPSBuZXcgU3ViamVjdDxJUnRjTW9uaXRvclN0YXRpc3RpYz4oe30pO1xuICBwcml2YXRlIF9wZWVyQ29ubmVjdGlvbjogSVBlZXJDb25uZWN0aW9uO1xuICBwcml2YXRlIF9pc01vbml0b3JSdW5uaW5nID0gdHJ1ZTtcbiAgcHJpdmF0ZSBfdXBkYXRlVGltZW91dDogbnVtYmVyO1xuICBwcml2YXRlIF90cmFja3NUb01vbml0b3I6IHN0cmluZ1tdO1xuXG4gIGNvbnN0cnVjdG9yKHBlZXJDb25uZWN0aW9uOiBJUGVlckNvbm5lY3Rpb24sIG1lZGlhU3RyZWFtOiBNZWRpYVN0cmVhbSwgZXN0aW1hdGVkUm91bmRUcmlwVGltZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24gPSBwZWVyQ29ubmVjdGlvbjtcbiAgICB0aGlzLl9lc3RpbWF0ZWRSb3VuZFRyaXBUaW1lID0gZXN0aW1hdGVkUm91bmRUcmlwVGltZTtcbiAgICB0aGlzLl90cmFja3NUb01vbml0b3IgPSBtZWRpYVN0cmVhbS5nZXRUcmFja3MoKS5tYXAodHJhY2sgPT4gdHJhY2sua2luZCkgfHwgW107XG5cbiAgICBpZiAodGhpcy5fcGVlckNvbm5lY3Rpb24pIHtcbiAgICAgIGlmICghRmVhdHVyZUVuYWJsZW1lbnQuZ2V0Q3VycmVudE9mZmVyRGlzYWJsZWQpIHtcbiAgICAgICAgY29uc3QgcGFyc2VkU0RQID0gbmV3IFNkcFBhcnNlcih0aGlzLl9wZWVyQ29ubmVjdGlvbi5jdXJyZW50UmVtb3RlRGVzY3JpcHRpb24uc2RwKTtcblxuICAgICAgICB0aGlzLl9lc3RpbWF0ZWRBdWRpb0NvZGVjID0gcGFyc2VkU0RQLmF1ZGlvQ29kZWM7XG4gICAgICAgIHRoaXMuX2VzdGltYXRlZFZpZGVvQ29kZWMgPSBwYXJzZWRTRFAudmlkZW9Db2RlYztcbiAgICAgIH1cblxuICAgICAgdGhpcy51cGRhdGVTdGF0aXN0aWMoKTtcbiAgICB9XG4gIH1cblxuICBnZXQgcnRjU3RhdGlzdGljKCk6IFN1YmplY3Q8SVJ0Y01vbml0b3JTdGF0aXN0aWM+IHtcbiAgICByZXR1cm4gdGhpcy5fcnRjU3RhdGlzdGljO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9pc01vbml0b3JSdW5uaW5nID0gZmFsc2U7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24gPSBudWxsO1xuXG4gICAgaWYgKHRoaXMuX3VwZGF0ZVRpbWVvdXQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLl91cGRhdGVUaW1lb3V0KTtcbiAgICAgIHRoaXMuX3VwZGF0ZVRpbWVvdXQgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgdXBkYXRlU3RhdGlzdGljKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmIChGZWF0dXJlRW5hYmxlbWVudC5nZXRTdGF0c1Byb21pc2VCYXNlZERpc2FibGVkKSB7XG4gICAgICBjb25zdCBpZ25vcmVkID0gYXdhaXQgdGhpcy51cGRhdGVTdGF0aXN0aWNMZWdhY3koKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFNhZmFyaSAxMSBkb2VzbnQgaGF2ZSBraW5kIG9yIG1lZGlhVHlwZSBzbyB3ZSBuZWVkIHRvIHRha2UgaXQgZnJvbSB0aGUgaW5ib3VuZC1ydHAgb2JqZWN0IGlkXG4gICAgY29uc3QgZ2V0S2luZEZvclNhZmFyaTExID0gKGl0ZW0pOiBzdHJpbmcgPT4gaXRlbS5pZC5pbmNsdWRlcygnQXVkaW8nKSA/ICdhdWRpbycgOiBpdGVtLmlkLmluY2x1ZGVzKCdWaWRlbycpID8gJ3ZpZGVvJyA6ICcnO1xuICAgIGNvbnN0IGlnbm9yZWQgPSBhd2FpdCB0aGlzLl9wZWVyQ29ubmVjdGlvbi5nZXRTdGF0cyhudWxsKVxuICAgICAgLnRoZW4oc3RhdHMgPT4ge1xuICAgICAgICBjb25zdCBydGNTdGF0aXN0aWNzOiBJUnRjTW9uaXRvclN0YXRpc3RpYyA9IHt9O1xuXG4gICAgICAgIGlmIChzdGF0cykge1xuICAgICAgICAgIGxldCByb3VuZFRyaXBUaW1lID0gdGhpcy5fZXN0aW1hdGVkUm91bmRUcmlwVGltZTtcbiAgICAgICAgICBsZXQgbGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wO1xuXG4gICAgICAgICAgc3RhdHMuZm9yRWFjaChyZXBvcnQgPT4ge1xuICAgICAgICAgICAgaWYgKHJlcG9ydC50eXBlID09PSAnY2FuZGlkYXRlLXBhaXInICYmIHJlcG9ydC5jdXJyZW50Um91bmRUcmlwVGltZSkge1xuICAgICAgICAgICAgICByb3VuZFRyaXBUaW1lID0gcmVwb3J0LmN1cnJlbnRSb3VuZFRyaXBUaW1lICogMTAwMDtcblxuICAgICAgICAgICAgICBpZiAocnRjU3RhdGlzdGljc1snYXVkaW8nXSkge1xuICAgICAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbJ2F1ZGlvJ10ucm91bmRUcmlwVGltZSA9IHJvdW5kVHJpcFRpbWU7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAocnRjU3RhdGlzdGljc1sndmlkZW8nXSkge1xuICAgICAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbJ3ZpZGVvJ10ucm91bmRUcmlwVGltZSA9IHJvdW5kVHJpcFRpbWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHJlcG9ydC50eXBlID09PSAnY2FuZGlkYXRlLXBhaXInICYmIHJlcG9ydC5sYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXApIHtcbiAgICAgICAgICAgICAgbGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wID0gcmVwb3J0Lmxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcDtcblxuICAgICAgICAgICAgICBpZiAocnRjU3RhdGlzdGljc1snYXVkaW8nXSkge1xuICAgICAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbJ2F1ZGlvJ10ubGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wID0gbGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKHJ0Y1N0YXRpc3RpY3NbJ3ZpZGVvJ10pIHtcbiAgICAgICAgICAgICAgICBydGNTdGF0aXN0aWNzWyd2aWRlbyddLmxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcCA9IGxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocmVwb3J0LnR5cGUgPT09ICdpbmJvdW5kLXJ0cCcpIHtcbiAgICAgICAgICAgICAgY29uc3Qga2luZCA9IHJlcG9ydC5raW5kIHx8IHJlcG9ydC5tZWRpYVR5cGUgfHwgZ2V0S2luZEZvclNhZmFyaTExKHJlcG9ydCk7XG4gICAgICAgICAgICAgIGxldCBjb2RlYyA9ICcnO1xuXG4gICAgICAgICAgICAgIHN0YXRzLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0uaWQgPT09IHJlcG9ydC5jb2RlY0lkKSB7XG4gICAgICAgICAgICAgICAgICBjb2RlYyA9IGl0ZW0ubWltZVR5cGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICBpZiAoa2luZCAmJiB0aGlzLl90cmFja3NUb01vbml0b3IuaW5jbHVkZXMoa2luZCkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBieXRlcyA9IHJlcG9ydC5ieXRlc1JlY2VpdmVkIHx8IDA7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJldmlvdXNCeXRlc1JlY2VpdmVkID0gdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlPy5ba2luZF0/LmJ5dGVzUmVjZWl2ZWQgPz8gMDtcbiAgICAgICAgICAgICAgICBjb25zdCBieXRlc0RlbHRhID0gYnl0ZXMgLSBwcmV2aW91c0J5dGVzUmVjZWl2ZWQ7XG4gICAgICAgICAgICAgICAgY29uc3QgdGltZURlbHRhID0gcmVwb3J0LnRpbWVzdGFtcCAtIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZT8uW2tpbmRdPy50aW1lc3RhbXA7XG4gICAgICAgICAgICAgICAgY29uc3QgYml0cmF0ZSA9IGJ5dGVzRGVsdGEgJiYgdGltZURlbHRhID8gTWF0aC5mbG9vcig4ICogYnl0ZXNEZWx0YSAvXG4gICAgICAgICAgICAgICAgICB0aW1lRGVsdGEgKiAxMDAwKSA6IDA7XG5cbiAgICAgICAgICAgICAgICBydGNTdGF0aXN0aWNzW2tpbmRdID0ge1xuICAgICAgICAgICAgICAgICAgc3NyYzogcmVwb3J0LnNzcmMsXG4gICAgICAgICAgICAgICAgICBtZWRpYVR5cGU6IGtpbmQsXG4gICAgICAgICAgICAgICAgICB0aW1lc3RhbXA6IHJlcG9ydC50aW1lc3RhbXAsXG4gICAgICAgICAgICAgICAgICBiaXRyYXRlLFxuICAgICAgICAgICAgICAgICAgYnl0ZXNSZWNlaXZlZDogcmVwb3J0LmJ5dGVzUmVjZWl2ZWQsXG4gICAgICAgICAgICAgICAgICBwYWNrZXRzTG9zdDogcmVwb3J0LnBhY2tldHNMb3N0LFxuICAgICAgICAgICAgICAgICAgcGFja2V0c1JlY2VpdmVkOiByZXBvcnQucGFja2V0c1JlY2VpdmVkLFxuICAgICAgICAgICAgICAgICAgY29kZWM6IGNvZGVjIHx8IHRoaXMuZ2V0Q29kZWNCeVR5cGUoa2luZCksXG4gICAgICAgICAgICAgICAgICByb3VuZFRyaXBUaW1lXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGlmIChyZXBvcnQubGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wIHx8IGxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcCkge1xuICAgICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1traW5kXS5sYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXAgPSByZXBvcnQubGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wIHx8IGxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoa2luZCA9PT0gJ3ZpZGVvJyAmJiB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUgJiYgdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlLnZpZGVvKSB7XG4gICAgICAgICAgICAgICAgICBydGNTdGF0aXN0aWNzW2tpbmRdWydmcmFtZXNEZWNvZGVkJ10gPSByZXBvcnQuZnJhbWVzRGVjb2RlZDtcblxuICAgICAgICAgICAgICAgICAgY29uc3QgZnBzID0gKHJlcG9ydC5mcmFtZXNEZWNvZGVkIC0gdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlLnZpZGVvLmZyYW1lc0RlY29kZWQpIC9cbiAgICAgICAgICAgICAgICAgICAgKHJ0Y1N0YXRpc3RpY3Nba2luZF0udGltZXN0YW1wIC0gdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlLnZpZGVvLnRpbWVzdGFtcCkgKlxuICAgICAgICAgICAgICAgICAgICAxMDAwO1xuXG4gICAgICAgICAgICAgICAgICBydGNTdGF0aXN0aWNzW2tpbmRdWydmcHMnXSA9IGZwcyA/IE1hdGgucm91bmQoZnBzICogMTAwKSAvIDEwMCA6IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUgPSBydGNTdGF0aXN0aWNzO1xuICAgICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9pc01vbml0b3JSdW5uaW5nKSB7XG4gICAgICAgICAgdGhpcy5fdXBkYXRlVGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHRoaXMudXBkYXRlU3RhdGlzdGljKCksIHVwZGF0ZVN0YXRpc3RpY1RpbWVvdXQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgdXBkYXRlU3RhdGlzdGljTGVnYWN5KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGlnbm9yZWQgPSBhd2FpdCB0aGlzLl9wZWVyQ29ubmVjdGlvbi5nZXRTdGF0c0xlZ2FjeSgpLnRoZW4oc3RhdHMgPT4ge1xuICAgICAgY29uc3QgcnRjU3RhdGlzdGljczogSVJ0Y01vbml0b3JTdGF0aXN0aWMgPSB7fTtcbiAgICAgIGxldCByb3VuZFRyaXBUaW1lID0gdGhpcy5fZXN0aW1hdGVkUm91bmRUcmlwVGltZTtcblxuICAgICAgc3RhdHMucmVzdWx0KCkuZm9yRWFjaChyZXBvcnQgPT4ge1xuICAgICAgICByZXBvcnQubmFtZXMoKS5mb3JFYWNoKG5hbWUgPT4ge1xuICAgICAgICAgIGlmIChuYW1lID09PSAnZ29vZ1JUVCcpIHtcbiAgICAgICAgICAgIHJvdW5kVHJpcFRpbWUgPSByZXBvcnQuc3RhdChuYW1lKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChyZXBvcnQudHlwZSA9PT0gJ3NzcmMnKSB7XG4gICAgICAgICAgY29uc3QgbWVkaWFUeXBlID0gcmVwb3J0LnN0YXQoJ21lZGlhVHlwZScpLnRvU3RyaW5nKCk7XG5cbiAgICAgICAgICBydGNTdGF0aXN0aWNzW21lZGlhVHlwZV0gPSB7dGltZXN0YW1wOiBEYXRlLm5vdygpfTtcbiAgICAgICAgICBydGNTdGF0aXN0aWNzW21lZGlhVHlwZV1bJ3NzcmMnXSA9IHJlcG9ydC5zdGF0KCdzc3JjJykudG9TdHJpbmcoKTtcbiAgICAgICAgICBydGNTdGF0aXN0aWNzW21lZGlhVHlwZV1bJ21lZGlhVHlwZSddID0gbWVkaWFUeXBlO1xuICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbbWVkaWFUeXBlXVsnYnl0ZXNSZWNlaXZlZCddID0gcmVwb3J0LnN0YXQoJ2J5dGVzUmVjZWl2ZWQnKTtcbiAgICAgICAgICBydGNTdGF0aXN0aWNzW21lZGlhVHlwZV1bJ3BhY2tldHNMb3N0J10gPSByZXBvcnQuc3RhdCgncGFja2V0c0xvc3QnKTtcbiAgICAgICAgICBydGNTdGF0aXN0aWNzW21lZGlhVHlwZV1bJ3BhY2tldHNSZWNlaXZlZCddID0gcmVwb3J0LnN0YXQoJ3BhY2tldHNSZWNlaXZlZCcpO1xuICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbbWVkaWFUeXBlXVsnY29kZWMnXSA9IHJlcG9ydC5zdGF0KCdnb29nQ29kZWNOYW1lJykudG9TdHJpbmcoKSB8fCB0aGlzLmdldENvZGVjQnlUeXBlKG1lZGlhVHlwZSk7XG4gICAgICAgICAgcnRjU3RhdGlzdGljc1ttZWRpYVR5cGVdWydyb3VuZFRyaXBUaW1lJ10gPSByb3VuZFRyaXBUaW1lO1xuXG4gICAgICAgICAgaWYgKG1lZGlhVHlwZSA9PT0gJ3ZpZGVvJyAmJiB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUgJiYgdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlLnZpZGVvKSB7XG4gICAgICAgICAgICBydGNTdGF0aXN0aWNzW21lZGlhVHlwZV1bJ2ZyYW1lc0RlY29kZWQnXSA9IHJlcG9ydC5zdGF0KCdmcmFtZXNEZWNvZGVkJyk7XG4gICAgICAgICAgICBydGNTdGF0aXN0aWNzW21lZGlhVHlwZV1bJ2ZwcyddID0gKHJ0Y1N0YXRpc3RpY3NbbWVkaWFUeXBlXS5mcmFtZXNEZWNvZGVkIC0gdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlLnZpZGVvLmZyYW1lc0RlY29kZWQpIC9cbiAgICAgICAgICAgICAgKHJ0Y1N0YXRpc3RpY3NbbWVkaWFUeXBlXS50aW1lc3RhbXAgLSB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUudmlkZW8udGltZXN0YW1wKSAqXG4gICAgICAgICAgICAxMDAwIHx8IDA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZSA9IHJ0Y1N0YXRpc3RpY3M7XG4gICAgfSkudGhlbigoKSA9PiB7XG4gICAgICBpZiAodGhpcy5faXNNb25pdG9yUnVubmluZykge1xuICAgICAgICB0aGlzLl91cGRhdGVUaW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4gdGhpcy51cGRhdGVTdGF0aXN0aWMoKSwgdXBkYXRlU3RhdGlzdGljVGltZW91dCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldENvZGVjQnlUeXBlKHR5cGU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlICdhdWRpbyc6XG4gICAgICAgIHJldHVybiB0aGlzLl9lc3RpbWF0ZWRBdWRpb0NvZGVjO1xuICAgICAgY2FzZSAndmlkZW8nOlxuICAgICAgICByZXR1cm4gdGhpcy5fZXN0aW1hdGVkVmlkZW9Db2RlYztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAndW5rbm93bic7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uIGZyb20gJy4vSVBlZXJDb25uZWN0aW9uJztcbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uL3J4L1N1YmplY3QnO1xuaW1wb3J0IEZlYXR1cmVFbmFibGVtZW50IGZyb20gJy4uL2Vudmlyb25tZW50L0ZlYXR1cmVFbmFibGVtZW50JztcbmltcG9ydCBTZHBQYXJzZXIgZnJvbSAnLi9TZHBQYXJzZXInO1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElSdGNQdWJsaXNoTW9uaXRvclN0YXRpc3RpYyB7XG4gIFtraW5kOiBzdHJpbmddOiBJUnRjUHVibGlzaFN0YXRpc3RpYztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJTGVnYWN5UlRDU3RhdHNSZXBvcnQge1xuICByZXN1bHQ6ICgpID0+IElMZWdhY3lSVENTdGF0c1JlcG9ydEl0ZW1bXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJTGVnYWN5UlRDU3RhdHNSZXBvcnRJdGVtIGV4dGVuZHMgUlRDU3RhdHNSZXBvcnQge1xuICB0eXBlOiBzdHJpbmc7XG4gIG5hbWVzOiAoKSA9PiBzdHJpbmdbXTtcbiAgc3RhdDogKG5hbWUpID0+IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJUnRjUHVibGlzaFN0YXRpc3RpYyB7XG4gIGxhc3RQYWNrZXRTZW50VGltZXN0YW1wPzogbnVtYmVyO1xuICBzc3JjOiBzdHJpbmc7XG4gIG1lZGlhVHlwZTogc3RyaW5nO1xuICB0aW1lc3RhbXA6IG51bWJlcjtcbiAgYml0cmF0ZT86IG51bWJlcjtcbiAgYnl0ZXNTZW50OiBudW1iZXI7XG4gIHBhY2tldHNTZW50OiBudW1iZXI7XG4gIHJldHJhbnNtaXR0ZWRCeXRlc1NlbnQ/OiBudW1iZXI7XG4gIGZpckNvdW50PzogbnVtYmVyO1xuICBmcmFtZUhlaWdodD86IG51bWJlcjtcbiAgZnJhbWVXaWR0aD86IG51bWJlcjtcbiAgZnJhbWVzRW5jb2RlZD86IG51bWJlcjtcbiAgZnJhbWVzU2VudD86IG51bWJlcjtcbiAgaGVhZGVyQnl0ZXNTZW50PzogbnVtYmVyO1xuICBodWdlRnJhbWVzU2VudD86IG51bWJlcjtcbiAgcGxpQ291bnQ/OiBudW1iZXI7XG4gIHFwU3VtPzogbnVtYmVyO1xuICB0b3RhbEVuY29kZVRpbWU/OiBudW1iZXI7XG4gIHRvdGFsRW5jb2RlZEJ5dGVzVGFyZ2V0PzogbnVtYmVyO1xuICBjb2RlYzogc3RyaW5nO1xuICBmcHM/OiBudW1iZXI7XG4gIHJvdW5kVHJpcFRpbWU6IG51bWJlcjtcbn1cblxuY29uc3QgdXBkYXRlU3RhdGlzdGljVGltZW91dCA9IDEwMDA7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ0Y1B1Ymxpc2hNb25pdG9yIGltcGxlbWVudHMgSURpc3Bvc2FibGUge1xuICBwcml2YXRlIHJlYWRvbmx5IF9lc3RpbWF0ZWRSb3VuZFRyaXBUaW1lOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2VzdGltYXRlZFZpZGVvQ29kZWM6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfZXN0aW1hdGVkQXVkaW9Db2RlYzogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9ydGNTdGF0aXN0aWM6IFN1YmplY3Q8SVJ0Y1B1Ymxpc2hNb25pdG9yU3RhdGlzdGljPiA9IG5ldyBTdWJqZWN0PElSdGNQdWJsaXNoTW9uaXRvclN0YXRpc3RpYz4oe30pO1xuICBwcml2YXRlIF9wZWVyQ29ubmVjdGlvbjogSVBlZXJDb25uZWN0aW9uO1xuICBwcml2YXRlIF9pc01vbml0b3JSdW5uaW5nID0gdHJ1ZTtcbiAgcHJpdmF0ZSBfdXBkYXRlVGltZW91dDogbnVtYmVyO1xuICBwcml2YXRlIF9hdmFpbGFibGVUcmFja3M6IHtcbiAgICBhdWRpbzogYm9vbGVhbjtcbiAgICB2aWRlbzogYm9vbGVhbjtcbiAgfTtcblxuICBjb25zdHJ1Y3RvcihwZWVyQ29ubmVjdGlvbjogSVBlZXJDb25uZWN0aW9uLCBtZWRpYVN0cmVhbTogTWVkaWFTdHJlYW0sIGVzdGltYXRlZFJvdW5kVHJpcFRpbWU6IG51bWJlcikge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uID0gcGVlckNvbm5lY3Rpb247XG4gICAgdGhpcy5fZXN0aW1hdGVkUm91bmRUcmlwVGltZSA9IGVzdGltYXRlZFJvdW5kVHJpcFRpbWU7XG5cbiAgICBpZiAodGhpcy5fcGVlckNvbm5lY3Rpb24pIHtcbiAgICAgIGNvbnN0IHBhcnNlZExvY2FsRGVzY3JpcHRpb24gPSBuZXcgU2RwUGFyc2VyKHRoaXMuX3BlZXJDb25uZWN0aW9uLmN1cnJlbnRMb2NhbERlc2NyaXB0aW9uLnNkcCk7XG4gICAgICBjb25zdCBwYXJzZWRSZW1vdGVEZXNjcmlwdGlvbiA9IG5ldyBTZHBQYXJzZXIodGhpcy5fcGVlckNvbm5lY3Rpb24uY3VycmVudFJlbW90ZURlc2NyaXB0aW9uLnNkcCk7XG5cbiAgICAgIHRoaXMuX2VzdGltYXRlZEF1ZGlvQ29kZWMgPSBwYXJzZWRSZW1vdGVEZXNjcmlwdGlvbi5hdWRpb0NvZGVjO1xuICAgICAgdGhpcy5fZXN0aW1hdGVkVmlkZW9Db2RlYyA9IHBhcnNlZFJlbW90ZURlc2NyaXB0aW9uLnZpZGVvQ29kZWM7XG5cbiAgICAgIHRoaXMuX2F2YWlsYWJsZVRyYWNrcyA9IHtcbiAgICAgICAgYXVkaW86IHBhcnNlZExvY2FsRGVzY3JpcHRpb24uaXNBdWRpb1RyYWNrRW5hYmxlZCAmJiBwYXJzZWRSZW1vdGVEZXNjcmlwdGlvbi5pc0F1ZGlvVHJhY2tFbmFibGVkLFxuICAgICAgICB2aWRlbzogcGFyc2VkTG9jYWxEZXNjcmlwdGlvbi5pc1ZpZGVvVHJhY2tFbmFibGVkICYmIHBhcnNlZFJlbW90ZURlc2NyaXB0aW9uLmlzVmlkZW9UcmFja0VuYWJsZWRcbiAgICAgIH07XG5cbiAgICAgIHRoaXMudXBkYXRlU3RhdGlzdGljKCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHJ0Y1N0YXRpc3RpYygpOiBTdWJqZWN0PElSdGNQdWJsaXNoTW9uaXRvclN0YXRpc3RpYz4ge1xuICAgIHJldHVybiB0aGlzLl9ydGNTdGF0aXN0aWM7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX2lzTW9uaXRvclJ1bm5pbmcgPSBmYWxzZTtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbiA9IG51bGw7XG5cbiAgICBpZiAodGhpcy5fdXBkYXRlVGltZW91dCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3VwZGF0ZVRpbWVvdXQpO1xuICAgICAgdGhpcy5fdXBkYXRlVGltZW91dCA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB1cGRhdGVTdGF0aXN0aWMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LmdldFN0YXRzUHJvbWlzZUJhc2VkRGlzYWJsZWQpIHtcbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB7XG4gICAgICAgIGF1ZGlvOiAwLFxuICAgICAgICB2aWRlbzogMFxuICAgICAgfTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFNhZmFyaSAxMSBkb2VzbnQgaGF2ZSBraW5kIG9yIG1lZGlhVHlwZSBzbyB3ZSBuZWVkIHRvIHRha2UgaXQgZnJvbSB0aGUgaW5ib3VuZC1ydHAgb2JqZWN0IGlkXG4gICAgY29uc3QgZ2V0S2luZEZvclNhZmFyaTExID0gKGl0ZW0pOiBzdHJpbmcgPT4gaXRlbS5pZC5pbmNsdWRlcygnQXVkaW8nKSA/ICdhdWRpbycgOiBpdGVtLmlkLmluY2x1ZGVzKCdWaWRlbycpID8gJ3ZpZGVvJyA6ICcnO1xuICAgIGNvbnN0IGlnbm9yZWQgPSBhd2FpdCB0aGlzLl9wZWVyQ29ubmVjdGlvbi5nZXRTdGF0cyhudWxsKVxuICAgICAgLnRoZW4oc3RhdHMgPT4ge1xuICAgICAgICBjb25zdCBydGNTdGF0aXN0aWNzOiBJUnRjUHVibGlzaE1vbml0b3JTdGF0aXN0aWMgPSB7fTtcblxuICAgICAgICBpZiAoc3RhdHMpIHtcbiAgICAgICAgICBsZXQgcm91bmRUcmlwVGltZSA9IHRoaXMuX2VzdGltYXRlZFJvdW5kVHJpcFRpbWU7XG4gICAgICAgICAgbGV0IGxhc3RQYWNrZXRTZW50VGltZXN0YW1wO1xuXG4gICAgICAgICAgc3RhdHMuZm9yRWFjaChyZXBvcnQgPT4ge1xuICAgICAgICAgICAgaWYgKHJlcG9ydC50eXBlID09PSAnY2FuZGlkYXRlLXBhaXInICYmIHJlcG9ydC5jdXJyZW50Um91bmRUcmlwVGltZSkge1xuICAgICAgICAgICAgICByb3VuZFRyaXBUaW1lID0gcmVwb3J0LmN1cnJlbnRSb3VuZFRyaXBUaW1lICogMTAwMDtcblxuICAgICAgICAgICAgICBpZiAocnRjU3RhdGlzdGljc1snYXVkaW8nXSkge1xuICAgICAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbJ2F1ZGlvJ10ucm91bmRUcmlwVGltZSA9IHJvdW5kVHJpcFRpbWU7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAocnRjU3RhdGlzdGljc1sndmlkZW8nXSkge1xuICAgICAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbJ3ZpZGVvJ10ucm91bmRUcmlwVGltZSA9IHJvdW5kVHJpcFRpbWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHJlcG9ydC50eXBlID09PSAnY2FuZGlkYXRlLXBhaXInICYmIHJlcG9ydC5sYXN0UGFja2V0U2VudFRpbWVzdGFtcCkge1xuICAgICAgICAgICAgICBsYXN0UGFja2V0U2VudFRpbWVzdGFtcCA9IHJlcG9ydC5sYXN0UGFja2V0U2VudFRpbWVzdGFtcDtcblxuICAgICAgICAgICAgICBpZiAocnRjU3RhdGlzdGljc1snYXVkaW8nXSkge1xuICAgICAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbJ2F1ZGlvJ10ubGFzdFBhY2tldFNlbnRUaW1lc3RhbXAgPSBsYXN0UGFja2V0U2VudFRpbWVzdGFtcDtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChydGNTdGF0aXN0aWNzWyd2aWRlbyddKSB7XG4gICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1sndmlkZW8nXS5sYXN0UGFja2V0U2VudFRpbWVzdGFtcCA9IGxhc3RQYWNrZXRTZW50VGltZXN0YW1wO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChyZXBvcnQudHlwZSA9PT0gJ291dGJvdW5kLXJ0cCcpIHtcbiAgICAgICAgICAgICAgY29uc3Qga2luZCA9IHJlcG9ydC5raW5kIHx8IHJlcG9ydC5tZWRpYVR5cGUgfHwgZ2V0S2luZEZvclNhZmFyaTExKHJlcG9ydCk7XG4gICAgICAgICAgICAgIGxldCBjb2RlYyA9ICcnO1xuXG4gICAgICAgICAgICAgIHN0YXRzLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0uaWQgPT09IHJlcG9ydC5jb2RlY0lkKSB7XG4gICAgICAgICAgICAgICAgICBjb2RlYyA9IGl0ZW0ubWltZVR5cGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICBpZiAoa2luZCAmJiB0aGlzLl9hdmFpbGFibGVUcmFja3Nba2luZF0pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBieXRlcyA9IHJlcG9ydC5ieXRlc1NlbnQgfHwgMDtcbiAgICAgICAgICAgICAgICBjb25zdCBwcmV2aW91c0J5dGVzU2VudCA9IHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZT8uW2tpbmRdPy5ieXRlc1NlbnQgPz8gMDtcbiAgICAgICAgICAgICAgICBjb25zdCBieXRlc0RlbHRhID0gYnl0ZXMgLSBwcmV2aW91c0J5dGVzU2VudDtcbiAgICAgICAgICAgICAgICBjb25zdCB0aW1lRGVsdGEgPSByZXBvcnQudGltZXN0YW1wIC0gdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlPy5ba2luZF0/LnRpbWVzdGFtcDtcbiAgICAgICAgICAgICAgICBjb25zdCBiaXRyYXRlID0gYnl0ZXNEZWx0YSAmJiB0aW1lRGVsdGEgPyBNYXRoLmZsb29yKDggKiBieXRlc0RlbHRhIC9cbiAgICAgICAgICAgICAgICAgIHRpbWVEZWx0YSAqIDEwMDApIDogMDtcblxuICAgICAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3Nba2luZF0gPSB7XG4gICAgICAgICAgICAgICAgICBzc3JjOiByZXBvcnQuc3NyYyxcbiAgICAgICAgICAgICAgICAgIG1lZGlhVHlwZToga2luZCxcbiAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcDogcmVwb3J0LnRpbWVzdGFtcCxcbiAgICAgICAgICAgICAgICAgIGJpdHJhdGUsXG4gICAgICAgICAgICAgICAgICBieXRlc1NlbnQ6IHJlcG9ydC5ieXRlc1NlbnQsXG4gICAgICAgICAgICAgICAgICBwYWNrZXRzU2VudDogcmVwb3J0LnBhY2tldHNTZW50LFxuICAgICAgICAgICAgICAgICAgcmV0cmFuc21pdHRlZEJ5dGVzU2VudDogcmVwb3J0LnJldHJhbnNtaXR0ZWRCeXRlc1NlbnQsXG4gICAgICAgICAgICAgICAgICBjb2RlYzogY29kZWMgfHwgdGhpcy5nZXRDb2RlY0J5VHlwZShraW5kKSxcbiAgICAgICAgICAgICAgICAgIHJvdW5kVHJpcFRpbWVcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgaWYgKHJlcG9ydC5sYXN0UGFja2V0U2VudFRpbWVzdGFtcCB8fCBsYXN0UGFja2V0U2VudFRpbWVzdGFtcCkge1xuICAgICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1traW5kXS5sYXN0UGFja2V0U2VudFRpbWVzdGFtcCA9IHJlcG9ydC5sYXN0UGFja2V0U2VudFRpbWVzdGFtcCB8fCBsYXN0UGFja2V0U2VudFRpbWVzdGFtcDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoa2luZCA9PT0gJ3ZpZGVvJyAmJiB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUgJiYgdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlLnZpZGVvKSB7XG4gICAgICAgICAgICAgICAgICBydGNTdGF0aXN0aWNzW2tpbmRdWydmaXJDb3VudCddID0gcmVwb3J0LmZpckNvdW50O1xuICAgICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1traW5kXVsnZnJhbWVIZWlnaHQnXSA9IHJlcG9ydC5mcmFtZUhlaWdodDtcbiAgICAgICAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3Nba2luZF1bJ2ZyYW1lV2lkdGgnXSA9IHJlcG9ydC5mcmFtZVdpZHRoO1xuICAgICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1traW5kXVsnZnJhbWVzRW5jb2RlZCddID0gcmVwb3J0LmZyYW1lc0VuY29kZWQ7XG4gICAgICAgICAgICAgICAgICBydGNTdGF0aXN0aWNzW2tpbmRdWydmcmFtZXNTZW50J10gPSByZXBvcnQuZnJhbWVzU2VudDtcbiAgICAgICAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3Nba2luZF1bJ2hlYWRlckJ5dGVzU2VudCddID0gcmVwb3J0LmhlYWRlckJ5dGVzU2VudDtcbiAgICAgICAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3Nba2luZF1bJ2h1Z2VGcmFtZXNTZW50J10gPSByZXBvcnQuaHVnZUZyYW1lc1NlbnQ7XG4gICAgICAgICAgICAgICAgICBydGNTdGF0aXN0aWNzW2tpbmRdWydwbGlDb3VudCddID0gcmVwb3J0LnBsaUNvdW50O1xuICAgICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1traW5kXVsncXBTdW0nXSA9IHJlcG9ydC5xcFN1bTtcbiAgICAgICAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3Nba2luZF1bJ3RvdGFsRW5jb2RlVGltZSddID0gcmVwb3J0LnRvdGFsRW5jb2RlVGltZTtcbiAgICAgICAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3Nba2luZF1bJ3RvdGFsRW5jb2RlZEJ5dGVzVGFyZ2V0J10gPSByZXBvcnQudG90YWxFbmNvZGVkQnl0ZXNUYXJnZXQ7XG5cbiAgICAgICAgICAgICAgICAgIGNvbnN0IGZwcyA9IChyZXBvcnQuZnJhbWVzRW5jb2RlZCAtIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZS52aWRlby5mcmFtZXNFbmNvZGVkKSAvXG4gICAgICAgICAgICAgICAgICAgIChydGNTdGF0aXN0aWNzW2tpbmRdLnRpbWVzdGFtcCAtIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZS52aWRlby50aW1lc3RhbXApICpcbiAgICAgICAgICAgICAgICAgICAgMTAwMDtcblxuICAgICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1traW5kXVsnZnBzJ10gPSBmcHMgPyBNYXRoLnJvdW5kKGZwcyAqIDEwMCkgLyAxMDAgOiAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlID0gcnRjU3RhdGlzdGljcztcbiAgICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5faXNNb25pdG9yUnVubmluZykge1xuICAgICAgICAgIHRoaXMuX3VwZGF0ZVRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB0aGlzLnVwZGF0ZVN0YXRpc3RpYygpLCB1cGRhdGVTdGF0aXN0aWNUaW1lb3V0KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldENvZGVjQnlUeXBlKHR5cGU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlICdhdWRpbyc6XG4gICAgICAgIHJldHVybiB0aGlzLl9lc3RpbWF0ZWRBdWRpb0NvZGVjO1xuICAgICAgY2FzZSAndmlkZW8nOlxuICAgICAgICByZXR1cm4gdGhpcy5fZXN0aW1hdGVkVmlkZW9Db2RlYztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAndW5rbm93bic7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNkcFBhcnNlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3NkcDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9hdWRpb0NvZGVjOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3ZpZGVvQ29kZWM6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfaXNBdWRpb1RyYWNrRW5hYmxlZDogYm9vbGVhbjtcbiAgcHJpdmF0ZSByZWFkb25seSBfaXNWaWRlb1RyYWNrRW5hYmxlZDogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3RvcihzZHA6IHN0cmluZykge1xuICAgIHRoaXMuX3NkcCA9IHNkcDtcblxuICAgIGNvbnN0IHNkcFNwbGl0QnlMaW5lcyA9IHRoaXMuX3NkcC5zcGxpdCgvKFxcclxcbnxcXHJ8XFxuKS8pO1xuICAgIGNvbnN0IHNkcFNwbGl0QnlUcmFja3MgPSB0aGlzLl9zZHAuc3BsaXQoLyg/Ol58W1xcclxcbl0pbT0vKTtcblxuICAgIHRoaXMuX2F1ZGlvQ29kZWMgPSB0aGlzLmFwcGx5Q29kZWMoJ2F1ZGlvJywgc2RwU3BsaXRCeUxpbmVzKTtcbiAgICB0aGlzLl92aWRlb0NvZGVjID0gdGhpcy5hcHBseUNvZGVjKCd2aWRlbycsIHNkcFNwbGl0QnlMaW5lcyk7XG4gICAgdGhpcy5faXNBdWRpb1RyYWNrRW5hYmxlZCA9IHRoaXMuaXNUcmFja0J5VHlwZUVuYWJsZWQoJ2F1ZGlvJywgc2RwU3BsaXRCeVRyYWNrcyk7XG4gICAgdGhpcy5faXNWaWRlb1RyYWNrRW5hYmxlZCA9IHRoaXMuaXNUcmFja0J5VHlwZUVuYWJsZWQoJ3ZpZGVvJywgc2RwU3BsaXRCeVRyYWNrcyk7XG4gIH1cblxuICBnZXQgYXVkaW9Db2RlYygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9hdWRpb0NvZGVjO1xuICB9XG5cbiAgZ2V0IHZpZGVvQ29kZWMoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdmlkZW9Db2RlYztcbiAgfVxuXG4gIGdldCBpc0F1ZGlvVHJhY2tFbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pc0F1ZGlvVHJhY2tFbmFibGVkO1xuICB9XG5cbiAgZ2V0IGlzVmlkZW9UcmFja0VuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2lzVmlkZW9UcmFja0VuYWJsZWQ7XG4gIH1cblxuICBwcml2YXRlIGlzVHJhY2tCeVR5cGVFbmFibGVkKHR5cGU6IHN0cmluZywgc2RwU3BsaXRCeVRyYWNrczogc3RyaW5nW10pOiBib29sZWFuIHtcbiAgICBjb25zdCBzZHBTZWN0aW9uRm9yVHlwZSA9IHNkcFNwbGl0QnlUcmFja3MuZmluZChzZHBUcmFjayA9PiBzZHBUcmFjay5zdGFydHNXaXRoKHR5cGUpKTtcblxuICAgIGlmICghc2RwU2VjdGlvbkZvclR5cGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gIXNkcFNlY3Rpb25Gb3JUeXBlLmluY2x1ZGVzKGBhPWluYWN0aXZlYCk7XG4gIH1cblxuICBwcml2YXRlIGFwcGx5Q29kZWModHlwZTogc3RyaW5nLCBzZHBTcGxpdEJ5TGluZXM6IHN0cmluZyBbXSk6IHN0cmluZyB7XG4gICAgY29uc3QgdXNlZENvZGVjTGluZSA9IHNkcFNwbGl0QnlMaW5lcy5maW5kKHNkcExpbmUgPT4gc2RwTGluZS5pbmNsdWRlcyhgYT1ydHBtYXA6JHtzZHBTcGxpdEJ5TGluZXMuZmluZChpID0+IGkuaW5jbHVkZXMoYG09JHt0eXBlfWApKS5zcGxpdCgnICcpWzNdfWApKTtcbiAgICBjb25zdCB1c2VkQ29kZWMgPSB1c2VkQ29kZWNMaW5lLnNwbGl0KCcgJylbMV07XG4gICAgY29uc3QgY29kZWNOYW1lID0gdXNlZENvZGVjLnNwbGl0KCcvJylbMF07XG5cbiAgICByZXR1cm4gY29kZWNOYW1lO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uLCB7UGVlckNvbm5lY3Rpb25FdmVudHN9IGZyb20gJy4vSVBlZXJDb25uZWN0aW9uJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgRmVhdHVyZUVuYWJsZW1lbnQgZnJvbSAnLi4vZW52aXJvbm1lbnQvRmVhdHVyZUVuYWJsZW1lbnQnO1xuaW1wb3J0IHtJTGVnYWN5UlRDU3RhdHNSZXBvcnR9IGZyb20gJy4vUnRjQ29ubmVjdGlvbk1vbml0b3InO1xuXG5jbGFzcyBWYW5pbGxhUGVlckNvbm5lY3Rpb24gaW1wbGVtZW50cyBJUGVlckNvbm5lY3Rpb24ge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignVmFuaWxsYVBlZXJDb25uZWN0aW9uJyk7XG4gIHByaXZhdGUgX3BlZXJDb25uZWN0aW9uOiBSVENQZWVyQ29ubmVjdGlvbjtcblxuICBjb25zdHJ1Y3Rvcihjb25maWd1cmF0aW9uPzogUlRDQ29uZmlndXJhdGlvbikge1xuICAgIGlmIChGZWF0dXJlRW5hYmxlbWVudC53ZWJraXRSVENQZWVyQ29ubmVjdGlvbkVuYWJsZWQpIHtcbiAgICAgIC8vIElnbm9yZWQgYXMgbGVnYWN5IHdlYmtpdFJUQ1BlZXJDb25uZWN0aW9uIGNsYXNzIGlzIGRlcHJlY2F0ZWRcbiAgICAgIC8vIFRoaXMgd2FzIGEgQ2hyb21lIHNwZWNpZmljIGltcGxlbWVudGF0aW9uXG4gICAgICAvLyBSZXF1aXJlcyBhIHRzLWlnbm9yZSBkaXJlY3RpdmUgdG8gcHJldmVudCB0eXBlc2NyaXB0IGVycm9yc1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb24gPSBuZXcgd2Via2l0UlRDUGVlckNvbm5lY3Rpb24oY29uZmlndXJhdGlvbik7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbiA9IG5ldyBSVENQZWVyQ29ubmVjdGlvbihjb25maWd1cmF0aW9uKTtcbiAgfVxuXG4gIGdldCBuYXRpdmUoKTogUlRDUGVlckNvbm5lY3Rpb24gfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb247XG4gIH1cblxuICBnZXQgY3VycmVudExvY2FsRGVzY3JpcHRpb24oKTogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmN1cnJlbnRMb2NhbERlc2NyaXB0aW9uO1xuICB9XG5cbiAgZ2V0IGN1cnJlbnRSZW1vdGVEZXNjcmlwdGlvbigpOiBSVENTZXNzaW9uRGVzY3JpcHRpb24gfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uY3VycmVudFJlbW90ZURlc2NyaXB0aW9uO1xuICB9XG5cbiAgZ2V0IGNvbm5lY3Rpb25TdGF0ZSgpOiBSVENQZWVyQ29ubmVjdGlvblN0YXRlIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uY29ubmVjdGlvblN0YXRlO1xuICB9XG5cbiAgZ2V0IGljZUNvbm5lY3Rpb25TdGF0ZSgpOiBSVENJY2VDb25uZWN0aW9uU3RhdGUge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGU7XG4gIH1cblxuICBnZXQgc3VwcG9ydHNHZXRDb25maWd1cmF0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0eXBlb2YgdGhpcy5fcGVlckNvbm5lY3Rpb24uZ2V0Q29uZmlndXJhdGlvbiA9PT0gJ2Z1bmN0aW9uJztcbiAgfVxuXG4gIGdldCBzdXBwb3J0c1NldENvbmZpZ3VyYXRpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHR5cGVvZiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5zZXRDb25maWd1cmF0aW9uID09PSAnZnVuY3Rpb24nO1xuICB9XG5cbiAgZ2V0IHN1cHBvcnRzQWRkVHJhbnNjZWl2ZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICFGZWF0dXJlRW5hYmxlbWVudC5hZGRUcmFuY2VpdmVyRGlzYWJsZWQgJiYgdHlwZW9mIHRoaXMuX3BlZXJDb25uZWN0aW9uLmFkZFRyYW5zY2VpdmVyID09PSAnZnVuY3Rpb24nO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlT2ZmZXIob3B0aW9ucz86IFJUQ09mZmVyT3B0aW9ucyk6IFByb21pc2U8UlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdD4ge1xuICAgIGlmIChGZWF0dXJlRW5hYmxlbWVudC5wcm9taXNlQmFzZWRQQ01ldGhvZHNEaXNhYmxlZCkge1xuICAgICAgLy8gSWdub3JlZCBhcyBsZWdhY3kgY3JlYXRlT2ZmZXIgbWV0aG9kIHdpdGggY2FsbGJhY2tzIGlzIGRlcHJlY2F0ZWRcbiAgICAgIC8vIFJlcXVpcmVzIGEgdHMtaWdub3JlIGRpcmVjdGl2ZSB0byBwcmV2ZW50IHR5cGVzY3JpcHQgZXJyb3JzXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gdGhpcy5fcGVlckNvbm5lY3Rpb24uY3JlYXRlT2ZmZXIocmVzb2x2ZSwgcmVqZWN0LCBvcHRpb25zKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmNyZWF0ZU9mZmVyKG9wdGlvbnMpO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlQW5zd2VyKG9wdGlvbnM/OiBSVENBbnN3ZXJPcHRpb25zKTogUHJvbWlzZTxSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0PiB7XG4gICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LnByb21pc2VCYXNlZFBDTWV0aG9kc0Rpc2FibGVkKSB7XG4gICAgICAvLyBJZ25vcmVkIGFzIGxlZ2FjeSBjcmVhdGVBbnN3ZXIgbWV0aG9kIHdpdGggY2FsbGJhY2tzIGlzIGRlcHJlY2F0ZWRcbiAgICAgIC8vIFJlcXVpcmVzIGEgdHMtaWdub3JlIGRpcmVjdGl2ZSB0byBwcmV2ZW50IHR5cGVzY3JpcHQgZXJyb3JzXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gdGhpcy5fcGVlckNvbm5lY3Rpb24uY3JlYXRlQW5zd2VyKHJlc29sdmUsIHJlamVjdCwgb3B0aW9ucykpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5jcmVhdGVBbnN3ZXIob3B0aW9ucyk7XG4gIH1cblxuICBhc3luYyBzZXRMb2NhbERlc2NyaXB0aW9uKGRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLnNldExvY2FsRGVzY3JpcHRpb24oRmVhdHVyZUVuYWJsZW1lbnQucHJvbWlzZUJhc2VkUENNZXRob2RzRGlzYWJsZWQgP1xuICAgICAgbmV3IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbihkZXNjcmlwdGlvbikgOiBkZXNjcmlwdGlvbik7XG4gIH1cblxuICBhc3luYyBzZXRSZW1vdGVEZXNjcmlwdGlvbihkZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGhhc0NyeXB0byA9IGRlc2NyaXB0aW9uLnNkcD8ubWF0Y2goL2E9Y3J5cHRvOi9pKTtcblxuICAgIGlmIChoYXNDcnlwdG8pIHtcbiAgICAgIHRoaXMuX2xvZ2dlci53YXJuKCdTRFAgYT1jcnlwdG8gaXMgbm90IHN1cHBvcnRlZCcpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5zZXRSZW1vdGVEZXNjcmlwdGlvbihGZWF0dXJlRW5hYmxlbWVudC5wcm9taXNlQmFzZWRQQ01ldGhvZHNEaXNhYmxlZCA/XG4gICAgICBuZXcgUlRDU2Vzc2lvbkRlc2NyaXB0aW9uKGRlc2NyaXB0aW9uKSA6IGRlc2NyaXB0aW9uKTtcbiAgfVxuXG4gIGdldFNlbmRlcnMoKTogUlRDUnRwU2VuZGVyW10ge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5nZXRTZW5kZXJzKCk7XG4gIH1cblxuICBnZXRSZWNlaXZlcnMoKTogUlRDUnRwUmVjZWl2ZXJbXSB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmdldFJlY2VpdmVycygpO1xuICB9XG5cbiAgZ2V0U3RhdHMoc2VsZWN0b3I/OiBNZWRpYVN0cmVhbVRyYWNrIHwgbnVsbCk6IFByb21pc2U8UlRDU3RhdHNSZXBvcnQ+IHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uZ2V0U3RhdHMoc2VsZWN0b3IpO1xuICB9XG5cbiAgZ2V0U3RhdHNMZWdhY3koKTogUHJvbWlzZTxJTGVnYWN5UlRDU3RhdHNSZXBvcnQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAvLyBJZ25vcmVkIGR1ZSB0byB0eXBlc2NyaXB0IG5vdCBoYXZpbmcgbGVnYWN5ICdnZXRTdGF0cycgbWV0aG9kIHR5cGUgZGVmaW5pdGlvblxuICAgICAgLy8gVGhpcyB3YXMgYSBDaHJvbWUgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gb2YgdGhlICdnZXRTdGF0cycgbWV0aG9kIGZvclxuICAgICAgLy8gQ2hyb21lQDw9IDY2IGRldGFpbGVkIGhlcmU6IGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTYyNzgxNlxuICAgICAgLy8gUmVxdWlyZXMgYSB0cy1pZ25vcmUgZGlyZWN0aXZlIHRvIHByZXZlbnQgdHlwZXNjcmlwdCBlcnJvcnNcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9wZWVyQ29ubmVjdGlvbi5nZXRTdGF0cyhyZXNvbHZlKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFkZEV2ZW50TGlzdGVuZXIodHlwZTogUGVlckNvbm5lY3Rpb25FdmVudHMsIGxpc3RlbmVyOiBFdmVudExpc3RlbmVyT3JFdmVudExpc3RlbmVyT2JqZWN0LCBvcHRpb25zPzogYm9vbGVhbiB8IEFkZEV2ZW50TGlzdGVuZXJPcHRpb25zKTogdm9pZCB7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24uYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lciwgb3B0aW9ucyk7XG4gIH1cblxuICByZW1vdmVFdmVudExpc3RlbmVyKHR5cGU6IFBlZXJDb25uZWN0aW9uRXZlbnRzLCBsaXN0ZW5lcjogRXZlbnRMaXN0ZW5lck9yRXZlbnRMaXN0ZW5lck9iamVjdCwgb3B0aW9ucz86IGJvb2xlYW4gfCBFdmVudExpc3RlbmVyT3B0aW9ucyk6IHZvaWQge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgbGlzdGVuZXIsIG9wdGlvbnMpO1xuICB9XG5cbiAgYWRkVHJhbnNjZWl2ZXIobmFtZTogc3RyaW5nLCBvcHRpb25zOiBSVENSdHBUcmFuc2NlaXZlckluaXQpOiBSVENSdHBUcmFuc2NlaXZlciB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmFkZFRyYW5zY2VpdmVyKG5hbWUsIG9wdGlvbnMpO1xuICB9XG5cbiAgYWRkU3RyZWFtKG1lZGlhU3RyZWFtOiBNZWRpYVN0cmVhbSk6IHZvaWQge1xuICAgIG1lZGlhU3RyZWFtLmdldFRyYWNrcygpLmZvckVhY2godHJhY2sgPT4ge1xuICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb24uYWRkVHJhY2sodHJhY2spO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0Q29uZmlndXJhdGlvbigpOiBSVENDb25maWd1cmF0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uZ2V0Q29uZmlndXJhdGlvbigpO1xuICB9XG5cbiAgc2V0Q29uZmlndXJhdGlvbihjb25maWd1cmF0aW9uOiBSVENDb25maWd1cmF0aW9uKTogdm9pZCB7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24uc2V0Q29uZmlndXJhdGlvbihjb25maWd1cmF0aW9uKTtcbiAgfVxuXG4gIHNldCBvbnRyYWNrKGhhbmRsZXI6ICgodGhpczogUlRDUGVlckNvbm5lY3Rpb24sIGV2OiBSVENUcmFja0V2ZW50KSA9PiB1bmtub3duKSB8IG51bGwpIHtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbi5vbnRyYWNrID0gaGFuZGxlcjtcbiAgfVxuXG4gIGdldCBvbnRyYWNrKCk6ICgodGhpczogUlRDUGVlckNvbm5lY3Rpb24sIGV2OiBSVENUcmFja0V2ZW50KSA9PiB1bmtub3duKSB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5vbnRyYWNrO1xuICB9XG5cbiAgc2V0IG9uaWNlY2FuZGlkYXRlKGhhbmRsZXI6ICgodGhpczogUlRDUGVlckNvbm5lY3Rpb24sIGV2OiBSVENQZWVyQ29ubmVjdGlvbkljZUV2ZW50KSA9PiB1bmtub3duKSB8IG51bGwpIHtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbi5vbmljZWNhbmRpZGF0ZSA9IGhhbmRsZXI7XG4gIH1cblxuICBnZXQgb25pY2VjYW5kaWRhdGUoKTogKCh0aGlzOiBSVENQZWVyQ29ubmVjdGlvbiwgZXY6IFJUQ1BlZXJDb25uZWN0aW9uSWNlRXZlbnQpID0+IHVua25vd24pIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLm9uaWNlY2FuZGlkYXRlO1xuICB9XG5cbiAgc2V0IG9uY29ubmVjdGlvbnN0YXRlY2hhbmdlKGhhbmRsZXI6ICgodGhpczogUlRDUGVlckNvbm5lY3Rpb24sIGV2OiBSVENQZWVyQ29ubmVjdGlvbkljZUV2ZW50KSA9PiB1bmtub3duKSB8IG51bGwpIHtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbi5vbmNvbm5lY3Rpb25zdGF0ZWNoYW5nZSA9IGhhbmRsZXI7XG4gIH1cblxuICBnZXQgb25jb25uZWN0aW9uc3RhdGVjaGFuZ2UoKTogKCh0aGlzOiBSVENQZWVyQ29ubmVjdGlvbiwgZXY6IFJUQ1BlZXJDb25uZWN0aW9uSWNlRXZlbnQpID0+IHVua25vd24pIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLm9uY29ubmVjdGlvbnN0YXRlY2hhbmdlO1xuICB9XG5cbiAgc2V0IG9uaWNlY29ubmVjdGlvbnN0YXRlY2hhbmdlKGhhbmRsZXI6ICgodGhpczogUlRDUGVlckNvbm5lY3Rpb24sIGV2OiBFdmVudCkgPT4gdW5rbm93bikgfCBudWxsKSB7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24ub25pY2Vjb25uZWN0aW9uc3RhdGVjaGFuZ2UgPSBoYW5kbGVyO1xuICB9XG5cbiAgZ2V0IG9uaWNlY29ubmVjdGlvbnN0YXRlY2hhbmdlKCk6ICgodGhpczogUlRDUGVlckNvbm5lY3Rpb24sIGV2OiBFdmVudCkgPT4gdW5rbm93bikgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24ub25pY2Vjb25uZWN0aW9uc3RhdGVjaGFuZ2U7XG4gIH1cblxuICBjbG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbi5jbG9zZSgpO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbiA9IG51bGw7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgVmFuaWxsYVBlZXJDb25uZWN0aW9uOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uRmFjdG9yeSBmcm9tICcuL0lQZWVyQ29ubmVjdGlvbkZhY3RvcnknO1xuaW1wb3J0IElQZWVyQ29ubmVjdGlvbiBmcm9tICcuL0lQZWVyQ29ubmVjdGlvbic7XG5pbXBvcnQgVmFuaWxsYVBlZXJDb25uZWN0aW9uIGZyb20gJy4vVmFuaWxsYVBlZXJDb25uZWN0aW9uJztcblxuY2xhc3MgVmFuaWxsYVBlZXJDb25uZWN0aW9uRmFjdG9yeSBpbXBsZW1lbnRzIElQZWVyQ29ubmVjdGlvbkZhY3Rvcnkge1xuICBhc3luYyBjcmVhdGVQZWVyQ29ubmVjdGlvbihjb25maWd1cmF0aW9uPzogUlRDQ29uZmlndXJhdGlvbik6IFByb21pc2U8SVBlZXJDb25uZWN0aW9uPiB7XG4gICAgcmV0dXJuIG5ldyBWYW5pbGxhUGVlckNvbm5lY3Rpb24oY29uZmlndXJhdGlvbik7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgVmFuaWxsYVBlZXJDb25uZWN0aW9uRmFjdG9yeTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi9TdWJqZWN0JztcbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0lEaXNwb3NhYmxlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVhZE9ubHlTdWJqZWN0PFQ+IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfc3ViamVjdDogU3ViamVjdDxUPjtcblxuICBjb25zdHJ1Y3RvcihzdWJqZWN0OiBTdWJqZWN0PFQ+KSB7XG4gICAgdGhpcy5fc3ViamVjdCA9IHN1YmplY3Q7XG4gIH1cblxuICBnZXQgdmFsdWUoKTogVCB7XG4gICAgcmV0dXJuIHRoaXMuX3N1YmplY3QudmFsdWU7XG4gIH1cblxuICBzdWJzY3JpYmUobGlzdGVuZXI6IChUKSA9PiB2b2lkKTogSURpc3Bvc2FibGUge1xuICAgIHJldHVybiB0aGlzLl9zdWJqZWN0LnN1YnNjcmliZShsaXN0ZW5lcik7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuaW1wb3J0IERpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9EaXNwb3NhYmxlJztcbmltcG9ydCBJQ29tcGFyYWJsZSBmcm9tICcuLi9sYW5nL0lDb21wYXJhYmxlJztcblxuY2xhc3MgRGlzcG9zYWJsZUxpc3RlbmVyPFQ+IGV4dGVuZHMgRGlzcG9zYWJsZSB7XG4gIGNvbnN0cnVjdG9yKGxpc3RlbmVyczogQXJyYXk8VD4sIGxpc3RlbmVyOiBUKSB7XG4gICAgc3VwZXIoKCkgPT4ge1xuICAgICAgY29uc3QgaWR4ID0gbGlzdGVuZXJzLmluZGV4T2YobGlzdGVuZXIpO1xuXG4gICAgICBpZiAoaWR4ID49IDApIHtcbiAgICAgICAgbGlzdGVuZXJzLnNwbGljZShpZHgsIDEpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN1YmplY3Q8VD4ge1xuICBwcml2YXRlIHJlYWRvbmx5IF9saXN0ZW5lcnM6IEFycmF5PChUKSA9PiB2b2lkPjtcbiAgcHJpdmF0ZSBfdmFsdWU6IFQ7XG5cbiAgY29uc3RydWN0b3IodmFsdWU6IFQpIHtcbiAgICB0aGlzLl9saXN0ZW5lcnMgPSBbXTtcbiAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuICB9XG5cbiAgc2V0IHZhbHVlKHZhbHVlOiBUKSB7XG4gICAgbGV0IGNoYW5nZWQgPSB0aGlzLl92YWx1ZSAhPT0gdmFsdWU7XG5cbiAgICBpZiAoY2hhbmdlZCAmJiB2YWx1ZSkge1xuICAgICAgY29uc3QgY29tcGFyYWJsZSA9IHZhbHVlIGFzIHVua25vd24gYXMgSUNvbXBhcmFibGU8VD47XG5cbiAgICAgIGlmICh0eXBlb2YgY29tcGFyYWJsZS5lcXVhbHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgY2hhbmdlZCA9ICFjb21wYXJhYmxlLmVxdWFscyh0aGlzLl92YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFjaGFuZ2VkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcblxuICAgIHRoaXMuX2xpc3RlbmVycy5mb3JFYWNoKGxpc3RlbmVyID0+IHtcbiAgICAgIGxpc3RlbmVyKHZhbHVlKTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldCB2YWx1ZSgpOiBUIHtcbiAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gIH1cblxuICBzdWJzY3JpYmUobGlzdGVuZXI6IChUKSA9PiB2b2lkKTogSURpc3Bvc2FibGUge1xuICAgIHRoaXMuX2xpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcblxuICAgIGxpc3RlbmVyKHRoaXMuX3ZhbHVlKTtcblxuICAgIHJldHVybiBuZXcgRGlzcG9zYWJsZUxpc3RlbmVyPChUKSA9PiB2b2lkPih0aGlzLl9saXN0ZW5lcnMsIGxpc3RlbmVyKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFbnZpcm9ubWVudCB7XG4gIHN0YXRpYyBnZXRFbnZpcm9ubWVudEZyb21VcmwodXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBiYXNlVVJMID0gbmV3IFVSTCh1cmwpO1xuXG4gICAgICByZXR1cm4gYmFzZVVSTC5vcmlnaW47XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IFN0cmluZ3MgZnJvbSAnLi4vbGFuZy9TdHJpbmdzJztcbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uL3J4L1N1YmplY3QnO1xuaW1wb3J0IFJlYWRPbmx5U3ViamVjdCBmcm9tICcuLi9yeC9SZWFkT25seVN1YmplY3QnO1xuaW1wb3J0IEVkZ2VBdXRoUGFyc2VyIGZyb20gJy4uL2VkZ2VBdXRoL0VkZ2VBdXRoUGFyc2VyJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQge0xvZ2dpbmdMZXZlbCwgTG9nZ2luZ0xldmVsVHlwZX0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlcic7XG5pbXBvcnQgQ29uc29sZUFwcGVuZGVyIGZyb20gJy4uL2xvZ2dlci9Db25zb2xlQXBwZW5kZXInO1xuaW1wb3J0IFRlbGVtZXRyeUFwcGVuZGVyIGZyb20gJy4uL3RlbGVtZXRyeS9UZWxlbWV0cnlBcGVuZGVyJztcbmltcG9ydCBDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyIGZyb20gJy4uL2RvbS9Db25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyJztcbmltcG9ydCBNZXRyaWNzQ29uZmlndXJhdGlvbiwge1RlbGVtZXRyeUxldmVsLCBUZWxlbWV0cnlMZXZlbFR5cGV9IGZyb20gJy4uL21ldHJpY3MvTWV0cmljc0NvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IE1ldHJpY3NTZXJ2aWNlIGZyb20gJy4uL21ldHJpY3MvTWV0cmljc1NlcnZpY2UnO1xuaW1wb3J0IFRlbGVtZXRyeUxldmVsTWFwcGluZyBmcm9tICcuLi9tZXRyaWNzL1RlbGVtZXRyaWNMZXZlbE1hcHBpbmcnO1xuaW1wb3J0IExvZ2dpbmdMZXZlbE1hcHBpbmcgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dpbmdMZXZlbE1hcHBpbmcnO1xuaW1wb3J0IEJ1aWxkRmVhdHVyZXMgZnJvbSAnLi4vZW52aXJvbm1lbnQvQnVpbGRGZWF0dXJlcyc7XG5pbXBvcnQgQnJvd3NlckRldGVjdG9yIGZyb20gJy4uL2RvbS9Ccm93c2VyRGV0ZWN0b3InO1xuaW1wb3J0IHtJQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlcn0gZnJvbSAnLi4vZG9tL0lDb25maWd1cmF0aW9uUGFyYW1hdGVyUmVhZGVyJztcbmltcG9ydCBBcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvciBmcm9tICcuLi9kb20vQXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3InO1xuaW1wb3J0IElQZWVyQ29ubmVjdGlvbkZhY3RvcnkgZnJvbSAnLi4vcnRjL0lQZWVyQ29ubmVjdGlvbkZhY3RvcnknO1xuaW1wb3J0IFBlZXJDb25uZWN0aW9uU2VydmljZSBmcm9tICcuLi9ydGMvUGVlckNvbm5lY3Rpb25TZXJ2aWNlJztcbmltcG9ydCBUZWxlbWV0cnlVcmwgZnJvbSAnLi9UZWxlbWV0cnlVcmwnO1xuaW1wb3J0IEVudmlyb25tZW50IGZyb20gJy4vRW52aXJvbm1lbnQnO1xuaW1wb3J0IHtIbHNQbGF5ZXJUeXBlLCBTaGFrYVR5cGUsIFdlYlBsYXllclR5cGV9IGZyb20gJy4vc3RyZWFtaW5nL1N0cmVhbVR5cGVzJztcbmltcG9ydCBEaXNjb3ZlcnlVcmkgZnJvbSAnLi9kaXNjb3ZlcnkvRGlzY292ZXJ5VXJpJztcbmltcG9ydCBNZXRyaWNzRmFjdG9yeSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NGYWN0b3J5JztcbmltcG9ydCBUZWxlbWV0cnlEZWZhdWx0IGZyb20gJy4uL21ldHJpY3MvVGVsZW1ldHJ5RGVmYXVsdCc7XG5cbmNvbnN0IHBhZ2VMb2FkVGltZSA9IHdpbmRvd1snX19waGVuaXhQYWdlTG9hZFRpbWUnXSB8fCB3aW5kb3dbJ19fcGFnZUxvYWRUaW1lJ10gfHwgRGF0ZS5ub3coKTtcblxuaW50ZXJmYWNlIElJbml0T3B0aW9ucyB7XG4gIGRpc2NvdmVyeVVyaT86IHN0cmluZztcbiAgcGVlckNvbm5lY3Rpb25GYWN0b3J5PzogSVBlZXJDb25uZWN0aW9uRmFjdG9yeTtcbiAgdGVsZW1ldHJ5TGV2ZWw/OiBUZWxlbWV0cnlMZXZlbFR5cGU7XG4gIGxvZ2dpbmdMZXZlbD86IExvZ2dpbmdMZXZlbFR5cGU7XG4gIGNvbnNvbGVMb2dnaW5nTGV2ZWw/OiBMb2dnaW5nTGV2ZWxUeXBlO1xuICBhdXRvbWF0aWNhbGx5UGxheU1lZGlhU3RyZWFtPzogYm9vbGVhbjtcbiAgYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmU/OiBib29sZWFuO1xuICB3ZWJQbGF5ZXJMb2FkZXI/OiAocGxheWVyOiBXZWJQbGF5ZXJUeXBlKSA9PiB2b2lkO1xuICBzaGFrYVBsYXllckxvYWRlcj86IChwbGF5ZXI6IFNoYWthVHlwZSkgPT4gdm9pZDtcbiAgaGxzSnNMb2FkZXI/OiAocGxheWVyOiBIbHNQbGF5ZXJUeXBlKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTREsge1xuICBwcml2YXRlIHN0YXRpYyBfYXV0b21hdGljYWxseVJldHJ5T25GYWlsdXJlID0gdHJ1ZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX2F1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbiA9IHRydWU7XG4gIHByaXZhdGUgc3RhdGljIF9hdXRvbWF0aWNhbGx5UGxheU1lZGlhU3RyZWFtID0gdHJ1ZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX2F1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlID0gdHJ1ZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX2ZvcmNlR2FyYmFnZUNvbGxlY3Rpb25PblJlc3RhcnQgPSB0cnVlO1xuICBwcml2YXRlIHN0YXRpYyBfc2tpcEdhcmJhZ2VDb2xsZWN0aW9uT25Nb2JpbGVEZXZpY2VzID0gdHJ1ZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX3dlYlBsYXllckxvYWRlciA9IG51bGw7XG4gIHByaXZhdGUgc3RhdGljIF9zaGFrYVBsYXllckxvYWRlciA9IG51bGw7XG4gIHByaXZhdGUgc3RhdGljIF9obHNKc0xvYWRlciA9IG51bGw7XG4gIHByaXZhdGUgc3RhdGljIF9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyOiBJQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlciA9IG5ldyBDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyKCk7XG4gIHByaXZhdGUgc3RhdGljIF9hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvcjogQXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3I7XG4gIHByaXZhdGUgc3RhdGljIF9lbnZpcm9ubWVudDogU3ViamVjdDxzdHJpbmc+ID0gbmV3IFN1YmplY3Q8c3RyaW5nPignJyk7XG4gIHByaXZhdGUgc3RhdGljIF90ZWxlbWV0cnlVcmw6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBTdWJqZWN0PHN0cmluZz4oJ2h0dHBzOi8vdGVsZW1ldHJ5LnBoZW5peHJ0cy5jb20vdGVsZW1ldHJ5Jyk7XG4gIHByaXZhdGUgc3RhdGljIF9tYXhpbWFsTnVtYmVyT2ZQZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzID0gODtcbiAgcHJpdmF0ZSBzdGF0aWMgX3RlbGVtZXRyeUxldmVsOiBTdWJqZWN0PFRlbGVtZXRyeUxldmVsPiA9IG5ldyBTdWJqZWN0PFRlbGVtZXRyeUxldmVsPihUZWxlbWV0cnlEZWZhdWx0LmRlZmF1bHRUZWxlbWV0cnlMZXZlbCk7XG4gIHByaXZhdGUgc3RhdGljIF9tZXRyaWNzU2VydmljZTogTWV0cmljc1NlcnZpY2U7XG4gIHByaXZhdGUgc3RhdGljIF9tZXRyaWNzQ29uZmlndXJhdGlvbjogTWV0cmljc0NvbmZpZ3VyYXRpb247XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9zZW5kTG9jYWxDYW5kaWRhdGVzOiBTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFN1YmplY3QoQnVpbGRGZWF0dXJlcy5zZW5kTG9jYWxDYW5kaWRhdGVzKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX3RlbmFuY3k6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBTdWJqZWN0PHN0cmluZz4oJycpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfY2xpZW50U2Vzc2lvbklkOiBzdHJpbmcgPSBTdHJpbmdzLnJhbmRvbSgzMik7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9sb2FkZWRUaW1lc3RhbXA6IERhdGUgPSBuZXcgRGF0ZSgpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1NESycpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaW5pdGlhbGl6ZWQ6IFN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9yZWFkT25seUluaXRpYWxpemVkOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KFNESy5faW5pdGlhbGl6ZWQpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfcmVhZE9ubHlEaXNjb3ZlcnlVcmk6IFJlYWRPbmx5U3ViamVjdDxzdHJpbmc+ID0gbmV3IFJlYWRPbmx5U3ViamVjdDxzdHJpbmc+KERpc2NvdmVyeVVyaS51cmkpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfcmVhZE9ubHlQZWVyQ29ubmVjdGlvbkZhY3Rvcnk6IFJlYWRPbmx5U3ViamVjdDxJUGVlckNvbm5lY3Rpb25GYWN0b3J5PiA9IG5ldyBSZWFkT25seVN1YmplY3Q8SVBlZXJDb25uZWN0aW9uRmFjdG9yeT4oUGVlckNvbm5lY3Rpb25TZXJ2aWNlLnBlZXJDb25uZWN0aW9uRmFjdG9yeSk7XG5cbiAgc3RhdGljIGdldCBwYWdlTG9hZFRpbWUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gcGFnZUxvYWRUaW1lO1xuICB9XG5cbiAgc3RhdGljIGdldCBzZW5kTG9jYWxDYW5kaWRhdGVzKCk6IFN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9zZW5kTG9jYWxDYW5kaWRhdGVzO1xuICB9XG5cbiAgc3RhdGljIGdldCB0ZW5hbmN5KCk6IFN1YmplY3Q8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuX3RlbmFuY3k7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGNsaWVudFNlc3Npb25JZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBTREsuX2NsaWVudFNlc3Npb25JZDtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgbG9hZGVkVGltZXN0YW1wKCk6IERhdGUge1xuICAgIHJldHVybiBTREsuX2xvYWRlZFRpbWVzdGFtcDtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaW5pdGlhbGl6ZWQoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gU0RLLl9yZWFkT25seUluaXRpYWxpemVkO1xuICB9XG5cbiAgc3RhdGljIGdldCBkaXNjb3ZlcnlVcmkoKTogUmVhZE9ubHlTdWJqZWN0PHN0cmluZz4ge1xuICAgIHJldHVybiBTREsuX3JlYWRPbmx5RGlzY292ZXJ5VXJpO1xuICB9XG5cbiAgc3RhdGljIGdldCBwZWVyQ29ubmVjdGlvbkZhY3RvcnkoKTogUmVhZE9ubHlTdWJqZWN0PElQZWVyQ29ubmVjdGlvbkZhY3Rvcnk+IHtcbiAgICByZXR1cm4gU0RLLl9yZWFkT25seVBlZXJDb25uZWN0aW9uRmFjdG9yeTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYXV0b21hdGljUmV0cnlPbkZhaWx1cmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIFNESy5fYXV0b21hdGljYWxseVJldHJ5T25GYWlsdXJlO1xuICB9XG5cbiAgc3RhdGljIGdldCBhdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIFNESy5fYXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uO1xuICB9XG5cbiAgc3RhdGljIGdldCBhdXRvbWF0aWNhbGx5UGxheU1lZGlhU3RyZWFtKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBTREsuX2F1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW07XG4gIH1cblxuICBzdGF0aWMgZ2V0IGF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBTREsuX2F1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlO1xuICB9XG5cbiAgc3RhdGljIGdldCBmb3JjZUdhcmJhZ2VDb2xsZWN0aW9uT25SZXN0YXJ0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9mb3JjZUdhcmJhZ2VDb2xsZWN0aW9uT25SZXN0YXJ0O1xuICB9XG5cbiAgc3RhdGljIGdldCBza2lwR2FyYmFnZUNvbGxlY3Rpb25Pbk1vYmlsZURldmljZXMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3NraXBHYXJiYWdlQ29sbGVjdGlvbk9uTW9iaWxlRGV2aWNlcztcbiAgfVxuXG4gIHN0YXRpYyBnZXQgd2ViUGxheWVyTG9hZGVyKCk6IChXZWJQbGF5ZXJUeXBlKSA9PiB2b2lkIHtcbiAgICByZXR1cm4gdGhpcy5fd2ViUGxheWVyTG9hZGVyO1xuICB9XG5cbiAgc3RhdGljIGdldCBzaGFrYVBsYXllckxvYWRlcigpOiAoU2hha2FUeXBlKSA9PiB2b2lkIHtcbiAgICByZXR1cm4gdGhpcy5fc2hha2FQbGF5ZXJMb2FkZXI7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGhsc0pzTG9hZGVyKCk6IChIbHNQbGF5ZXJUeXBlKSA9PiB2b2lkIHtcbiAgICByZXR1cm4gdGhpcy5faGxzSnNMb2FkZXI7XG4gIH1cblxuICBzdGF0aWMgZ2V0IG1ldHJpY3NTZXJ2aWNlKCk6IE1ldHJpY3NTZXJ2aWNlIHtcbiAgICByZXR1cm4gU0RLLl9tZXRyaWNzU2VydmljZTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IoKTogQXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3Ige1xuICAgIHJldHVybiB0aGlzLl9hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvcjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgdGVsZW1ldHJ5VXJsKCk6IFN1YmplY3Q8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuX3RlbGVtZXRyeVVybDtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgbWF4aW1hbE51bWJlck9mUGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9tYXhpbWFsTnVtYmVyT2ZQZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzO1xuICB9XG5cbiAgc3RhdGljIHNldCBtYXhpbWFsTnVtYmVyT2ZQZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzKHJldHJpZXNBbW91bnQ6IG51bWJlcikge1xuICAgIHRoaXMuX21heGltYWxOdW1iZXJPZlBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMgPSByZXRyaWVzQW1vdW50O1xuICB9XG5cbiAgc3RhdGljIGdldCBsb2dnaW5nTGV2ZWwoKTogTG9nZ2luZ0xldmVsVHlwZSB7XG4gICAgcmV0dXJuIExvZ2dpbmdMZXZlbE1hcHBpbmcuY29udmVydExvZ2dpbmdMZXZlbFRvTG9nZ2luZ0xldmVsVHlwZSh0aGlzLl9sb2dnZXIudGhyZXNob2xkLnZhbHVlKTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgdGVsZW1ldHJ5TGV2ZWwoKTogVGVsZW1ldHJ5TGV2ZWxUeXBlIHtcbiAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWxNYXBwaW5nLmNvbnZlcnRUZWxlbWV0cnlMZXZlbFRvVGVsZW1ldHJ5TGV2ZWxUeXBlKFNESy5fdGVsZW1ldHJ5TGV2ZWwudmFsdWUpO1xuICB9XG5cbiAgc3RhdGljIGdldCBicm93c2VyRGV0ZWN0b3IoKTogQnJvd3NlckRldGVjdG9yIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5VGVsZW1ldHJ5Q29uZmlndXJhdGlvbigpOiB2b2lkIHtcbiAgICBjb25zdCB0ZWxlbWV0cnlDb25maWd1cmF0aW9uID0gTG9nZ2VyRmFjdG9yeS50ZWxlbWV0cnlDb25maWd1cmF0aW9uO1xuXG4gICAgdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi5zZXNzaW9uSWQgPSBTREsuY2xpZW50U2Vzc2lvbklkO1xuICAgIHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24ucGFnZUxvYWRUaW1lID0gU0RLLnBhZ2VMb2FkVGltZTtcblxuICAgIGNvbnN0IGlnbm9yZWRFbnZpcm9ubWVudCA9IFNESy5fZW52aXJvbm1lbnQuc3Vic2NyaWJlKGVudmlyb25tZW50ID0+IHtcbiAgICAgIHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24uZW52aXJvbm1lbnQgPSBlbnZpcm9ubWVudDtcbiAgICB9KTtcbiAgICBjb25zdCBpZ25vcmVkRGlzY292ZXJ5VXJpID0gU0RLLnRlbGVtZXRyeVVybC5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgY29uc3QgdGVsZW1ldHJ5QXBwZW5kZXIgPSB0aGlzLl9sb2dnZXIuYXBwZW5kZXJzLnZhbHVlLmZpbmQoYXBwZW5kZXIgPT4gYXBwZW5kZXIgaW5zdGFuY2VvZiBUZWxlbWV0cnlBcHBlbmRlcik7XG5cbiAgICAgIGlmICh0ZWxlbWV0cnlBcHBlbmRlcikge1xuICAgICAgICB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLnVybCA9IHZhbHVlO1xuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMucmVtb3ZlKHRlbGVtZXRyeUFwcGVuZGVyKTtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmFwcGVuZGVycy5hZGQobmV3IFRlbGVtZXRyeUFwcGVuZGVyKHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24pKTtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1RlbGVtZXRyeSBVUkwgd2FzIHNldCB0byBbJXNdJywgdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi51cmwpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IGlnbm9yZWRUZW5hbmN5ID0gU0RLLl90ZW5hbmN5LnN1YnNjcmliZSh0ZW5hbmN5ID0+IHtcbiAgICAgIGNvbnN0IHRlbGVtZXRyeUFwcGVuZGVyID0gdGhpcy5fbG9nZ2VyLmFwcGVuZGVycy52YWx1ZS5maW5kKGFwcGVuZGVyID0+IGFwcGVuZGVyIGluc3RhbmNlb2YgVGVsZW1ldHJ5QXBwZW5kZXIpO1xuXG4gICAgICBpZiAodGVsZW1ldHJ5QXBwZW5kZXIgJiYgdGVuYW5jeSkge1xuICAgICAgICB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLnRlbmFuY3kgPSB0ZW5hbmN5O1xuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMucmVtb3ZlKHRlbGVtZXRyeUFwcGVuZGVyKTtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmFwcGVuZGVycy5hZGQobmV3IFRlbGVtZXRyeUFwcGVuZGVyKHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24pKTtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1RlbGVtZXRyeSB0ZW5hbmN5IHdhcyBzZXQgdG8gWyVzXScsIHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24udGVuYW5jeSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgYXBwbHlNZXRyaWNzQ29uZmlndXJhdGlvbigpOiB2b2lkIHtcbiAgICBTREsuX21ldHJpY3NTZXJ2aWNlID0gTWV0cmljc0ZhY3RvcnkuZ2V0TWV0cmljc1NlcnZpY2UoRGlzY292ZXJ5VXJpLnVyaS52YWx1ZSk7XG4gICAgU0RLLl9tZXRyaWNzQ29uZmlndXJhdGlvbiA9IFNESy5fbWV0cmljc1NlcnZpY2UubWV0cmljc0NvbmZpZ3VyYXRpb247XG5cbiAgICBTREsuX21ldHJpY3NDb25maWd1cmF0aW9uLnNlc3Npb25JZCA9IFNESy5jbGllbnRTZXNzaW9uSWQ7XG5cbiAgICBjb25zdCBpZ25vcmVkRW52aXJvbm1lbnQgPSBTREsuX2Vudmlyb25tZW50LnN1YnNjcmliZShlbnZpcm9ubWVudCA9PiB7XG4gICAgICBTREsuX21ldHJpY3NDb25maWd1cmF0aW9uLmVudmlyb25tZW50ID0gZW52aXJvbm1lbnQ7XG4gICAgfSk7XG4gICAgY29uc3QgaWdub3JlZERpc2NvdmVyeVVyaSA9IFNESy50ZWxlbWV0cnlVcmwuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgIFNESy5fbWV0cmljc0NvbmZpZ3VyYXRpb24udXJsID0gdmFsdWU7XG4gICAgfSk7XG4gICAgY29uc3QgaWdub3JlZFRlbmFuY3kgPSBTREsuX3RlbmFuY3kuc3Vic2NyaWJlKHRlbmFuY3kgPT4ge1xuICAgICAgU0RLLl9tZXRyaWNzQ29uZmlndXJhdGlvbi50ZW5hbmN5ID0gdGVuYW5jeTtcbiAgICB9KTtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0U3RyaW5nVmFsdWUoJ3BoZW5peC1tZXRyaWNzLWxldmVsJyk7XG5cbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIE1ldHJpY3NGYWN0b3J5LnNldFRlbGVtZXRyeUxldmVsKFRlbGVtZXRyeUxldmVsW3ZhbHVlXSk7XG4gICAgfVxuXG4gICAgY29uc3QgaWdub3JlZFRlbGVtZXRyeUxldmVsID0gU0RLLl90ZWxlbWV0cnlMZXZlbC5zdWJzY3JpYmUodGVsZW1ldHJ5TGV2ZWwgPT4ge1xuICAgICAgTWV0cmljc0ZhY3Rvcnkuc2V0VGVsZW1ldHJ5TGV2ZWwodGVsZW1ldHJ5TGV2ZWwpO1xuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5QXV0b21hdGljYWxseVJldHJ5T25GYWlsdXJlRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5fYXV0b21hdGljYWxseVJldHJ5T25GYWlsdXJlID0gdGhpcy5fY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRCb29sZWFuVmFsdWUoJ3BoZW5peC1hdXRvbWF0aWNhbGx5LXJldHJ5LW9uLWZhaWx1cmUnKTtcbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnQXV0b21hdGljYWxseSByZXRyeSBvbiBmYWlsdXJlIGlzIHNldCB0bzogWyVzXScsIHRoaXMuX2F1dG9tYXRpY2FsbHlSZXRyeU9uRmFpbHVyZSk7XG5cbiAgICByZXR1cm47XG4gIH1cblxuICBzdGF0aWMgYXBwbHlBdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb25Gcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLl9hdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb24gPSB0aGlzLl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldEJvb2xlYW5WYWx1ZSgncGhlbml4LWF1dG9tYXRpY2FsbHktcmVjb25uZWN0LXBlZXItY29ubmVjdGlvbicpO1xuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdBdXRvbWF0aWNhbGx5IHJlY29ubmVjdCBwZWVyIGNvbm5lY3Rpb24gaXMgc2V0IHRvOiBbJXNdJywgdGhpcy5fYXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uKTtcblxuICAgIHJldHVybjtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseUZvcmNlR2FyYmFnZUNvbGxlY3Rpb25PblJlc3RhcnRGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLl9mb3JjZUdhcmJhZ2VDb2xsZWN0aW9uT25SZXN0YXJ0ID0gdGhpcy5fY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRCb29sZWFuVmFsdWUoJ3BoZW5peC1mb3JjZS1nYXJiYWdlLWNvbGxlY3Rpb24tb24tcmVzdGFydCcpO1xuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdGb3JjZSBnYXJiYWdlIGNvbGxlY3Rpb24gb24gcmVzdGFydCBpcyBzZXQgdG86IFslc10nLCB0aGlzLl9mb3JjZUdhcmJhZ2VDb2xsZWN0aW9uT25SZXN0YXJ0KTtcblxuICAgIHJldHVybjtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseVNraXBHYXJiYWdlQ29sbGVjdGlvbk9uTW9iaWxlRGV2aWNlc0Zyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMuX3NraXBHYXJiYWdlQ29sbGVjdGlvbk9uTW9iaWxlRGV2aWNlcyA9IHRoaXMuX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0Qm9vbGVhblZhbHVlKCdwaGVuaXgtc2tpcC1nYXJiYWdlLWNvbGxlY3Rpb24tb24tbW9iaWxlLWRldmljZXMnKTtcbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnU2tpcCBnYXJiYWdlIGNvbGxlY3Rpb24gb24gbW9iaWxlIGRldmljZXMgb24gcmVzdGFydCBpcyBzZXQgdG86IFslc10nLCB0aGlzLl9za2lwR2FyYmFnZUNvbGxlY3Rpb25Pbk1vYmlsZURldmljZXMpO1xuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5RGlzY292ZXJ5VXJpRGVmYXVsdEZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk6IHZvaWQge1xuICAgIFNESy5kaXNjb3ZlcnlVcmkuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgIFNESy50ZWxlbWV0cnlVcmwudmFsdWUgPSBTREsuZ2V0VGVsZW1ldHJ5VXJsKHZhbHVlKTtcbiAgICAgIFNESy5fZW52aXJvbm1lbnQudmFsdWUgPSBFbnZpcm9ubWVudC5nZXRFbnZpcm9ubWVudEZyb21VcmwodmFsdWUpO1xuICAgIH0pO1xuXG4gICAgY29uc3QgY2hhbm5lbFRva2VuID0gdGhpcy5fY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRTdHJpbmdWYWx1ZSgncGhlbml4LWNoYW5uZWwtdG9rZW4nKTtcblxuICAgIGlmIChjaGFubmVsVG9rZW4pIHtcbiAgICAgIGNvbnN0IGVkZ2VUb2tlbiA9IEVkZ2VBdXRoUGFyc2VyLnBhcnNlVG9rZW4oY2hhbm5lbFRva2VuKTtcblxuICAgICAgU0RLLl90ZW5hbmN5LnZhbHVlID0gZWRnZVRva2VuLnRlbmFuY3k7XG4gICAgICBEaXNjb3ZlcnlVcmkudXJpLnZhbHVlID0gKGVkZ2VUb2tlbi51cmkgfHwgU0RLLmRpc2NvdmVyeVVyaS52YWx1ZSkudG9TdHJpbmcoKTtcblxuICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0Rpc2NvdmVyeSBVUkkgc2V0IGZyb20gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIgdG8gWyVzXScsIFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdXJpVmFsdWUgPSB0aGlzLl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldFN0cmluZ1ZhbHVlKCdwaGVuaXgtdXJpJyk7XG5cbiAgICBpZiAodXJpVmFsdWUpIHtcbiAgICAgIERpc2NvdmVyeVVyaS51cmkudmFsdWUgPSB1cmlWYWx1ZTtcbiAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdEaXNjb3ZlcnkgVVJJIHNldCBmcm9tIFwicGhlbml4LXVyaVwiIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIHRhZyB0byBbJXNdJywgU0RLLmRpc2NvdmVyeVVyaS52YWx1ZSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBiYXNlVVJJVmFsdWUgPSB0aGlzLl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldFN0cmluZ1ZhbHVlKCdwaGVuaXgtYmFzZS11cmknKTtcblxuICAgIGlmIChiYXNlVVJJVmFsdWUpIHtcbiAgICAgIGNvbnN0IHVyaSA9IG5ldyBVUkwoYmFzZVVSSVZhbHVlKTtcblxuICAgICAgdXJpLnBhdGhuYW1lID0gJy9wY2FzdC9lbmRQb2ludHMnO1xuICAgICAgRGlzY292ZXJ5VXJpLnVyaS52YWx1ZSA9IHVyaS50b1N0cmluZygpO1xuICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0Rpc2NvdmVyeSBVUkkgc2V0IGZyb20gXCJwaGVuaXgtYmFzZS11cmlcIiBjb25maWd1cmF0aW9uIHBhcmFtZXRlciB0YWcgdG8gWyVzXScsIFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGluaXQob3B0aW9ucz86IElJbml0T3B0aW9ucyk6IHZvaWQge1xuICAgIGlmICghdGhpcy5faW5pdGlhbGl6ZWQudmFsdWUpIHtcbiAgICAgIHRoaXMuX2FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yID0gbmV3IEFwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yKCk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgIGlmIChvcHRpb25zLmRpc2NvdmVyeVVyaSkge1xuICAgICAgICBEaXNjb3ZlcnlVcmkudXJpLnZhbHVlID0gb3B0aW9ucy5kaXNjb3ZlcnlVcmk7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLnBlZXJDb25uZWN0aW9uRmFjdG9yeSkge1xuICAgICAgICBQZWVyQ29ubmVjdGlvblNlcnZpY2UucGVlckNvbm5lY3Rpb25GYWN0b3J5LnZhbHVlID0gb3B0aW9ucy5wZWVyQ29ubmVjdGlvbkZhY3Rvcnk7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLnRlbGVtZXRyeUxldmVsICYmIFRlbGVtZXRyeUxldmVsW29wdGlvbnMudGVsZW1ldHJ5TGV2ZWxdKSB7XG4gICAgICAgIFNESy5fdGVsZW1ldHJ5TGV2ZWwudmFsdWUgPSBUZWxlbWV0cnlMZXZlbE1hcHBpbmcuY29udmVydFRlbGVtZXRyeUxldmVsVHlwZVRvVGVsZW1ldHJ5TGV2ZWwob3B0aW9ucy50ZWxlbWV0cnlMZXZlbCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLmxvZ2dpbmdMZXZlbCAmJiBMb2dnaW5nTGV2ZWxbb3B0aW9ucy5sb2dnaW5nTGV2ZWxdKSB7XG4gICAgICAgIHRoaXMuX2xvZ2dlci50aHJlc2hvbGQuc2V0VGhyZXNob2xkKExvZ2dpbmdMZXZlbE1hcHBpbmcuY29udmVydExvZ2dpbmdMZXZlbFR5cGVUb0xvZ2dpbmdMZXZlbChvcHRpb25zLmxvZ2dpbmdMZXZlbCkpO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5jb25zb2xlTG9nZ2luZ0xldmVsICYmXG4gICAgICAgIExvZ2dpbmdMZXZlbFtvcHRpb25zLmNvbnNvbGVMb2dnaW5nTGV2ZWxdKSB7XG4gICAgICAgIGNvbnN0IGNvbnNvbGVBcHBlbmRlciA9IHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMudmFsdWUuZmluZChhcHBlbmRlciA9PiBhcHBlbmRlciBpbnN0YW5jZW9mIENvbnNvbGVBcHBlbmRlcik7XG5cbiAgICAgICAgaWYgKGNvbnNvbGVBcHBlbmRlcikge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMucmVtb3ZlKGNvbnNvbGVBcHBlbmRlcik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy5jb25zb2xlTG9nZ2luZ0xldmVsICE9PSAnT2ZmJykge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMuYWRkKG5ldyBDb25zb2xlQXBwZW5kZXIoTG9nZ2luZ0xldmVsTWFwcGluZy5jb252ZXJ0TG9nZ2luZ0xldmVsVHlwZVRvTG9nZ2luZ0xldmVsKG9wdGlvbnMuY29uc29sZUxvZ2dpbmdMZXZlbCkpKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIG9wdGlvbnMuYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIHRoaXMuX2F1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW0gPSBvcHRpb25zLmF1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW07XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5hdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIHRoaXMuX2F1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlID0gb3B0aW9ucy5hdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMud2ViUGxheWVyTG9hZGVyKSB7XG4gICAgICAgIHRoaXMuX3dlYlBsYXllckxvYWRlciA9IG9wdGlvbnMud2ViUGxheWVyTG9hZGVyO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5zaGFrYVBsYXllckxvYWRlcikge1xuICAgICAgICB0aGlzLl9zaGFrYVBsYXllckxvYWRlciA9IG9wdGlvbnMuc2hha2FQbGF5ZXJMb2FkZXI7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLmhsc0pzTG9hZGVyKSB7XG4gICAgICAgIHRoaXMuX2hsc0pzTG9hZGVyID0gb3B0aW9ucy5obHNKc0xvYWRlcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBTREsuX2luaXRpYWxpemVkLnZhbHVlID0gdHJ1ZTtcbiAgfVxuXG4gIHN0YXRpYyBkaXNwb3NlKCk6IHZvaWQge1xuICAgIFNESy5faW5pdGlhbGl6ZWQudmFsdWUgPSBmYWxzZTtcbiAgICB0aGlzLl9hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvci5kaXNwb3NlKCk7XG4gICAgdGhpcy5fYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IgPSBudWxsO1xuICB9XG5cbiAgc3RhdGljIGdldFRlbGVtZXRyeVVybCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFRlbGVtZXRyeVVybC5nZXRUZWxlbWV0cnlVcmwodXJsKTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdTREsgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59XG5cbndpbmRvdy5hZGRFdmVudExpc3RlbmVyKCd1bmxvYWQnLCAoKSA9PiB7XG4gIFNESy5kaXNwb3NlKCk7XG59KTtcblxuU0RLLmFwcGx5RGlzY292ZXJ5VXJpRGVmYXVsdEZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk7XG5TREsuYXBwbHlNZXRyaWNzQ29uZmlndXJhdGlvbigpO1xuU0RLLmFwcGx5VGVsZW1ldHJ5Q29uZmlndXJhdGlvbigpO1xuU0RLLmFwcGx5QXV0b21hdGljYWxseVJldHJ5T25GYWlsdXJlRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTtcblNESy5hcHBseUF1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbkZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk7XG5TREsuYXBwbHlGb3JjZUdhcmJhZ2VDb2xsZWN0aW9uT25SZXN0YXJ0RnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTtcblNESy5hcHBseVNraXBHYXJiYWdlQ29sbGVjdGlvbk9uTW9iaWxlRGV2aWNlc0Zyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk7XG5TREsuaW5pdCgpOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZWxlbWV0cnlVcmwge1xuICBzdGF0aWMgZ2V0VGVsZW1ldHJ5VXJsKHVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYmFzZVVSTCA9IG5ldyBVUkwodXJsKTtcbiAgICAgIGNvbnN0IHNlZ21lbnRzID0gYmFzZVVSTC5ob3N0bmFtZS5zcGxpdCgnLicpO1xuXG4gICAgICBzd2l0Y2ggKGJhc2VVUkwucHJvdG9jb2wpIHtcbiAgICAgICAgY2FzZSAnd3M6JzpcbiAgICAgICAgICBiYXNlVVJMLnByb3RvY29sID0gJ2h0dHA6JztcblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICd3c3M6JzpcbiAgICAgICAgICBiYXNlVVJMLnByb3RvY29sID0gJ2h0dHBzOic7XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBpZiAoc2VnbWVudHMubGVuZ3RoID09PSAyIHx8XG4gICAgICAgICAgKHNlZ21lbnRzLmxlbmd0aCA9PT0gMyAmJiBzZWdtZW50c1tzZWdtZW50cy5sZW5ndGggLSAyXS5sZW5ndGggPD0gMiAmJiBzZWdtZW50c1tzZWdtZW50cy5sZW5ndGggLSAxXS5sZW5ndGggPD0gMylcbiAgICAgICkge1xuICAgICAgICBzZWdtZW50cy51bnNoaWZ0KCd0ZWxlbWV0cnknKTtcbiAgICAgIH0gZWxzZSBpZiAoc2VnbWVudHNbMF0uc3RhcnRzV2l0aCgnc3RnLScpIHx8IHNlZ21lbnRzWzBdLmVuZHNXaXRoKCctc3RnJykgfHwgc2VnbWVudHNbMF0uaW5jbHVkZXMoJy1zdGctJykgfHwgc2VnbWVudHNbMF0gPT09ICdzdGcnKSB7XG4gICAgICAgIHNlZ21lbnRzWzBdID0gJ3RlbGVtZXRyeS1zdGcnO1xuICAgICAgfSBlbHNlIGlmIChzZWdtZW50c1swXS5zdGFydHNXaXRoKCdsb2NhbCcpIHx8IHNlZ21lbnRzWzBdLmVuZHNXaXRoKCctbG9jYWwnKSkge1xuICAgICAgICAvLyBMZWF2ZSBVUkwgdW5jaGFuZ2VkXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZWdtZW50c1swXSA9ICd0ZWxlbWV0cnknO1xuICAgICAgfVxuXG4gICAgICBiYXNlVVJMLmhvc3RuYW1lID0gc2VnbWVudHMuam9pbignLicpO1xuXG4gICAgICByZXR1cm4gYCR7YmFzZVVSTC5vcmlnaW59L3RlbGVtZXRyeWA7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIHVybDtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuZXhwb3J0IHR5cGUgQml0cmF0ZVN0YXRlVHlwZSA9ICdLZWVwJyB8ICdSZXNldCc7XG5leHBvcnQgdHlwZSBCaXRyYXRlTW9kZVR5cGUgPSAnTm9ybWFsJyB8ICdGb3JjZScgfCAnUmVzZXQnO1xuXG5leHBvcnQgZW51bSBCaXRyYXRlU3RhdGUge1xuICBLZWVwLFxuICBSZXNldFxufVxuXG5leHBvcnQgZW51bSBCaXRyYXRlTW9kZSB7XG4gIE5vcm1hbCxcbiAgRm9yY2UsXG4gIFJlc2V0XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlIHtcbiAgYXBpVmVyc2lvbjogbnVtYmVyO1xuICBzaGFyZWRTZWNyZXQ6IHN0cmluZztcbiAgZWxhcHNlZEluTWlsbGlzZWNvbmRzOiBudW1iZXI7XG4gIGJpdHJhdGVJbkJpdHNQZXJTZWNvbmQ6IG51bWJlcjtcbiAgYml0cmF0ZVN0YXRlOiBCaXRyYXRlU3RhdGVUeXBlO1xuICBiaXRyYXRlTW9kZTogQml0cmF0ZU1vZGVUeXBlO1xufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uLy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuaW1wb3J0IFJlYWRPbmx5U3ViamVjdCBmcm9tICcuLi8uLi9yeC9SZWFkT25seVN1YmplY3QnO1xuaW1wb3J0IERpbWVuc2lvbiBmcm9tICcuLi8uLi92aWRlby9EaW1lbnNpb24nO1xuaW1wb3J0IEV4cG9uZW50aWFsQmFja29mZiBmcm9tICcuLi8uLi90aW1lL0V4cG9uZW50aWFsQmFja29mZic7XG5pbXBvcnQgRW5kUG9pbnQsIHtJU3RyZWFtfSBmcm9tICcuLi9kaXNjb3ZlcnkvRW5kUG9pbnQnO1xuaW1wb3J0IFNESyBmcm9tICcuLi9TREsnO1xuaW1wb3J0IEdhcmJhZ2VDb2xsZWN0b3JNYW5hZ2VyIGZyb20gJy4uLy4uL2RvbS9HYXJiYWdlQ29sbGVjdG9yTWFuYWdlcic7XG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uIGZyb20gJy4uLy4uL3J0Yy9JUGVlckNvbm5lY3Rpb24nO1xuaW1wb3J0IENoYW5uZWxTdGF0ZSBmcm9tICcuL0NoYW5uZWxTdGF0ZSc7XG5pbXBvcnQgYXNzZXJ0VW5yZWFjaGFibGUgZnJvbSAnLi4vLi4vbGFuZy9hc3NlcnRVbnJlYWNoYWJsZSc7XG5pbXBvcnQgRGlzcG9zYWJsZSBmcm9tICcuLi8uLi9sYW5nL0Rpc3Bvc2FibGUnO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBWaWRlb1RlbGVtZXRyeSBmcm9tICcuLi8uLi92aWRlby9WaWRlb1RlbGVtZXRyeSc7XG5pbXBvcnQgU2Vzc2lvblRlbGVtZXRyeSBmcm9tICcuLi8uLi92aWRlby9TZXNzaW9uVGVsZW1ldHJ5JztcbmltcG9ydCB7SVJ0Y01vbml0b3JTdGF0aXN0aWN9IGZyb20gJy4uLy4uL3J0Yy9SdGNDb25uZWN0aW9uTW9uaXRvcic7XG5pbXBvcnQge0JpdHJhdGVNb2RlLCBCaXRyYXRlU3RhdGV9IGZyb20gJy4uL2FwaS9TZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZSc7XG5pbXBvcnQgRWRnZUF1dGhQYXJzZXIgZnJvbSAnLi4vLi4vZWRnZUF1dGgvRWRnZUF1dGhQYXJzZXInO1xuaW1wb3J0IHtFbmNvZGVkRWRnZVRva2VufSBmcm9tICcuLi8uLi9lZGdlQXV0aC9FbmNvZGVkRWRnZVRva2VuJztcbmltcG9ydCB7Qml0c1BlclNlY29uZCwgTWlsbGlzZWNvbmR9IGZyb20gJy4uLy4uL3VuaXRzL1VuaXRzJztcbmltcG9ydCBUb2tlbkNvbnRleHQgZnJvbSAnLi4vY29udGV4dC9Ub2tlbkNvbnRleHQnO1xuaW1wb3J0IENoYW5uZWxDb250ZXh0LCB7Q2hhbm5lbENvbnRleHRPcHRpb25zfSBmcm9tICcuLi9jb250ZXh0L0NoYW5uZWxDb250ZXh0JztcbmltcG9ydCBFbmNvZGVkU3RyZWFtU2luaywge0lFbmNvZGVkU3RyZWFtU2lua30gZnJvbSAnLi4vdHJhbnNmb3JtYXRpb24vRW5jb2RlZFN0cmVhbVNpbmsnO1xuaW1wb3J0IFN0cmVhbVRyYWNrVHJhbnNmb3JtLCB7SVN0cmVhbVRyYWNrVHJhbnNmb3JtfSBmcm9tICcuLi90cmFuc2Zvcm1hdGlvbi9TdHJlYW1UcmFja1RyYW5zZm9ybSc7XG5pbXBvcnQgU3RyZWFtVHJhbnNmb3JtQ29udGV4dCwge1N0cmVhbVRyYW5zZm9ybUNvbnRleHRPcHRpb25zfSBmcm9tICcuLi9jb250ZXh0L1N0cmVhbVRyYW5zZm9ybUNvbnRleHQnO1xuaW1wb3J0IFBlZXJDb25uZWN0aW9uQ29udGV4dCBmcm9tICcuLi9jb250ZXh0L1BlZXJDb25uZWN0aW9uQ29udGV4dCc7XG5pbXBvcnQgU3RhdGVDb250ZXh0IGZyb20gJy4uL2NvbnRleHQvU3RhdGVDb250ZXh0JztcbmltcG9ydCBTdHJlYW1GYWN0b3J5IGZyb20gJy4uL3N0cmVhbWluZy9TdHJlYW1GYWN0b3J5JztcbmltcG9ydCBEaXNjb3ZlcnkgZnJvbSAnLi4vZGlzY292ZXJ5L0Rpc2NvdmVyeSc7XG5pbXBvcnQgRGlzY292ZXJ5VXJpIGZyb20gJy4uL2Rpc2NvdmVyeS9EaXNjb3ZlcnlVcmknO1xuaW1wb3J0IE1ldHJpY3NGYWN0b3J5IGZyb20gJy4uLy4uL21ldHJpY3MvTWV0cmljc0ZhY3RvcnknO1xuaW1wb3J0IE1ldHJpY3NTZXJ2aWNlIGZyb20gJy4uLy4uL21ldHJpY3MvTWV0cmljc1NlcnZpY2UnO1xuaW1wb3J0IEZlYXR1cmVFbmFibGVtZW50IGZyb20gJy4uLy4uL2Vudmlyb25tZW50L0ZlYXR1cmVFbmFibGVtZW50JztcblxuY29uc3QgZGVmYXVsdFN0cmVhbVRlcm1pbmF0aW9uUmVhc29uID0gJ2NsaWVudDp0ZXJtaW5hdGlvbic7XG5jb25zdCBmYWlsdXJlQ291bnRDbGVhblVwSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcyA9IDMwMDA7XG5jb25zdCBzdGFuZGJ5UG9sbGluZ0ludGVydmFsSW5NaWxsaXNlY29uZHMgPSAxNTAwMDtcblxuZXhwb3J0IHR5cGUgQ2hhbm5lbE9wdGlvbnMgPSB7XG4gIHRhcmdldExhZz86IE1pbGxpc2Vjb25kO1xuICB2aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrPzogSVN0cmVhbVRyYWNrVHJhbnNmb3JtPFZpZGVvRnJhbWU+O1xuICBhdWRpb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrPzogSVN0cmVhbVRyYWNrVHJhbnNmb3JtPEF1ZGlvRGF0YT47XG4gIGVuY29kZWRWaWRlb1N0cmVhbVNpbms/OiBJRW5jb2RlZFN0cmVhbVNpbms8UlRDRW5jb2RlZFZpZGVvRnJhbWU+O1xuICBlbmNvZGVkQXVkaW9TdHJlYW1TaW5rPzogSUVuY29kZWRTdHJlYW1TaW5rPFJUQ0VuY29kZWRBdWRpb0ZyYW1lPjtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENoYW5uZWwgaW1wbGVtZW50cyBJRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdDaGFubmVsJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3Rva2VuQ29udGV4dDogVG9rZW5Db250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9jaGFubmVsQ29udGV4dDogQ2hhbm5lbENvbnRleHQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BlZXJDb25uZWN0aW9uQ29udGV4dDogUGVlckNvbm5lY3Rpb25Db250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0OiBTdHJlYW1UcmFuc2Zvcm1Db250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdGF0ZUNvbnRleHQ6IFN0YXRlQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfZXhwb25lbnRpYWxCYWNrb2ZmOiBFeHBvbmVudGlhbEJhY2tvZmY7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NoYW5uZWxTdGFydFRpbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlWaWRlb0VsZW1lbnQ6IFJlYWRPbmx5U3ViamVjdDxIVE1MVmlkZW9FbGVtZW50PjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlUb2tlbjogUmVhZE9ubHlTdWJqZWN0PEVuY29kZWRFZGdlVG9rZW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVBlZXJDb25uZWN0aW9uOiBSZWFkT25seVN1YmplY3Q8SVBlZXJDb25uZWN0aW9uPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlTdGF0ZTogUmVhZE9ubHlTdWJqZWN0PENoYW5uZWxTdGF0ZT47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5QXV0b011dGVkOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5QXV0b1BhdXNlZDogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVRva2VuRXhwaXJpbmc6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlBdXRob3JpemVkOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5T25saW5lOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5TG9hZGluZzogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVBsYXlpbmc6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlTdGFuZGJ5OiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5U3RvcHBlZDogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVRhcmdldExhZzogUmVhZE9ubHlTdWJqZWN0PE1pbGxpc2Vjb25kPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlMYWc6IFJlYWRPbmx5U3ViamVjdDxNaWxsaXNlY29uZD47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5Qml0cmF0ZUxpbWl0OiBSZWFkT25seVN1YmplY3Q8Qml0c1BlclNlY29uZD47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5UmVzb2x1dGlvbjogUmVhZE9ubHlTdWJqZWN0PERpbWVuc2lvbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5RmFpbHVyZUNvdW50OiBSZWFkT25seVN1YmplY3Q8bnVtYmVyPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlFbmRQb2ludDogUmVhZE9ubHlTdWJqZWN0PEVuZFBvaW50PjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlTdHJlYW06IFJlYWRPbmx5U3ViamVjdDxJU3RyZWFtPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlSdGNTdGF0aXN0aWNzOiBSZWFkT25seVN1YmplY3Q8SVJ0Y01vbml0b3JTdGF0aXN0aWM+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seU1lZGlhU3RyZWFtOiBSZWFkT25seVN1YmplY3Q8TWVkaWFTdHJlYW0+O1xuXG4gIHByaXZhdGUgX21ldHJpY3NTZXJ2aWNlOiBNZXRyaWNzU2VydmljZTtcbiAgcHJpdmF0ZSByZWFkb25seSBfc2Vzc2lvblRlbGVtZXRyeTogU2Vzc2lvblRlbGVtZXRyeTtcbiAgcHJpdmF0ZSByZWFkb25seSBfdmlkZW9NZXRhRGF0YUNoYW5nZWRIYW5kbGVyOiAoKSA9PiB2b2lkO1xuXG4gIGNvbnN0cnVjdG9yKHZpZGVvRWxlbWVudDogSFRNTFZpZGVvRWxlbWVudCwgdG9rZW46IEVuY29kZWRFZGdlVG9rZW4sIG9wdGlvbnM/OiBDaGFubmVsT3B0aW9ucykge1xuICAgIGNvbnN0IGVkZ2VUb2tlbiA9IEVkZ2VBdXRoUGFyc2VyLnBhcnNlVG9rZW4odG9rZW4pO1xuICAgIGNvbnN0IGNoYW5uZWxDb250ZXh0T3B0aW9uczogQ2hhbm5lbENvbnRleHRPcHRpb25zID0ge3RhcmdldExhZzogb3B0aW9ucz8udGFyZ2V0TGFnfTtcbiAgICBjb25zdCBzdHJlYW1UcmFuc2Zvcm1Db250ZXh0T3B0aW9uczogU3RyZWFtVHJhbnNmb3JtQ29udGV4dE9wdGlvbnMgPSB7XG4gICAgICBoYXNJbnNlcnRhYmxlU3RyZWFtczogZWRnZVRva2VuLmNhcGFiaWxpdGllcy5pbmNsdWRlcygnaW5zZXJ0YWJsZS1zdHJlYW1zJyksXG4gICAgICBoYXNFbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXM6IGVkZ2VUb2tlbi5jYXBhYmlsaXRpZXMuaW5jbHVkZXMoJ2VuY29kZWQtaW5zZXJ0YWJsZS1zdHJlYW1zJyksXG4gICAgICB2aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrOiBvcHRpb25zPy52aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrLFxuICAgICAgYXVkaW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjazogb3B0aW9ucz8uYXVkaW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjayxcbiAgICAgIGVuY29kZWRWaWRlb1N0cmVhbVNpbms6IG9wdGlvbnM/LmVuY29kZWRWaWRlb1N0cmVhbVNpbmssXG4gICAgICBlbmNvZGVkQXVkaW9TdHJlYW1TaW5rOiBvcHRpb25zPy5lbmNvZGVkQXVkaW9TdHJlYW1TaW5rXG4gICAgfTtcblxuICAgIHRoaXMuX3Rva2VuQ29udGV4dCA9IG5ldyBUb2tlbkNvbnRleHQodG9rZW4pO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0ID0gbmV3IENoYW5uZWxDb250ZXh0KGNoYW5uZWxDb250ZXh0T3B0aW9ucyk7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0ID0gbmV3IFBlZXJDb25uZWN0aW9uQ29udGV4dCgpO1xuICAgIHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQgPSBuZXcgU3RyZWFtVHJhbnNmb3JtQ29udGV4dChzdHJlYW1UcmFuc2Zvcm1Db250ZXh0T3B0aW9ucyk7XG4gICAgdGhpcy5fc3RhdGVDb250ZXh0ID0gbmV3IFN0YXRlQ29udGV4dCgpO1xuICAgIHRoaXMuX2V4cG9uZW50aWFsQmFja29mZiA9IG5ldyBFeHBvbmVudGlhbEJhY2tvZmYoKTtcbiAgICB0aGlzLl9jaGFubmVsU3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICB0aGlzLl9yZWFkT25seVZpZGVvRWxlbWVudCA9IG5ldyBSZWFkT25seVN1YmplY3Q8SFRNTFZpZGVvRWxlbWVudD4odGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50KTtcbiAgICB0aGlzLl9yZWFkT25seVRva2VuID0gbmV3IFJlYWRPbmx5U3ViamVjdDxzdHJpbmc+KHRoaXMuX3Rva2VuQ29udGV4dC50b2tlbik7XG4gICAgdGhpcy5fcmVhZE9ubHlQZWVyQ29ubmVjdGlvbiA9IG5ldyBSZWFkT25seVN1YmplY3Q8SVBlZXJDb25uZWN0aW9uPih0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb24pO1xuICAgIHRoaXMuX3JlYWRPbmx5U3RhdGUgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PENoYW5uZWxTdGF0ZT4odGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUpO1xuICAgIHRoaXMuX3JlYWRPbmx5QXV0b011dGVkID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQpO1xuICAgIHRoaXMuX3JlYWRPbmx5QXV0b1BhdXNlZCA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4odGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b1BhdXNlZCk7XG4gICAgdGhpcy5fcmVhZE9ubHlUb2tlbkV4cGlyaW5nID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl90b2tlbkNvbnRleHQudG9rZW5FeHBpcmluZyk7XG4gICAgdGhpcy5fcmVhZE9ubHlBdXRob3JpemVkID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRob3JpemVkKTtcbiAgICB0aGlzLl9yZWFkT25seU9ubGluZSA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4odGhpcy5fY2hhbm5lbENvbnRleHQub25saW5lKTtcbiAgICB0aGlzLl9yZWFkT25seUxvYWRpbmcgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcpO1xuICAgIHRoaXMuX3JlYWRPbmx5UGxheWluZyA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4odGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZyk7XG4gICAgdGhpcy5fcmVhZE9ubHlTdGFuZGJ5ID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9jaGFubmVsQ29udGV4dC5zdGFuZGJ5KTtcbiAgICB0aGlzLl9yZWFkT25seVN0b3BwZWQgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0b3BwZWQpO1xuICAgIHRoaXMuX3JlYWRPbmx5VGFyZ2V0TGFnID0gbmV3IFJlYWRPbmx5U3ViamVjdDxudW1iZXI+KHRoaXMuX2NoYW5uZWxDb250ZXh0LnRhcmdldExhZyk7XG4gICAgdGhpcy5fcmVhZE9ubHlMYWcgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PG51bWJlcj4odGhpcy5fY2hhbm5lbENvbnRleHQubGFnKTtcbiAgICB0aGlzLl9yZWFkT25seUJpdHJhdGVMaW1pdCA9IG5ldyBSZWFkT25seVN1YmplY3Q8bnVtYmVyPih0aGlzLl9jaGFubmVsQ29udGV4dC5iaXRyYXRlTGltaXQpO1xuICAgIHRoaXMuX3JlYWRPbmx5UmVzb2x1dGlvbiA9IG5ldyBSZWFkT25seVN1YmplY3Q8RGltZW5zaW9uPih0aGlzLl9jaGFubmVsQ29udGV4dC5yZXNvbHV0aW9uKTtcbiAgICB0aGlzLl9yZWFkT25seUZhaWx1cmVDb3VudCA9IG5ldyBSZWFkT25seVN1YmplY3Q8bnVtYmVyPih0aGlzLl9jaGFubmVsQ29udGV4dC5mYWlsdXJlQ291bnQpO1xuICAgIHRoaXMuX3JlYWRPbmx5RW5kUG9pbnQgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PEVuZFBvaW50Pih0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludCk7XG4gICAgdGhpcy5fcmVhZE9ubHlTdHJlYW0gPSBuZXcgUmVhZE9ubHlTdWJqZWN0PElTdHJlYW0+KHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbSk7XG4gICAgdGhpcy5fcmVhZE9ubHlSdGNTdGF0aXN0aWNzID0gbmV3IFJlYWRPbmx5U3ViamVjdDxJUnRjTW9uaXRvclN0YXRpc3RpYz4odGhpcy5fY2hhbm5lbENvbnRleHQucnRjU3RhdGlzdGljcyk7XG4gICAgdGhpcy5fcmVhZE9ubHlNZWRpYVN0cmVhbSA9IG5ldyBSZWFkT25seVN1YmplY3Q8TWVkaWFTdHJlYW0+KHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5tZWRpYVN0cmVhbSk7XG5cbiAgICBjb25zdCBkaXNjb3ZlcnlVcmkgPSAoZWRnZVRva2VuLnVyaSB8fCBTREsuZGlzY292ZXJ5VXJpLnZhbHVlKS50b1N0cmluZygpO1xuXG4gICAgU0RLLnRlbmFuY3kudmFsdWUgPSBlZGdlVG9rZW4udGVuYW5jeSB8fCBTREsudGVuYW5jeS52YWx1ZTtcbiAgICBEaXNjb3ZlcnlVcmkudXJpLnZhbHVlID0gZGlzY292ZXJ5VXJpO1xuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlID0gTWV0cmljc0ZhY3RvcnkuZ2V0TWV0cmljc1NlcnZpY2UoZGlzY292ZXJ5VXJpKTtcbiAgICB0aGlzLl9zZXNzaW9uVGVsZW1ldHJ5ID0gbmV3IFNlc3Npb25UZWxlbWV0cnkoU0RLLnBhZ2VMb2FkVGltZSwgdGhpcy5fbWV0cmljc1NlcnZpY2UpO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmNoYW5uZWxEaXNwb3NhYmxlcy5hZGQodGhpcy5fc2Vzc2lvblRlbGVtZXRyeSk7XG4gICAgdGhpcy5fdmlkZW9NZXRhRGF0YUNoYW5nZWRIYW5kbGVyID0gdGhpcy5oYW5kbGVWaWRlb01ldGFEYXRhQ2hhbmdlZC5iaW5kKHRoaXMpO1xuICAgIHRoaXMudmlkZW9FbGVtZW50ID0gdmlkZW9FbGVtZW50O1xuXG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuY2hhbm5lbERpc3Bvc2FibGVzLmFkZChcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC5zdWJzY3JpYmUodmlkZW9FbGVtZW50ID0+IHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucmVuZGVyZXJEaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG5cbiAgICAgICAgaWYgKCF2aWRlb0VsZW1lbnQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5yZW5kZXJlckRpc3Bvc2FibGVzLmFkZCh0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0uc3Vic2NyaWJlKHN0cmVhbSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvVGVsZW1ldHJ5KSB7XG4gICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb1RlbGVtZXRyeS5kaXNwb3NlKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCFzdHJlYW0pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIXRoaXMudmlkZW9FbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHRoaXMudmlkZW9FbGVtZW50LmRhdGFzZXQpIHtcbiAgICAgICAgICAgIHRoaXMudmlkZW9FbGVtZW50LmRhdGFzZXQuc2Vzc2lvbklkID0gU0RLLmNsaWVudFNlc3Npb25JZDtcbiAgICAgICAgICAgIHRoaXMudmlkZW9FbGVtZW50LmRhdGFzZXQuc3RyZWFtSWQgPSB0aGlzLnN0cmVhbUlkO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvVGVsZW1ldHJ5ID0gbmV3IFZpZGVvVGVsZW1ldHJ5KHRoaXMuc3RyZWFtSWQsIFNESy5wYWdlTG9hZFRpbWUsIHRoaXMuX2NoYW5uZWxTdGFydFRpbWUsIHRoaXMuX21ldHJpY3NTZXJ2aWNlKTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb1RlbGVtZXRyeS5zZXR1cExpc3RlbmVyRm9yVGltZVRvRmlyc3RUaW1lKHRoaXMudmlkZW9FbGVtZW50KTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb1RlbGVtZXRyeS5zZXR1cExpc3RlbmVyRm9yUmVidWZmZXJpbmcodGhpcy52aWRlb0VsZW1lbnQpO1xuXG4gICAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID09PSBDaGFubmVsU3RhdGUuU3RvcHBlZCkge1xuICAgICAgICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMucmVzdGFydEFmdGVyU3RvcCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSkpO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmNoYW5uZWxEaXNwb3NhYmxlcy5hZGQodGhpcy5fY2hhbm5lbENvbnRleHQucmVuZGVyZXJEaXNwb3NhYmxlcyk7XG4gICAgICB9KSk7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuY2hhbm5lbERpc3Bvc2FibGVzLmFkZChcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnN1YnNjcmliZShzdGF0ZSA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5jbGVhckZhaWx1cmVDb3VudFRpbWVvdXQpIHtcbiAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fY2hhbm5lbENvbnRleHQuY2xlYXJGYWlsdXJlQ291bnRUaW1lb3V0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5fY2hhbm5lbENvbnRleHQuZmFpbHVyZUNvdW50LnZhbHVlKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0YXRlICE9PSBDaGFubmVsU3RhdGUuUGxheWluZykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmNsZWFyRmFpbHVyZUNvdW50VGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5mYWlsdXJlQ291bnQudmFsdWUgPSAwO1xuICAgICAgICB9LCBmYWlsdXJlQ291bnRDbGVhblVwSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcyk7XG4gICAgICB9KSk7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuY2hhbm5lbERpc3Bvc2FibGVzLmFkZChcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJlc29sdXRpb24uc3Vic2NyaWJlKHJlc29sdXRpb24gPT4ge1xuICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9UZWxlbWV0cnkpIHtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb1RlbGVtZXRyeS5vblZpZGVvUmVzb2x1dGlvbkNoYW5nZXMocmVzb2x1dGlvbi50b1N0cmluZygpKTtcbiAgICAgICAgfVxuICAgICAgfSkpO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmNoYW5uZWxEaXNwb3NhYmxlcy5hZGQoXG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5iaXRyYXRlTGltaXQuc3Vic2NyaWJlKGJpdHJhdGVMaW1pdCA9PiB7XG4gICAgICAgIGlmIChiaXRyYXRlTGltaXQgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlKSB7XG4gICAgICAgICAgY29uc3QgZWxhcHNlZEluTWlsbGlzZWNvbmRzID0gRGF0ZS5ub3coKSAtIHRoaXMuX2NoYW5uZWxDb250ZXh0LmNoYW5uZWxJbml0aWFsaXphdGlvbi5nZXRUaW1lKCk7XG4gICAgICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlLmxpbWl0Qml0cmF0ZShcbiAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSxcbiAgICAgICAgICAgIGVsYXBzZWRJbk1pbGxpc2Vjb25kcyxcbiAgICAgICAgICAgIGJpdHJhdGVMaW1pdCxcbiAgICAgICAgICAgIEJpdHJhdGVTdGF0ZS5LZWVwLFxuICAgICAgICAgICAgQml0cmF0ZU1vZGUuTm9ybWFsXG4gICAgICAgICAgKVxuICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0Vycm9yIHdoaWxlIHNldHRpbmcgbGltaXQgYml0cmF0ZScsIGUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcblxuICAgIGNvbnN0IGRlc3Ryb3lTdHJlYW1PblVubW91bnQgPSAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZS5kZXN0cm95U3RyZWFtT25Vbm1vdW50KHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSwgJ2NsaWVudDp0ZXJtaW5hdGlvbi1vbi13aW5kb3ctdW5sb2FkJyk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdiZWZvcmV1bmxvYWQnLCBkZXN0cm95U3RyZWFtT25Vbm1vdW50KTtcblxuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmNoYW5uZWxEaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4ge1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2JlZm9yZXVubG9hZCcsIGRlc3Ryb3lTdHJlYW1PblVubW91bnQpO1xuICAgIH0pKTtcblxuICAgIHRoaXMuc3RhcnQoKTtcbiAgfVxuXG4gIGdldCB2aWRlb0VsZW1lbnQoKTogSFRNTFZpZGVvRWxlbWVudCB7XG4gICAgcmV0dXJuIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZTtcbiAgfVxuXG4gIHNldCB2aWRlb0VsZW1lbnQodmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50KSB7XG4gICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZSkge1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2xvYWRlZGRhdGEnLCB0aGlzLl92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXIpO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2xvYWRlZG1ldGFkYXRhJywgdGhpcy5fdmlkZW9NZXRhRGF0YUNoYW5nZWRIYW5kbGVyKTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLl92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXIpO1xuXG4gICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLmRhdGFzZXQpIHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLmRhdGFzZXQuc2Vzc2lvbklkID0gJyc7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5kYXRhc2V0LnN0cmVhbUlkID0gJyc7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJlbmRlcmVyRGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuXG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUucGF1c2UoKTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5zcmNPYmplY3QgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IGZhbHNlO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSBmYWxzZTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlN0b3BwZWQ7XG5cbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUgPSB2aWRlb0VsZW1lbnQ7XG5cbiAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlKSB7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuYWRkRXZlbnRMaXN0ZW5lcignbG9hZGVkZGF0YScsIHRoaXMuX3ZpZGVvTWV0YURhdGFDaGFuZ2VkSGFuZGxlcik7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuYWRkRXZlbnRMaXN0ZW5lcignbG9hZGVkbWV0YWRhdGEnLCB0aGlzLl92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXIpO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHRoaXMuX3ZpZGVvTWV0YURhdGFDaGFuZ2VkSGFuZGxlcik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVWaWRlb01ldGFEYXRhQ2hhbmdlZCgpOiB2b2lkIHtcbiAgICBjb25zdCB2aWRlb0VsZW1lbnQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWU7XG5cbiAgICBpZiAodmlkZW9FbGVtZW50KSB7XG4gICAgICBpZiAodGhpcy5yZXNvbHV0aW9uLnZhbHVlLndpZHRoICE9PSB2aWRlb0VsZW1lbnQudmlkZW9XaWR0aCB8fCB0aGlzLnJlc29sdXRpb24udmFsdWUuaGVpZ2h0ICE9PSB2aWRlb0VsZW1lbnQudmlkZW9IZWlnaHQpIHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucmVzb2x1dGlvbi52YWx1ZSA9IG5ldyBEaW1lbnNpb24odmlkZW9FbGVtZW50LnZpZGVvV2lkdGgsIHZpZGVvRWxlbWVudC52aWRlb0hlaWdodCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJlc29sdXRpb24udmFsdWUgPSBEaW1lbnNpb24uZW1wdHk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHRva2VuKCk6IEVuY29kZWRFZGdlVG9rZW4ge1xuICAgIHJldHVybiB0aGlzLl90b2tlbkNvbnRleHQudG9rZW4udmFsdWU7XG4gIH1cblxuICBzZXQgdG9rZW4odG9rZW46IEVuY29kZWRFZGdlVG9rZW4pIHtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5kaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG5cbiAgICB0aGlzLl90b2tlbkNvbnRleHQudG9rZW4udmFsdWUgPSB0b2tlbjtcbiAgICB0aGlzLl90b2tlbkNvbnRleHQudG9rZW5FeHBpcmluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgY29uc3QgZWRnZVRva2VuID0gRWRnZUF1dGhQYXJzZXIucGFyc2VUb2tlbih0aGlzLl90b2tlbkNvbnRleHQudG9rZW4udmFsdWUpO1xuICAgIGNvbnN0IGRpc2NvdmVyeVVyaSA9IChlZGdlVG9rZW4udXJpIHx8IFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpLnRvU3RyaW5nKCk7XG5cbiAgICBTREsudGVuYW5jeS52YWx1ZSA9IGVkZ2VUb2tlbi50ZW5hbmN5IHx8IFNESy50ZW5hbmN5LnZhbHVlO1xuICAgIERpc2NvdmVyeVVyaS51cmkudmFsdWUgPSBkaXNjb3ZlcnlVcmk7XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZSA9IE1ldHJpY3NGYWN0b3J5LmdldE1ldHJpY3NTZXJ2aWNlKGRpc2NvdmVyeVVyaSk7XG5cbiAgICB0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0Lmhhc0luc2VydGFibGVTdHJlYW1zLnZhbHVlID0gZWRnZVRva2VuLmNhcGFiaWxpdGllcy5pbmNsdWRlcygnaW5zZXJ0YWJsZS1zdHJlYW1zJyk7XG4gICAgdGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5oYXNFbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXMudmFsdWUgPSBlZGdlVG9rZW4uY2FwYWJpbGl0aWVzLmluY2x1ZGVzKCdlbmNvZGVkLWluc2VydGFibGUtc3RyZWFtcycpO1xuXG4gICAgdGhpcy5zdGFydCgpO1xuICB9XG5cbiAgZ2V0IHBlZXJDb25uZWN0aW9uKCk6IFJlYWRPbmx5U3ViamVjdDxJUGVlckNvbm5lY3Rpb24+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlQZWVyQ29ubmVjdGlvbjtcbiAgfVxuXG4gIGdldCBzdGF0ZSgpOiBSZWFkT25seVN1YmplY3Q8Q2hhbm5lbFN0YXRlPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5U3RhdGU7XG4gIH1cblxuICBnZXQgYXV0b011dGVkKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5QXV0b011dGVkO1xuICB9XG5cbiAgZ2V0IGF1dG9QYXVzZWQoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlBdXRvUGF1c2VkO1xuICB9XG5cbiAgZ2V0IHRva2VuRXhwaXJpbmcoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlUb2tlbkV4cGlyaW5nO1xuICB9XG5cbiAgZ2V0IGF1dGhvcml6ZWQoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlBdXRob3JpemVkO1xuICB9XG5cbiAgZ2V0IG9ubGluZSgpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seU9ubGluZTtcbiAgfVxuXG4gIGdldCBsb2FkaW5nKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5TG9hZGluZztcbiAgfVxuXG4gIGdldCBwbGF5aW5nKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5UGxheWluZztcbiAgfVxuXG4gIGdldCBzdGFuZGJ5KCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5U3RhbmRieTtcbiAgfVxuXG4gIGdldCBzdG9wcGVkKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5U3RvcHBlZDtcbiAgfVxuXG4gIGdldCB0YXJnZXRMYWcoKTogUmVhZE9ubHlTdWJqZWN0PE1pbGxpc2Vjb25kPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5VGFyZ2V0TGFnO1xuICB9XG5cbiAgZ2V0IGxhZygpOiBSZWFkT25seVN1YmplY3Q8TWlsbGlzZWNvbmQ+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlMYWc7XG4gIH1cblxuICBnZXQgYml0cmF0ZUxpbWl0KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5Qml0cmF0ZUxpbWl0LnZhbHVlO1xuICB9XG5cbiAgZ2V0IHJlc29sdXRpb24oKTogUmVhZE9ubHlTdWJqZWN0PERpbWVuc2lvbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVJlc29sdXRpb247XG4gIH1cblxuICBnZXQgZmFpbHVyZUNvdW50KCk6IFJlYWRPbmx5U3ViamVjdDxudW1iZXI+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlGYWlsdXJlQ291bnQ7XG4gIH1cblxuICBnZXQgZW5kUG9pbnQoKTogUmVhZE9ubHlTdWJqZWN0PEVuZFBvaW50PiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5RW5kUG9pbnQ7XG4gIH1cblxuICBnZXQgc3RyZWFtKCk6IFJlYWRPbmx5U3ViamVjdDxJU3RyZWFtPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5U3RyZWFtO1xuICB9XG5cbiAgZ2V0IHN0cmVhbUlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkO1xuICB9XG5cbiAgZ2V0IHJ0Y1N0YXRpc3RpY3MoKTogUmVhZE9ubHlTdWJqZWN0PElSdGNNb25pdG9yU3RhdGlzdGljPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5UnRjU3RhdGlzdGljcztcbiAgfVxuXG4gIGdldCBtZWRpYVN0cmVhbSgpOiBSZWFkT25seVN1YmplY3Q8TWVkaWFTdHJlYW0+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlNZWRpYVN0cmVhbTtcbiAgfVxuXG4gIHNldEJpdHJhdGVMaW1pdChiaXRyYXRlTGltaXQ6IEJpdHNQZXJTZWNvbmQpOiB2b2lkIHtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5iaXRyYXRlTGltaXQudmFsdWUgPSBiaXRyYXRlTGltaXQ7XG4gIH1cblxuICBjbGVhckJpdHJhdGVMaW1pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQuYml0cmF0ZUxpbWl0LnZhbHVlICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSkge1xuICAgICAgY29uc3QgZWxhcHNlZEluTWlsbGlzZWNvbmRzID0gRGF0ZS5ub3coKSAtIHRoaXMuX2NoYW5uZWxDb250ZXh0LmNoYW5uZWxJbml0aWFsaXphdGlvbi5nZXRUaW1lKCk7XG4gICAgICBjb25zdCBiaXRyYXRlSW5CaXRzUGVyU2Vjb25kID0gMDtcbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZS5saW1pdEJpdHJhdGUoXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSxcbiAgICAgICAgZWxhcHNlZEluTWlsbGlzZWNvbmRzLFxuICAgICAgICBiaXRyYXRlSW5CaXRzUGVyU2Vjb25kLFxuICAgICAgICBCaXRyYXRlU3RhdGUuS2VlcCxcbiAgICAgICAgQml0cmF0ZU1vZGUuUmVzZXRcbiAgICAgIClcbiAgICAgICAgLnRoZW4oKHtzdGF0dXN9KSA9PiB7XG4gICAgICAgICAgaWYgKHN0YXR1cyA9PT0gJ29rJykge1xuICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYml0cmF0ZUxpbWl0LnZhbHVlID0gMDtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0Vycm9yIHdoaWxlIHNldHRpbmcgbGltaXQgYml0cmF0ZScsIGUpO1xuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICB1cGRhdGVUYXJnZXRMYWcobGFnOiBNaWxsaXNlY29uZCk6IHZvaWQge1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnRhcmdldExhZy52YWx1ZSA9IGxhZztcbiAgfVxuXG4gIGFzeW5jIHN0b3AocmVhc29uOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICBpZiAoIXRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlKSB7XG4gICAgICAgIHRoaXMucHJvY2Vzc1N0b3AocmVhc29uKTtcblxuICAgICAgICByZXNvbHZlKCk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5yZW5kZXJlckRpc3Bvc2FibGVzLmFkZCh0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy5zdWJzY3JpYmUoaXNTdGFydGluZyA9PiB7XG4gICAgICAgIGlmICghaXNTdGFydGluZykge1xuICAgICAgICAgIHRoaXMucHJvY2Vzc1N0b3AocmVhc29uKTtcbiAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcHJvY2Vzc1N0b3AocmVhc29uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlKSB7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUucGF1c2UoKTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5zcmNPYmplY3QgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJlbmRlcmVyRGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuXG4gICAgdGhpcy5jbGVhblVwUmVzb3VyY2VzKHJlYXNvbik7XG5cbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5TdG9wcGVkO1xuICB9XG5cbiAgYXN5bmMgcmVzdW1lKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQubWVkaWFTdHJlYW0udmFsdWUpIHtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSBmYWxzZTtcblxuICAgICAgcmV0dXJuIHRoaXMucGxheU1lZGlhU3RyZWFtSW5WaWRlb0VsZW1lbnQodGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBtdXRlKCk6IHZvaWQge1xuICAgIGNvbnN0IHZpZGVvRWxlbWVudCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZTtcblxuICAgIGlmICh2aWRlb0VsZW1lbnQpIHtcbiAgICAgIHZpZGVvRWxlbWVudC5tdXRlZCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgdW5tdXRlKCk6IHZvaWQge1xuICAgIGNvbnN0IHZpZGVvRWxlbWVudCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZTtcblxuICAgIGlmICh2aWRlb0VsZW1lbnQpIHtcbiAgICAgIHZpZGVvRWxlbWVudC5tdXRlZCA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b011dGVkLnZhbHVlID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZGlzcG9zZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5zdG9wKCdjbGllbnQ6Y2hhbm5lbC1kaXNwb3NlJykudGhlbigoKSA9PiB7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5jaGFubmVsRGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzRGlzcG9zZWQgPSB0cnVlO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0VXJpKHRva2VuOiBFbmNvZGVkRWRnZVRva2VuKTogVVJMIHtcbiAgICBjb25zdCB1cmwgPSBFZGdlQXV0aFBhcnNlci5wYXJzZVRva2VuKHRva2VuKS51cmk7XG5cbiAgICBpZiAodXJsKSB7XG4gICAgICByZXR1cm4gdXJsO1xuICAgIH1cblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdGYWxsIGJhY2sgdG8gdGhlIGRlZmF1bHQgZGlzY292ZXIgVVJJIFslc10nLCBTREsuZGlzY292ZXJ5VXJpLnZhbHVlKTtcblxuICAgIHJldHVybiBuZXcgVVJMKFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpO1xuICB9XG5cbiAgYXN5bmMgc3RhcnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX3N0YXRlQ29udGV4dC5pc0Rpc3Bvc2VkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NoYW5uZWwgd2FzIGFscmVhZHkgZGlzcG9zZWQnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIGFscmVhZHkgc3RhcnRpbmcsIHNraXBwaW5nIHN0YXJ0Jyk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcy5wcm9jZXNzU3RhcnQoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcHJvY2Vzc1N0YXJ0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHRva2VuOiBFbmNvZGVkRWRnZVRva2VuID0gdGhpcy5fdG9rZW5Db250ZXh0LnRva2VuLnZhbHVlO1xuICAgIGNvbnN0IGxpc3Rlbk9uU3RyZWFtU2V0dXAgPSB0aGlzLl9zZXNzaW9uVGVsZW1ldHJ5Lmxpc3Rlbk9uU3RyZWFtU2V0dXAoKTtcblxuICAgIGlmICghRWRnZUF1dGhQYXJzZXIuaXNFbmNvZGVkRWRnZVRva2VuVmFsaWQodG9rZW4pKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBwYXJzZSB0b2tlbiBbJXNdJywgdG9rZW4pO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuVW5hdXRob3JpemVkO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0LnZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2spIHtcbiAgICAgIGNvbnN0IHt2YWxpZCwgdmFsaWRhdGlvblJlc3VsdH0gPSBTdHJlYW1UcmFja1RyYW5zZm9ybS52YWxpZGF0ZU1lZGlhU3RyZWFtVHJhY2tUcmFuc2Zvcm0oJ3ZpZGVvJywgdGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC52aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrKTtcblxuICAgICAgaWYgKCF2YWxpZCkge1xuICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IodmFsaWRhdGlvblJlc3VsdCk7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkNvbmZpZ3VyYXRpb25FcnJvcjtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5hdWRpb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrKSB7XG4gICAgICBjb25zdCB7dmFsaWQsIHZhbGlkYXRpb25SZXN1bHR9ID0gU3RyZWFtVHJhY2tUcmFuc2Zvcm0udmFsaWRhdGVNZWRpYVN0cmVhbVRyYWNrVHJhbnNmb3JtKCdhdWRpbycsIHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuYXVkaW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjayk7XG5cbiAgICAgIGlmICghdmFsaWQpIHtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKHZhbGlkYXRpb25SZXN1bHQpO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5Db25maWd1cmF0aW9uRXJyb3I7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dGhvcml6ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuZW5jb2RlZFZpZGVvU3RyZWFtU2luaykge1xuICAgICAgY29uc3Qge3ZhbGlkLCB2YWxpZGF0aW9uUmVzdWx0fSA9IEVuY29kZWRTdHJlYW1TaW5rLnZhbGlkYXRlRW5jb2RlZFN0cmVhbVNpbmsoJ3ZpZGVvJywgdGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5lbmNvZGVkVmlkZW9TdHJlYW1TaW5rKTtcblxuICAgICAgaWYgKCF2YWxpZCkge1xuICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IodmFsaWRhdGlvblJlc3VsdCk7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkNvbmZpZ3VyYXRpb25FcnJvcjtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5lbmNvZGVkQXVkaW9TdHJlYW1TaW5rKSB7XG4gICAgICBjb25zdCB7dmFsaWQsIHZhbGlkYXRpb25SZXN1bHR9ID0gRW5jb2RlZFN0cmVhbVNpbmsudmFsaWRhdGVFbmNvZGVkU3RyZWFtU2luaygnYXVkaW8nLCB0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0LmVuY29kZWRBdWRpb1N0cmVhbVNpbmspO1xuXG4gICAgICBpZiAoIXZhbGlkKSB7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcih2YWxpZGF0aW9uUmVzdWx0KTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuQ29uZmlndXJhdGlvbkVycm9yO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRob3JpemVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0Lmhhc0luc2VydGFibGVTdHJlYW1zLnZhbHVlICYmIHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuaGFzRW5jb2RlZEluc2VydGFibGVTdHJlYW1zLnZhbHVlKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0JvdGggaW5zZXJ0YWJsZS1zdHJlYW1zIGFuZCBlbmNvZGVkLWluc2VydGFibGUtc3RyZWFtcyBhcmUgZW5hYmxlZCwgb25seSB1c2Ugb25lIG9yIHRoZSBvdGhlcicpO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuQ29uZmlndXJhdGlvbkVycm9yO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGhhc1RyYW5zZm9ybVN0cmVhbUNhbGxiYWNrID0gdHlwZW9mIHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQudmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgdGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5hdWRpb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrID09PSAnZnVuY3Rpb24nO1xuICAgIGNvbnN0IGhhc0VuY29kZWRTdHJlYW1TaW5rID0gdHlwZW9mIHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuZW5jb2RlZFZpZGVvU3RyZWFtU2luayA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgdGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5lbmNvZGVkQXVkaW9TdHJlYW1TaW5rID09PSAnZnVuY3Rpb24nO1xuXG4gICAgaWYgKGhhc1RyYW5zZm9ybVN0cmVhbUNhbGxiYWNrICYmIGhhc0VuY29kZWRTdHJlYW1TaW5rKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0JvdGggTWVkaWEgU3RyZWFtIFRyYWNrIHRyYW5zZm9ybSBjYWxsYmFjayBhbmQgZW5jb2RlZEluc2VydGFibGVTdHJlYW1zIHNpbmsgZnVuY3Rpb24gZm91bmQsIG9ubHkgdXNlIG9uZSB0eXBlIG9yIHRoZSBvdGhlcicpO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuQ29uZmlndXJhdGlvbkVycm9yO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0Lmhhc0luc2VydGFibGVTdHJlYW1zLnZhbHVlKSB7XG4gICAgICBpZiAoIUZlYXR1cmVFbmFibGVtZW50LmlzSW5zZXJ0YWJsZVN0cmVhbXNTdXBwb3J0ZWQpIHtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdCcm93c2VyIGRvZXMgbm90IHN1cHBvcnQgTWVkaWEgU3RyZWFtIFRyYWNrIEFQSScpO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5VbnN1cHBvcnRlZEZlYXR1cmU7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dGhvcml6ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICghaGFzVHJhbnNmb3JtU3RyZWFtQ2FsbGJhY2spIHtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdDcmVhdGVDaGFubmVsT3B0aW9ucyB0cmFuc2Zvcm0gY2FsbGJhY2sgZnVuY3Rpb24gaXMgbWlzc2luZzsgaG93ZXZlciwgaW5zZXJ0YWJsZS1zdHJlYW1zIGlzIGVuYWJsZWQnKTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuQ29uZmlndXJhdGlvbkVycm9yO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRob3JpemVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoaGFzVHJhbnNmb3JtU3RyZWFtQ2FsbGJhY2spIHtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKGBDcmVhdGVDaGFubmVsT3B0aW9ucyB0cmFuc2Zvcm0gY2FsbGJhY2sgZnVuY3Rpb24gZm91bmQ7IGhvd2V2ZXIsIGluc2VydGFibGUtc3RyZWFtcyBpcyBub3QgZW5hYmxlZGApO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5Db25maWd1cmF0aW9uRXJyb3I7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dGhvcml6ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuaGFzRW5jb2RlZEluc2VydGFibGVTdHJlYW1zLnZhbHVlKSB7XG4gICAgICBpZiAoIShGZWF0dXJlRW5hYmxlbWVudC5pc0VuY29kZWRJbnNlcnRhYmxlU3RyZWFtc1N1cHBvcnRlZCB8fCBGZWF0dXJlRW5hYmxlbWVudC5pc1JUQ1J0cFNjcmlwdFRyYW5zZm9ybVN1cHBvcnRlZCkpIHtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdCcm93c2VyIGRvZXMgbm90IHN1cHBvcnQgZW5jb2RlZEluc2VydGFibGVTdHJlYW1zIEFQSScpO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5VbnN1cHBvcnRlZEZlYXR1cmU7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dGhvcml6ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICghaGFzRW5jb2RlZFN0cmVhbVNpbmspIHtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdDcmVhdGVDaGFubmVsT3B0aW9ucyB0cmFuc2Zvcm0gc2luayBmdW5jdGlvbiBpcyBtaXNzaW5nOyBob3dldmVyLCBlbmNvZGVkLWluc2VydGFibGUtc3RyZWFtcyBpcyBlbmFibGVkJyk7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkNvbmZpZ3VyYXRpb25FcnJvcjtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGhhc0VuY29kZWRTdHJlYW1TaW5rKSB7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcihgQ3JlYXRlQ2hhbm5lbE9wdGlvbnMgdHJhbnNmb3JtIHNpbmsgZnVuY3Rpb24gZm91bmQ7IGhvd2V2ZXIsIGVuY29kZWQtaW5zZXJ0YWJsZS1zdHJlYW1zIGlzIG5vdCBlbmFibGVkYCk7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkNvbmZpZ3VyYXRpb25FcnJvcjtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmNsZWFuVXBSZXNvdXJjZXMoJ2NsaWVudDpzdGFydCcpO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlN0YXJ0aW5nO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSB0cnVlO1xuXG4gICAgY29uc3QgdXJpID0gdGhpcy5nZXRVcmkodG9rZW4pO1xuXG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuZGlzcG9zYWJsZXMuYWRkKFxuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUuc3Vic2NyaWJlKHN0YXRlID0+IHtcbiAgICAgICAgaWYgKHN0YXRlID09PSBDaGFubmVsU3RhdGUuRXJyb3IgfHwgc3RhdGUgPT09IENoYW5uZWxTdGF0ZS5SZWNvdmVyaW5nKSB7XG4gICAgICAgICAgRGlzY292ZXJ5LmNsZWFyQ2FjaGVkQ2xvc2VzdEVuZHBvaW50KHVyaSk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcblxuICAgIGNvbnN0IGhhbmRsZVN0cmVhbUZhaWx1cmVDYWxsYmFjazogKCkgPT4gUHJvbWlzZTx2b2lkPiA9ICgpID0+IG5ldyBQcm9taXNlKChyZXNvbHZlKTogdm9pZCA9PiB7XG4gICAgICAvLyBOZWVkIHRvIHNldCBpc1N0YXJ0aW5nIHRvIGZhbHNlIGFuZCBjYWxsIGhhbmRsZVN0cmVhbUZhaWx1cmUgaWYgc3RyZWFtIG1vbml0b3JzIGZvdW5kIGFuIGlzc3VlXG4gICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICByZXR1cm4gcmVzb2x2ZSh0aGlzLmhhbmRsZVN0cmVhbUZhaWx1cmUoKSk7XG4gICAgfSk7XG4gICAgY29uc3Qgc3RyZWFtUGxheWVyID0gU3RyZWFtRmFjdG9yeS5jcmVhdGUodG9rZW4sIHRoaXMuX2NoYW5uZWxDb250ZXh0LCB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQsIHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQsIGhhbmRsZVN0cmVhbUZhaWx1cmVDYWxsYmFjayk7XG5cbiAgICBpZiAoIXN0cmVhbVBsYXllcikge1xuICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJldHVybiBzdHJlYW1QbGF5ZXIuc3RhcnQoXG4gICAgICB1cmksXG4gICAgICB0b2tlbixcbiAgICAgIGxpc3Rlbk9uU3RyZWFtU2V0dXAsXG4gICAgICB0aGlzLnBsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50LmJpbmQodGhpcykpXG4gICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgIGxpc3Rlbk9uU3RyZWFtU2V0dXAuZmFpbCgpO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmZhaWx1cmVDb3VudC52YWx1ZSsrO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0Lm9ubGluZS52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMuY2xlYW5VcFJlc291cmNlcygnY2xpZW50OmNsZWFudXAtYWZ0ZXItZmFpbGVkLXNldHVwJyk7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuQ2xpZW50U3RhcnRFcnJvcjtcblxuICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBzdGFydCBjaGFubmVsJywgZSk7XG4gICAgICB9KVxuICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9PT0gQ2hhbm5lbFN0YXRlLlBsYXlpbmcgfHwgIVNESy5hdXRvbWF0aWNSZXRyeU9uRmFpbHVyZSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLmhhbmRsZVN0cmVhbUZhaWx1cmUoKVxuICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCBoYW5kbGluZyBzdHJlYW0gZmFpbHVyZScsIGUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIHRoaXMuZ2V0UmV0cnlJbnRlcnZhbCgpKTtcblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5kaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4ge1xuICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgICAgICB9KSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVzdGFydEFmdGVyU3RvcCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fc3RhdGVDb250ZXh0LmlzRGlzcG9zZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2hhbm5lbCB3YXMgYWxyZWFkeSBkaXNwb3NlZCcpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQubWVkaWFTdHJlYW0udmFsdWUpIHtcbiAgICAgIHJldHVybiB0aGlzLnBsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50KHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5tZWRpYVN0cmVhbS52YWx1ZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3Rva2VuQ29udGV4dC50b2tlbi52YWx1ZSkge1xuICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuc3RhcnQoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcGxheSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBtZWRpYVN0cmVhbSA9IHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5tZWRpYVN0cmVhbS52YWx1ZTtcblxuICAgIGlmICghbWVkaWFTdHJlYW0pIHtcbiAgICAgIHJldHVybiB0aGlzLnN0YXJ0KCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMucGxheU1lZGlhU3RyZWFtSW5WaWRlb0VsZW1lbnQobWVkaWFTdHJlYW0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRSZXRyeUludGVydmFsKCk6IG51bWJlciB7XG4gICAgc3dpdGNoICh0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSkge1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuU3RhbmRCeTpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLk9mZmxpbmU6XG4gICAgICAgIHJldHVybiBzdGFuZGJ5UG9sbGluZ0ludGVydmFsSW5NaWxsaXNlY29uZHM7XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5FcnJvcjpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlJlY292ZXJpbmc6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5VbmF1dGhvcml6ZWQ6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5HZW9SZXN0cmljdGVkOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuR2VvQmxvY2tlZDpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlN0b3BwZWQ6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5TdGFydGluZzpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlBsYXlpbmc6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5QYXVzZWQ6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5SZWNvbm5lY3Rpbmc6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5VbnN1cHBvcnRlZEZlYXR1cmU6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5Db25maWd1cmF0aW9uRXJyb3I6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5UcmFuc2llbnRDb25maWd1cmF0aW9uRXJyb3I6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5Db25uZWN0aW9uRXJyb3I6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5DbGllbnRTdGFydEVycm9yOlxuICAgICAgICAvLyBGaXJzdCBhbmQgc2Vjb25kIGF0dGVtcHQgZmFzdCwgYWZ0ZXIgdGhhdCBleHBvbmVudGlhbCB3aXRoIGJhY2tvZmYgaW50ZXJ2YWxcbiAgICAgICAgcmV0dXJuIHRoaXMuX2V4cG9uZW50aWFsQmFja29mZi5nZXRFeHBvbmVudGlhbEJhY2tvZmZJbnRlcnZhbEJ5RmFpbHVyZUNvdW50KHRoaXMuX2NoYW5uZWxDb250ZXh0LmZhaWx1cmVDb3VudC52YWx1ZSk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZSh0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBoYW5kbGVTdHJlYW1GYWlsdXJlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHN3aXRjaCAodGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUpIHtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkVycm9yOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuUmVjb25uZWN0aW5nOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuU3RhbmRCeTpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLk9mZmxpbmU6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5SZWNvdmVyaW5nOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuVHJhbnNpZW50Q29uZmlndXJhdGlvbkVycm9yOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuQ29ubmVjdGlvbkVycm9yOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuQ2xpZW50U3RhcnRFcnJvcjpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1JldHJ5IHN0YXJ0IHdpdGggaW5pdGlhbCBzdGF0ZSBbJXNdIFslc10nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSwgQ2hhbm5lbFN0YXRlW3RoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlXSk7XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5VbmF1dGhvcml6ZWQ6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIHVuYXV0aG9yaXplZCwgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQuIFBsZWFzZSBwcm92aWRlIGEgbmV3IHRva2VuIGFuZCBpbnZva2Ugc3RhcnQoKScpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkdlb1Jlc3RyaWN0ZWQ6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIGdlbyByZXN0cmljdGVkLCBza2lwcGluZyByZXRyeSBvZiBzdGFydC4gUGxlYXNlIHByb3ZpZGUgYSBuZXcgdG9rZW4gYW5kIGludm9rZSBzdGFydCgpJyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuR2VvQmxvY2tlZDpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgZ2VvIGJsb2NrZWQsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0LiBQbGVhc2UgcHJvdmlkZSBhIG5ldyB0b2tlbiBhbmQgaW52b2tlIHN0YXJ0KCknKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5TdG9wcGVkOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyBzdG9wcGVkLCBza2lwcGluZyByZXRyeSBvZiBzdGFydC4nKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5QbGF5aW5nOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyBwbGF5aW5nLCBza2lwcGluZyByZXRyeSBvZiBzdGFydCcpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlBhdXNlZDpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgcGF1c2VkLCBza2lwcGluZyByZXRyeSBvZiBzdGFydC4gUGxlYXNlIGludm9rZSBwbGF5KCknKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5TdGFydGluZzpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgYWxyZWFkeSBzdGFydGluZywgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQnKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5VbnN1cHBvcnRlZEZlYXR1cmU6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIHN0b3BwZWQgZHVlIHRvIHVuc3VwcG9ydGVkIGZlYXR1cmUsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0LicpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkNvbmZpZ3VyYXRpb25FcnJvcjpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgc3RvcHBlZCBkdWUgdG8gY29uZmlndXJhdGlvbiBlcnJvciwgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQuJyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUodGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnN0YXJ0KCk7XG4gIH1cblxuICBwcml2YXRlIGNsZWFuVXBSZXNvdXJjZXMocmVhc29uOiBzdHJpbmcgPSBkZWZhdWx0U3RyZWFtVGVybWluYXRpb25SZWFzb24pOiB2b2lkIHtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5kaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG5cbiAgICBjb25zdCBwZWVyQ29ubmVjdGlvbiA9IHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZTtcblxuICAgIGlmIChwZWVyQ29ubmVjdGlvbikge1xuICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlID0gbnVsbDtcbiAgICAgIHBlZXJDb25uZWN0aW9uLmNsb3NlKCk7XG4gICAgICBwZWVyQ29ubmVjdGlvbi5kaXNwb3NlKCk7XG5cbiAgICAgIGlmIChTREsuZm9yY2VHYXJiYWdlQ29sbGVjdGlvbk9uUmVzdGFydCAmJiAhKEZlYXR1cmVFbmFibGVtZW50LmlzTW9iaWxlICYmIFNESy5za2lwR2FyYmFnZUNvbGxlY3Rpb25Pbk1vYmlsZURldmljZXMpKSB7XG4gICAgICAgIEdhcmJhZ2VDb2xsZWN0b3JNYW5hZ2VyLmZvcmNlR2FyYmFnZUNvbGxlY3Rpb24oKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlKSB7XG4gICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQubWVkaWFTdHJlYW0udmFsdWUuZ2V0VHJhY2tzKCkuZm9yRWFjaCh0cmFjayA9PiB0cmFjay5zdG9wKCkpO1xuICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gZmFsc2U7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b011dGVkLnZhbHVlID0gZmFsc2U7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0b3BwZWQudmFsdWUgPSB0cnVlO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YW5kYnkudmFsdWUgPSBmYWxzZTtcblxuICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUpIHtcbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZS5kZXN0cm95U3RyZWFtKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSwgcmVhc29uKVxuICAgICAgICAudGhlbigoe3N0YXR1c30pID0+IHtcbiAgICAgICAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIud2FybignWyVzXSBGYWlsZWQgdG8gZGVzdHJveSBzdHJlYW0gd2l0aCByZWFzb24gWyVzXScsIHRoaXMuc3RyZWFtSWQsIHN0YXR1cyk7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBEZXN0cm95ZWQgc3RyZWFtIHdpdGggcmVhc29uIFslc10nLCB0aGlzLnN0cmVhbUlkLCBzdGF0dXMpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdbJXNdIEZhaWxlZCB0byBkZXN0cm95IHN0cmVhbScsIHRoaXMuc3RyZWFtSWQsIGUpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy52aWRlb0VsZW1lbnQgJiYgdGhpcy52aWRlb0VsZW1lbnQuZGF0YXNldCkge1xuICAgICAgdGhpcy52aWRlb0VsZW1lbnQuZGF0YXNldC5zZXNzaW9uSWQgPSAnJztcbiAgICAgIHRoaXMudmlkZW9FbGVtZW50LmRhdGFzZXQuc3RyZWFtSWQgPSAnJztcbiAgICB9XG5cbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUgPSBudWxsO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlID0gbnVsbDtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyA9IDA7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHBsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50KG1lZGlhU3RyZWFtOiBNZWRpYVN0cmVhbSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHZpZGVvRWxlbWVudCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZTtcblxuICAgIGlmICghdmlkZW9FbGVtZW50KSB7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlN0b3BwZWQ7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuaGFzRW5jb2RlZEluc2VydGFibGVTdHJlYW1zLnZhbHVlKSB7XG4gICAgICB2aWRlb0VsZW1lbnQuc3JjT2JqZWN0ID0gbWVkaWFTdHJlYW07XG4gICAgfVxuXG4gICAgY29uc3QgcGxheVByb21pc2UgPSB2aWRlb0VsZW1lbnQucGxheSgpO1xuXG4gICAgaWYgKHBsYXlQcm9taXNlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IHRydWU7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5QbGF5aW5nO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmV0dXJuIHBsYXlQcm9taXNlLnRoZW4oKCkgPT4ge1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b011dGVkLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gdHJ1ZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlBsYXlpbmc7XG4gICAgfSkuY2F0Y2goZSA9PiB7XG4gICAgICBjb25zdCBoYXNBdWRpb1RyYWNrID0gISFtZWRpYVN0cmVhbS5nZXRUcmFja3MoKS5maWx0ZXIodHJhY2sgPT4ge1xuICAgICAgICByZXR1cm4gdHJhY2sua2luZCA9PT0gJ2F1ZGlvJztcbiAgICAgIH0pLmxlbmd0aDtcbiAgICAgIGNvbnN0IGF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlT2ZmID0gIVNESy5hdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZTtcblxuICAgICAgaWYgKGF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlT2ZmIHx8IHZpZGVvRWxlbWVudC5tdXRlZCB8fCAhaGFzQXVkaW9UcmFjaykge1xuICAgICAgICB2aWRlb0VsZW1lbnQuc3JjT2JqZWN0ID0gbnVsbDtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b011dGVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSB0cnVlO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuUGF1c2VkO1xuXG4gICAgICAgIGlmIChhdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZU9mZikge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIFBhdXNlZCB2aWRlbyBhZnRlciBwbGF5IGZhaWxlZC4gTWFudWFsIHVzZXIgYWN0aW9uIHJlcXVpcmVkLicsIHRoaXMuc3RyZWFtSWQsIGUpO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGhhc0F1ZGlvVHJhY2spIHtcbiAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBGYWlsZWQgdG8gcGxheSB2aWRlby4gTWFudWFsIHVzZXIgYWN0aW9uIHJlcXVpcmVkLicsIHRoaXMuc3RyZWFtSWQsIGUpO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gRmFpbGVkIHRvIHBsYXkgbXV0ZWQgdmlkZW8uIE1hbnVhbCB1c2VyIGFjdGlvbiByZXF1aXJlZC4nLCB0aGlzLnN0cmVhbUlkLCBlKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZpZGVvRWxlbWVudC5tdXRlZCA9IHRydWU7XG5cbiAgICAgIHJldHVybiB2aWRlb0VsZW1lbnQucGxheSgpXG4gICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBQbGF5ZWQgdmlkZW8gYWZ0ZXIgYXV0byBtdXRpbmcuIE1hbnVhbCB1c2VyIGFjdGlvbiByZXF1aXJlZCB0byB1bm11dGUuJywgdGhpcy5zdHJlYW1JZCk7XG5cbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuUGxheWluZztcbiAgICAgICAgfSkuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgdmlkZW9FbGVtZW50Lm11dGVkID0gZmFsc2U7XG5cbiAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBGYWlsZWQgdG8gcGxheSB2aWRlby4gTWFudWFsIHVzZXIgYWN0aW9uIHJlcXVpcmVkLicsIHRoaXMuc3RyZWFtSWQsIGUpO1xuXG4gICAgICAgICAgdmlkZW9FbGVtZW50LnNyY09iamVjdCA9IG51bGw7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b011dGVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5QYXVzZWQ7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5lbnVtIENoYW5uZWxTdGF0ZSB7XG4gIE9mZmxpbmUgPSAxLFxuICBTdGFydGluZyxcbiAgUGF1c2VkLFxuICBQbGF5aW5nLFxuICBSZWNvdmVyaW5nLFxuICBSZWNvbm5lY3RpbmcsXG4gIFN0YW5kQnksXG4gIFN0b3BwZWQsXG4gIFVuYXV0aG9yaXplZCxcbiAgR2VvUmVzdHJpY3RlZCxcbiAgR2VvQmxvY2tlZCxcbiAgVW5zdXBwb3J0ZWRGZWF0dXJlLFxuICBDb25maWd1cmF0aW9uRXJyb3IsXG4gIFRyYW5zaWVudENvbmZpZ3VyYXRpb25FcnJvcixcbiAgQ29ubmVjdGlvbkVycm9yLFxuICBDbGllbnRTdGFydEVycm9yLFxuICBFcnJvclxufVxuXG5leHBvcnQgZGVmYXVsdCBDaGFubmVsU3RhdGU7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgQ2hhbm5lbCwge0NoYW5uZWxPcHRpb25zfSBmcm9tICcuL0NoYW5uZWwnO1xuaW1wb3J0IHtJRW5jb2RlZFN0cmVhbVNpbmt9IGZyb20gJy4uL3RyYW5zZm9ybWF0aW9uL0VuY29kZWRTdHJlYW1TaW5rJztcbmltcG9ydCB7SVN0cmVhbVRyYWNrVHJhbnNmb3JtfSBmcm9tICcuLi90cmFuc2Zvcm1hdGlvbi9TdHJlYW1UcmFja1RyYW5zZm9ybSc7XG5pbXBvcnQgU0RLIGZyb20gJy4uL1NESyc7XG5pbXBvcnQge0VuY29kZWRFZGdlVG9rZW59IGZyb20gJy4uLy4uL2VkZ2VBdXRoL0VuY29kZWRFZGdlVG9rZW4nO1xuaW1wb3J0IHtNaWxsaXNlY29uZH0gZnJvbSAnLi4vLi4vdW5pdHMvVW5pdHMnO1xuXG50eXBlIENyZWF0ZUNoYW5uZWxPcHRpb25zID0ge1xuICB2aWRlb0VsZW1lbnQ6IEhUTUxWaWRlb0VsZW1lbnQ7XG4gIHRva2VuOiBFbmNvZGVkRWRnZVRva2VuO1xuICB0YXJnZXRMYWc/OiBNaWxsaXNlY29uZDtcbiAgdmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjaz86IElTdHJlYW1UcmFja1RyYW5zZm9ybTxWaWRlb0ZyYW1lPjtcbiAgYXVkaW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjaz86IElTdHJlYW1UcmFja1RyYW5zZm9ybTxBdWRpb0RhdGE+O1xuICBlbmNvZGVkVmlkZW9TdHJlYW1TaW5rPzogSUVuY29kZWRTdHJlYW1TaW5rPFJUQ0VuY29kZWRWaWRlb0ZyYW1lPjtcbiAgZW5jb2RlZEF1ZGlvU3RyZWFtU2luaz86IElFbmNvZGVkU3RyZWFtU2luazxSVENFbmNvZGVkQXVkaW9GcmFtZT47XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDaGFubmVscyB7XG4gIHN0YXRpYyBjcmVhdGVDaGFubmVsKG9wdGlvbnM6IENyZWF0ZUNoYW5uZWxPcHRpb25zKTogQ2hhbm5lbCB7XG4gICAgaWYgKCFTREsuaW5pdGlhbGl6ZWQudmFsdWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignU0RLIGlzIG5vdCBsb2FkZWQuJyk7XG4gICAgfVxuXG4gICAgY29uc3QgY2hhbm5lbE9wdGlvbnM6IENoYW5uZWxPcHRpb25zID0ge1xuICAgICAgdGFyZ2V0TGFnOiBvcHRpb25zLnRhcmdldExhZyxcbiAgICAgIHZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s6IG9wdGlvbnMudmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjayxcbiAgICAgIGF1ZGlvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s6IG9wdGlvbnMuYXVkaW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjayxcbiAgICAgIGVuY29kZWRWaWRlb1N0cmVhbVNpbms6IG9wdGlvbnMuZW5jb2RlZFZpZGVvU3RyZWFtU2luayxcbiAgICAgIGVuY29kZWRBdWRpb1N0cmVhbVNpbms6IG9wdGlvbnMuZW5jb2RlZEF1ZGlvU3RyZWFtU2lua1xuICAgIH07XG5cbiAgICByZXR1cm4gbmV3IENoYW5uZWwob3B0aW9ucy52aWRlb0VsZW1lbnQsIG9wdGlvbnMudG9rZW4sIGNoYW5uZWxPcHRpb25zKTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDaGFubmVscyBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uLy4uL3J4L1N1YmplY3QnO1xuaW1wb3J0IENoYW5uZWxTdGF0ZSBmcm9tICcuLi9jaGFubmVscy9DaGFubmVsU3RhdGUnO1xuaW1wb3J0IERpbWVuc2lvbiBmcm9tICcuLi8uLi92aWRlby9EaW1lbnNpb24nO1xuaW1wb3J0IEVuZFBvaW50LCB7SVN0cmVhbSwgU3Vic2NyaWJlU3RhdHVzfSBmcm9tICcuLi9kaXNjb3ZlcnkvRW5kUG9pbnQnO1xuaW1wb3J0IFZpZGVvVGVsZW1ldHJ5IGZyb20gJy4uLy4uL3ZpZGVvL1ZpZGVvVGVsZW1ldHJ5JztcbmltcG9ydCB7SVJ0Y01vbml0b3JTdGF0aXN0aWMsIElSdGNTdGF0aXN0aWN9IGZyb20gJy4uLy4uL3J0Yy9SdGNDb25uZWN0aW9uTW9uaXRvcic7XG5pbXBvcnQgU0RLIGZyb20gJy4uL1NESyc7XG5pbXBvcnQgYXNzZXJ0VW5yZWFjaGFibGUgZnJvbSAnLi4vLi4vbGFuZy9hc3NlcnRVbnJlYWNoYWJsZSc7XG5pbXBvcnQgRGlzcG9zYWJsZUxpc3QgZnJvbSAnLi4vLi4vbGFuZy9EaXNwb3NhYmxlTGlzdCc7XG5pbXBvcnQge0JpdHNQZXJTZWNvbmQsIE1pbGxpc2Vjb25kfSBmcm9tICcuLi8uLi91bml0cy9Vbml0cyc7XG5cbmNvbnN0IGRlZmF1bHRUYXJnZXRMYWcgPSAwO1xuXG5leHBvcnQgdHlwZSBDaGFubmVsQ29udGV4dE9wdGlvbnMgPSB7XG4gIHRhcmdldExhZz86IG51bWJlcjtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENoYW5uZWxDb250ZXh0IHtcbiAgY2hhbm5lbEluaXRpYWxpemF0aW9uOiBEYXRlO1xuICBkaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3Q7XG4gIGNoYW5uZWxEaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3Q7XG4gIHJlbmRlcmVyRGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0O1xuICB2aWRlb0VsZW1lbnQ6IFN1YmplY3Q8SFRNTFZpZGVvRWxlbWVudD47XG4gIHN0YXRlOiBTdWJqZWN0PENoYW5uZWxTdGF0ZT47XG4gIGF1dG9NdXRlZDogU3ViamVjdDxib29sZWFuPjtcbiAgYXV0b1BhdXNlZDogU3ViamVjdDxib29sZWFuPjtcbiAgYXV0aG9yaXplZDogU3ViamVjdDxib29sZWFuPjtcbiAgb25saW5lOiBTdWJqZWN0PGJvb2xlYW4+O1xuICBsb2FkaW5nOiBTdWJqZWN0PGJvb2xlYW4+O1xuICBwbGF5aW5nOiBTdWJqZWN0PGJvb2xlYW4+O1xuICBzdGFuZGJ5OiBTdWJqZWN0PGJvb2xlYW4+O1xuICBzdG9wcGVkOiBTdWJqZWN0PGJvb2xlYW4+O1xuICB0YXJnZXRMYWc6IFN1YmplY3Q8TWlsbGlzZWNvbmQ+O1xuICBsYWc6IFN1YmplY3Q8TWlsbGlzZWNvbmQ+O1xuICBiaXRyYXRlTGltaXQ6IFN1YmplY3Q8Qml0c1BlclNlY29uZD47XG4gIHJlc29sdXRpb246IFN1YmplY3Q8RGltZW5zaW9uPjtcbiAgZmFpbHVyZUNvdW50OiBTdWJqZWN0PG51bWJlcj47XG4gIGVuZFBvaW50OiBTdWJqZWN0PEVuZFBvaW50PjtcbiAgc3RyZWFtOiBTdWJqZWN0PElTdHJlYW0+O1xuICBydGNTdGF0aXN0aWNzOiBTdWJqZWN0PElSdGNNb25pdG9yU3RhdGlzdGljPjtcbiAgdmlkZW9UZWxlbWV0cnk6IFZpZGVvVGVsZW1ldHJ5O1xuICBydGNBdWRpb1N0YXRpc3RpYzogSVJ0Y1N0YXRpc3RpYztcbiAgcnRjVmlkZW9TdGF0aXN0aWM6IElSdGNTdGF0aXN0aWM7XG4gIGNsZWFyRmFpbHVyZUNvdW50VGltZW91dDogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM/OiBDaGFubmVsQ29udGV4dE9wdGlvbnMpIHtcbiAgICB0aGlzLmRpc3Bvc2FibGVzID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG4gICAgdGhpcy5jaGFubmVsRGlzcG9zYWJsZXMgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgICB0aGlzLnJlbmRlcmVyRGlzcG9zYWJsZXMgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgICB0aGlzLmNoYW5uZWxJbml0aWFsaXphdGlvbiA9IG5ldyBEYXRlKCk7XG4gICAgdGhpcy52aWRlb0VsZW1lbnQgPSBuZXcgU3ViamVjdDxIVE1MVmlkZW9FbGVtZW50PihudWxsKTtcbiAgICB0aGlzLnN0YXRlID0gbmV3IFN1YmplY3Q8Q2hhbm5lbFN0YXRlPihDaGFubmVsU3RhdGUuU3RhcnRpbmcpO1xuICAgIHRoaXMuYXV0b011dGVkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHRoaXMuYXV0b1BhdXNlZCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICB0aGlzLmF1dGhvcml6ZWQgPSBuZXcgU3ViamVjdDxib29sZWFuPih0cnVlKTtcbiAgICB0aGlzLm9ubGluZSA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xuICAgIHRoaXMubG9hZGluZyA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICB0aGlzLnBsYXlpbmcgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy5zdGFuZGJ5ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHRoaXMuc3RvcHBlZCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICB0aGlzLnRhcmdldExhZyA9IG5ldyBTdWJqZWN0PE1pbGxpc2Vjb25kPihvcHRpb25zPy50YXJnZXRMYWcgPz8gZGVmYXVsdFRhcmdldExhZyk7XG4gICAgdGhpcy5sYWcgPSBuZXcgU3ViamVjdDxNaWxsaXNlY29uZD4oMCk7XG4gICAgdGhpcy5iaXRyYXRlTGltaXQgPSBuZXcgU3ViamVjdDxCaXRzUGVyU2Vjb25kPigwKTtcbiAgICB0aGlzLnJlc29sdXRpb24gPSBuZXcgU3ViamVjdDxEaW1lbnNpb24+KERpbWVuc2lvbi5lbXB0eSk7XG4gICAgdGhpcy5mYWlsdXJlQ291bnQgPSBuZXcgU3ViamVjdDxudW1iZXI+KDApO1xuICAgIHRoaXMuZW5kUG9pbnQgPSBuZXcgU3ViamVjdDxFbmRQb2ludD4obnVsbCk7XG4gICAgdGhpcy5zdHJlYW0gPSBuZXcgU3ViamVjdDxJU3RyZWFtPihudWxsKTtcbiAgICB0aGlzLnJ0Y1N0YXRpc3RpY3MgPSBuZXcgU3ViamVjdDxJUnRjTW9uaXRvclN0YXRpc3RpYz4obnVsbCk7XG4gIH1cblxuICBnZXQgc3RyZWFtSWQoKTogc3RyaW5nIHtcbiAgICBjb25zdCBzdHJlYW0gPSB0aGlzLnN0cmVhbS52YWx1ZTtcblxuICAgIGlmICghc3RyZWFtKSB7XG4gICAgICByZXR1cm4gJy0nO1xuICAgIH1cblxuICAgIHJldHVybiBzdHJlYW0uc3RyZWFtSWQ7XG4gIH1cblxuICBhcHBseVN0YXR1cyhzdGF0dXM6IFN1YnNjcmliZVN0YXR1cyk6IHZvaWQge1xuICAgIHN3aXRjaCAoc3RhdHVzKSB7XG4gICAgICBjYXNlICdvayc6XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAndW5hdXRob3JpemVkJzpcbiAgICAgIGNhc2UgJ2dlby1yZXN0cmljdGVkJzpcbiAgICAgIGNhc2UgJ2dlby1ibG9ja2VkJzpcbiAgICAgICAgdGhpcy5hdXRob3JpemVkLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1mYWxsdGhyb3VnaFxuICAgICAgY2FzZSAnbm8tc3RyZWFtJzpcbiAgICAgIGNhc2UgJ25vdC1mb3VuZCc6XG4gICAgICAgIHRoaXMuZmFpbHVyZUNvdW50LnZhbHVlID0gMDtcbiAgICAgICAgdGhpcy5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc3RhbmRieS52YWx1ZSA9IHRydWU7XG4gICAgICAgIHRoaXMuc3RvcHBlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnN0cmVhbS52YWx1ZSA9IG51bGw7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhpcy5mYWlsdXJlQ291bnQudmFsdWUrKztcbiAgICAgICAgdGhpcy5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc3RhbmRieS52YWx1ZSA9IHRydWU7XG4gICAgICAgIHRoaXMuc3RvcHBlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnN0cmVhbS52YWx1ZSA9IG51bGw7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIGFwcGx5U2Vzc2lvbkFuZFN0cmVhbVByb3BlcnRpZXNUb1ZpZGVvRWxlbWVudCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy52aWRlb0VsZW1lbnQudmFsdWUgJiYgdGhpcy52aWRlb0VsZW1lbnQudmFsdWUuZGF0YXNldCkge1xuICAgICAgdGhpcy52aWRlb0VsZW1lbnQudmFsdWUuZGF0YXNldC5zZXNzaW9uSWQgPSBTREsuY2xpZW50U2Vzc2lvbklkO1xuICAgICAgdGhpcy52aWRlb0VsZW1lbnQudmFsdWUuZGF0YXNldC5zdHJlYW1JZCA9IHRoaXMuc3RyZWFtSWQ7XG4gICAgfVxuICB9XG5cbiAgbWFwU3Vic2NyaWJlU3RhdHVzVG9DaGFubmVsU3RhdHVzKHN0YXR1czogU3Vic2NyaWJlU3RhdHVzKTogQ2hhbm5lbFN0YXRlIHtcbiAgICBzd2l0Y2ggKHN0YXR1cykge1xuICAgICAgY2FzZSAnb2snOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLlN0YXJ0aW5nO1xuICAgICAgY2FzZSAnbm8tc3RyZWFtJzpcbiAgICAgIGNhc2UgJ25vdC1mb3VuZCc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuU3RhbmRCeTtcbiAgICAgIGNhc2UgJ2dlby1yZXN0cmljdGVkJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5HZW9SZXN0cmljdGVkO1xuICAgICAgY2FzZSAnZ2VvLWJsb2NrZWQnOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLkdlb0Jsb2NrZWQ7XG4gICAgICBjYXNlICd1bmF1dGhvcml6ZWQnOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLlVuYXV0aG9yaXplZDtcbiAgICAgIGNhc2UgJ2NhcGFjaXR5JzpcbiAgICAgIGNhc2UgJ3JhdGUtbGltaXRlZCc6XG4gICAgICBjYXNlICd0aW1lb3V0JzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5SZWNvdmVyaW5nO1xuICAgICAgY2FzZSAnZm9yYmlkZGVuLXRhZyc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuQ29uZmlndXJhdGlvbkVycm9yO1xuICAgICAgY2FzZSAncG9ydC1pbi1yYW5nZS1ub3QtZm91bmQnOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLlRyYW5zaWVudENvbmZpZ3VyYXRpb25FcnJvcjtcbiAgICAgIGNhc2UgJ2ZhaWxlZCc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuRXJyb3I7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZShzdGF0dXMpO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vLi4vcngvU3ViamVjdCc7XG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uIGZyb20gJy4uLy4uL3J0Yy9JUGVlckNvbm5lY3Rpb24nO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQZWVyQ29ubmVjdGlvbkNvbnRleHQge1xuICBtZWRpYVN0cmVhbTogU3ViamVjdDxNZWRpYVN0cmVhbT47XG4gIHBlZXJDb25uZWN0aW9uOiBTdWJqZWN0PElQZWVyQ29ubmVjdGlvbj47XG4gIHBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHM6IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLm1lZGlhU3RyZWFtID0gbmV3IFN1YmplY3Q8TWVkaWFTdHJlYW0+KG51bGwpO1xuICAgIHRoaXMucGVlckNvbm5lY3Rpb24gPSBuZXcgU3ViamVjdDxJUGVlckNvbm5lY3Rpb24+KG51bGwpO1xuICAgIHRoaXMucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyA9IDA7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uLy4uL3J4L1N1YmplY3QnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdGF0ZUNvbnRleHQge1xuICBpc1N0YXJ0aW5nOiBTdWJqZWN0PGJvb2xlYW4+O1xuICBpc0Rpc3Bvc2VkOiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuaXNTdGFydGluZyA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICB0aGlzLmlzRGlzcG9zZWQgPSBmYWxzZTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vLi4vcngvU3ViamVjdCc7XG5pbXBvcnQge0lTdHJlYW1UcmFja1RyYW5zZm9ybX0gZnJvbSAnLi4vdHJhbnNmb3JtYXRpb24vU3RyZWFtVHJhY2tUcmFuc2Zvcm0nO1xuaW1wb3J0IHtJRW5jb2RlZFN0cmVhbVNpbmt9IGZyb20gJy4uL3RyYW5zZm9ybWF0aW9uL0VuY29kZWRTdHJlYW1TaW5rJztcblxuZXhwb3J0IHR5cGUgU3RyZWFtVHJhbnNmb3JtQ29udGV4dE9wdGlvbnMgPSB7XG4gIGhhc0luc2VydGFibGVTdHJlYW1zOiBib29sZWFuO1xuICBoYXNFbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXM6IGJvb2xlYW47XG4gIHZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s6IElTdHJlYW1UcmFja1RyYW5zZm9ybTxWaWRlb0ZyYW1lPiB8IHVuZGVmaW5lZDtcbiAgYXVkaW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjazogSVN0cmVhbVRyYWNrVHJhbnNmb3JtPEF1ZGlvRGF0YT4gfCB1bmRlZmluZWQ7XG4gIGVuY29kZWRWaWRlb1N0cmVhbVNpbms6IElFbmNvZGVkU3RyZWFtU2luazxSVENFbmNvZGVkVmlkZW9GcmFtZT4gfCB1bmRlZmluZWQ7XG4gIGVuY29kZWRBdWRpb1N0cmVhbVNpbms6IElFbmNvZGVkU3RyZWFtU2luazxSVENFbmNvZGVkQXVkaW9GcmFtZT4gfCB1bmRlZmluZWQ7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdHJlYW1UcmFuc2Zvcm1Db250ZXh0IHtcbiAgcmVhZG9ubHkgaGFzSW5zZXJ0YWJsZVN0cmVhbXM6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIHJlYWRvbmx5IGhhc0VuY29kZWRJbnNlcnRhYmxlU3RyZWFtczogU3ViamVjdDxib29sZWFuPjtcbiAgcmVhZG9ubHkgdmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjazogSVN0cmVhbVRyYWNrVHJhbnNmb3JtPFZpZGVvRnJhbWU+IHwgdW5kZWZpbmVkO1xuICByZWFkb25seSBhdWRpb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrOiBJU3RyZWFtVHJhY2tUcmFuc2Zvcm08QXVkaW9EYXRhPiB8IHVuZGVmaW5lZDtcbiAgcmVhZG9ubHkgZW5jb2RlZFZpZGVvU3RyZWFtU2luazogSUVuY29kZWRTdHJlYW1TaW5rPFJUQ0VuY29kZWRWaWRlb0ZyYW1lPiB8IHVuZGVmaW5lZDtcbiAgcmVhZG9ubHkgZW5jb2RlZEF1ZGlvU3RyZWFtU2luazogSUVuY29kZWRTdHJlYW1TaW5rPFJUQ0VuY29kZWRBdWRpb0ZyYW1lPiB8IHVuZGVmaW5lZDtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBTdHJlYW1UcmFuc2Zvcm1Db250ZXh0T3B0aW9ucykge1xuICAgIHRoaXMuaGFzSW5zZXJ0YWJsZVN0cmVhbXMgPSBuZXcgU3ViamVjdDxib29sZWFuPihvcHRpb25zLmhhc0luc2VydGFibGVTdHJlYW1zKTtcbiAgICB0aGlzLmhhc0VuY29kZWRJbnNlcnRhYmxlU3RyZWFtcyA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KG9wdGlvbnMuaGFzRW5jb2RlZEluc2VydGFibGVTdHJlYW1zKTtcbiAgICB0aGlzLnZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2sgPSBvcHRpb25zLnZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s7XG4gICAgdGhpcy5hdWRpb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrID0gb3B0aW9ucy5hdWRpb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrO1xuICAgIHRoaXMuZW5jb2RlZFZpZGVvU3RyZWFtU2luayA9IG9wdGlvbnMuZW5jb2RlZFZpZGVvU3RyZWFtU2luaztcbiAgICB0aGlzLmVuY29kZWRBdWRpb1N0cmVhbVNpbmsgPSBvcHRpb25zLmVuY29kZWRBdWRpb1N0cmVhbVNpbms7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uLy4uL3J4L1N1YmplY3QnO1xuaW1wb3J0IHtFbmNvZGVkRWRnZVRva2VufSBmcm9tICcuLi8uLi9lZGdlQXV0aC9FbmNvZGVkRWRnZVRva2VuJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVG9rZW5Db250ZXh0IHtcbiAgdG9rZW46IFN1YmplY3Q8RW5jb2RlZEVkZ2VUb2tlbj47XG4gIHRva2VuRXhwaXJpbmc6IFN1YmplY3Q8Ym9vbGVhbj47XG5cbiAgY29uc3RydWN0b3IodG9rZW46IEVuY29kZWRFZGdlVG9rZW4pIHtcbiAgICB0aGlzLnRva2VuID0gbmV3IFN1YmplY3Q8RW5jb2RlZEVkZ2VUb2tlbj4odG9rZW4pO1xuICAgIHRoaXMudG9rZW5FeHBpcmluZyA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5jb25zdCBkZWZhdWx0RGlzY292ZXJ5VXJpID0gJ2h0dHBzOi8vcGNhc3QucGhlbml4cnRzLmNvbS9wY2FzdC9lbmRQb2ludHMnO1xuXG5leHBvcnQge2RlZmF1bHREaXNjb3ZlcnlVcml9OyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtCaXRyYXRlTW9kZSwgQml0cmF0ZU1vZGVUeXBlfSBmcm9tICcuLi9hcGkvU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGUnO1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uLy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCaXRyYXRlTW9kZU1hcHBpbmcge1xuICBzdGF0aWMgY29udmVydEJpdHJhdGVNb2RlVG9CaXRyYXRlTW9kZVR5cGUoYml0cmF0ZU1vZGU6IEJpdHJhdGVNb2RlKTogQml0cmF0ZU1vZGVUeXBlIHtcbiAgICBzd2l0Y2ggKGJpdHJhdGVNb2RlKSB7XG4gICAgICBjYXNlIEJpdHJhdGVNb2RlLk5vcm1hbDpcbiAgICAgICAgcmV0dXJuICdOb3JtYWwnO1xuICAgICAgY2FzZSBCaXRyYXRlTW9kZS5Gb3JjZTpcbiAgICAgICAgcmV0dXJuICdGb3JjZSc7XG4gICAgICBjYXNlIEJpdHJhdGVNb2RlLlJlc2V0OlxuICAgICAgICByZXR1cm4gJ1Jlc2V0JztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKGJpdHJhdGVNb2RlKTtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7Qml0cmF0ZVN0YXRlLCBCaXRyYXRlU3RhdGVUeXBlfSBmcm9tICcuLi9hcGkvU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGUnO1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uLy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCaXRyYXRlU3RhdGVNYXBwaW5nIHtcbiAgc3RhdGljIGNvbnZlcnRCaXRyYXRlU3RhdGVUb0JpdHJhdGVTdGF0ZVR5cGUoYml0cmF0ZVN0YXRlOiBCaXRyYXRlU3RhdGUpOiBCaXRyYXRlU3RhdGVUeXBlIHtcbiAgICBzd2l0Y2ggKGJpdHJhdGVTdGF0ZSkge1xuICAgICAgY2FzZSBCaXRyYXRlU3RhdGUuS2VlcDpcbiAgICAgICAgcmV0dXJuICdLZWVwJztcbiAgICAgIGNhc2UgQml0cmF0ZVN0YXRlLlJlc2V0OlxuICAgICAgICByZXR1cm4gJ1Jlc2V0JztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKGJpdHJhdGVTdGF0ZSk7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgRW5kUG9pbnQgZnJvbSAnLi9FbmRQb2ludCc7XG5pbXBvcnQgU0RLIGZyb20gJy4uL1NESyc7XG5pbXBvcnQgRGlzY292ZXJ5U2VydmljZSBmcm9tICcuL0Rpc2NvdmVyeVNlcnZpY2UnO1xuXG5jb25zdCBkaXNjb3ZlcnlDYWNoZUludGVydmFsID0gNjAwMDA7XG5cbmludGVyZmFjZSBJUGVyVVJJRW5kcG9pbnQgeyBbeDogc3RyaW5nXTogUHJvbWlzZTxFbmRQb2ludD4gfVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaXNjb3Zlcnkge1xuICBwcml2YXRlIHN0YXRpYyBfY2FjaGU6IElQZXJVUklFbmRwb2ludCA9IHt9O1xuXG4gIHN0YXRpYyBhc3luYyBwcmVjYWNoZUNsb3Nlc3RFbmRQb2ludERpc2NvdmVyeSgpOiBQcm9taXNlPEVuZFBvaW50PiB7XG4gICAgY29uc3QgdXJpID0gbmV3IFVSTChTREsuZGlzY292ZXJ5VXJpLnZhbHVlKTtcblxuICAgIHJldHVybiBEaXNjb3ZlcnkuZGlzY292ZXJDbG9zZXN0RW5kUG9pbnRXaXRoQ2FjaGluZyh1cmkpO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIGRpc2NvdmVyQ2xvc2VzdEVuZFBvaW50V2l0aENhY2hpbmcodXJpOiBVUkwpOiBQcm9taXNlPEVuZFBvaW50PiB7XG4gICAgY29uc3QgdXJsID0gdXJpLnRvU3RyaW5nKCk7XG5cbiAgICBpZiAoRGlzY292ZXJ5Ll9jYWNoZVt1cmxdKSB7XG4gICAgICByZXR1cm4gRGlzY292ZXJ5Ll9jYWNoZVt1cmxdO1xuICAgIH1cblxuICAgIGNvbnN0IGRpc2NvdmVyeVNlcnZpY2UgPSBuZXcgRGlzY292ZXJ5U2VydmljZSh1cmkpO1xuICAgIGNvbnN0IGNhY2hlZFZhbHVlID0gRGlzY292ZXJ5Ll9jYWNoZVt1cmxdID0gZGlzY292ZXJ5U2VydmljZS5kaXNjb3ZlckNsb3Nlc3RFbmRQb2ludCgpO1xuICAgIGNvbnN0IGlnbm9yZWQgPSBEaXNjb3ZlcnkuX2NhY2hlW3VybF0udGhlbigoKSA9PiB7XG4gICAgICBjb25zdCBpZ25vcmVkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGlmIChEaXNjb3ZlcnkuX2NhY2hlW3VybF0gPT09IGNhY2hlZFZhbHVlKSB7XG4gICAgICAgICAgZGVsZXRlIERpc2NvdmVyeS5fY2FjaGVbdXJsXTtcbiAgICAgICAgfVxuICAgICAgfSwgZGlzY292ZXJ5Q2FjaGVJbnRlcnZhbCk7XG4gICAgfSkuY2F0Y2goKCkgPT4ge1xuICAgICAgZGVsZXRlIERpc2NvdmVyeS5fY2FjaGVbdXJsXTtcbiAgICB9KTtcblxuICAgIHJldHVybiBjYWNoZWRWYWx1ZTtcbiAgfVxuXG4gIHN0YXRpYyBjbGVhckNhY2hlZENsb3Nlc3RFbmRwb2ludCh1cmk6IFVSTCk6IHZvaWQge1xuICAgIGNvbnN0IHVybCA9IHVyaS50b1N0cmluZygpO1xuXG4gICAgaWYgKERpc2NvdmVyeS5fY2FjaGVbdXJsXSkge1xuICAgICAgZGVsZXRlIERpc2NvdmVyeS5fY2FjaGVbdXJsXTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignRGlzY292ZXJ5IGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufVxuXG5jb25zdCBpZ25vcmVkID0gRGlzY292ZXJ5LnByZWNhY2hlQ2xvc2VzdEVuZFBvaW50RGlzY292ZXJ5KCk7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQgRW5kUG9pbnQgZnJvbSAnLi9FbmRQb2ludCc7XG5pbXBvcnQgU0RLIGZyb20gJy4uL1NESyc7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IE1ldHJpY3NUeXBlIGZyb20gJy4uLy4uL21ldHJpY3MvTWV0cmljc1R5cGUnO1xuaW1wb3J0IERpc2NvdmVyeVVyaSBmcm9tICcuL0Rpc2NvdmVyeVVyaSc7XG5pbXBvcnQgTWV0cmljc1NlcnZpY2UgZnJvbSAnLi4vLi4vbWV0cmljcy9NZXRyaWNzU2VydmljZSc7XG5pbXBvcnQgTWV0cmljc0ZhY3RvcnkgZnJvbSAnLi4vLi4vbWV0cmljcy9NZXRyaWNzRmFjdG9yeSc7XG5cbmNvbnN0IGRlZmF1bHRUaW1lb3V0ID0gMjAwMDA7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERpc2NvdmVyeVNlcnZpY2Uge1xuICBwcml2YXRlIF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignRGlzY292ZXJ5Jyk7XG4gIHByaXZhdGUgX21ldHJpY3NTZXJ2aWNlOiBNZXRyaWNzU2VydmljZTtcbiAgcHJpdmF0ZSBfdXJpOiBVUkw7XG5cbiAgY29uc3RydWN0b3IodXJpOiBVUkwpIHtcbiAgICBpZiAoIXVyaSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdEaXNjb3ZlcnkgcmVxdWlyZXMgdXJpJyk7XG4gICAgfVxuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UgPSBNZXRyaWNzRmFjdG9yeS5nZXRNZXRyaWNzU2VydmljZSh1cmkudG9TdHJpbmcoKSk7XG4gICAgdGhpcy5fdXJpID0gdXJpO1xuICB9XG5cbiAgYXN5bmMgZGlzY292ZXJOZWFyYnlFbmRQb2ludHModXJpOiBVUkwsIHRpbWVvdXQ6IG51bWJlcik6IFByb21pc2U8RW5kUG9pbnRbXT4ge1xuICAgIGlmICghdGltZW91dCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdEaXNjb3ZlcnkgcmVxdWlyZXMgdGltZW91dCcpO1xuICAgIH1cblxuICAgIGNvbnN0IHVybCA9IHVyaS50b1N0cmluZygpO1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICAgIGZldGNoKHVybCwge1xuICAgICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgICBjYWNoZTogJ25vLWNhY2hlJ1xuICAgICAgfSksXG4gICAgICBuZXcgUHJvbWlzZTxSZXNwb25zZT4oKF8sIHJlamVjdCkgPT5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiByZWplY3QobmV3IEVycm9yKGBEaXNjb3ZlcnkgdGltZWQgb3V0IFske3VybH1dYCkpLCB0aW1lb3V0KVxuICAgICAgKVxuICAgIF0pO1xuXG4gICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBEaXNjb3ZlcnkgZmFpbGVkIFske3VybH1dIFske3Jlc3BvbnNlLnN0YXR1c31dYCk7XG4gICAgfVxuXG4gICAgaWYgKHJlc3BvbnNlLmJvZHkgPT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRGlzY292ZXJ5IGZhaWxlZCB3aXRoIG5vIGRhdGEgWyR7dXJsfV1gKTtcbiAgICB9XG5cbiAgICBjb25zdCBhc1N0cmluZyA9IGF3YWl0IHJlc3BvbnNlLnRleHQoKTtcbiAgICBjb25zdCBlbmRQb2ludHMgPSBhc1N0cmluZy5zcGxpdCgnLCcpO1xuXG4gICAgcmV0dXJuIGVuZFBvaW50cy5tYXAoZW5kUG9pbnQgPT4gbmV3IEVuZFBvaW50KGVuZFBvaW50LCB0aW1lb3V0KSk7XG4gIH1cblxuICBhc3luYyBkaXNjb3ZlckNsb3Nlc3RFbmRQb2ludCh0aW1lb3V0OiBudW1iZXIgPSBkZWZhdWx0VGltZW91dCk6IFByb21pc2U8RW5kUG9pbnQ+IHtcbiAgICBjb25zdCB1cmwgPSBEaXNjb3ZlcnlVcmkuYnVpbGREaXNjb3ZlcnlVcmwodGhpcy5fdXJpKTtcbiAgICBjb25zdCBlbmRQb2ludHMgPSBhd2FpdCB0aGlzLmRpc2NvdmVyTmVhcmJ5RW5kUG9pbnRzKG5ldyBVUkwodXJsKSwgdGltZW91dCk7XG4gICAgbGV0IGZhaWxlZFJlcXVlc3RzID0gMDtcbiAgICBjb25zdCBwcm9wYWdhdGVGYWlsdXJlSWZBbGxSZXF1ZXN0c0ZhaWxlZCA9ICgpOiBQcm9taXNlPHZvaWQ+ID0+IG5ldyBQcm9taXNlKChfLCByZWplY3QpID0+IHtcbiAgICAgIGlmIChmYWlsZWRSZXF1ZXN0cyA+PSBlbmRQb2ludHMubGVuZ3RoKSB7XG4gICAgICAgIHJlamVjdChgRGlzY292ZXJ5IG9mIFske2VuZFBvaW50cy5sZW5ndGh9XSBlbmRwb2ludHMgZnJvbSBbJHt1cmx9XSBmYWlsZWQsIHByZXZlbnRpbmcgaXQgZnJvbSBjb21wbGV0aW5nYCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgZW5kUG9pbnQgPSBhd2FpdCBQcm9taXNlLnJhY2UoZW5kUG9pbnRzLm1hcChlbmRQb2ludCA9PiBlbmRQb2ludFxuICAgICAgLnBpbmcoKVxuICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICB0aGlzLl9sb2dnZXIud2FybignRmFpbGVkIHRvIHBpbmcgZW5kIHBvaW50IFslc10nLCBlbmRQb2ludCwgZSk7XG5cbiAgICAgICAgZmFpbGVkUmVxdWVzdHMrKztcblxuICAgICAgICByZXR1cm4gcHJvcGFnYXRlRmFpbHVyZUlmQWxsUmVxdWVzdHNGYWlsZWQoKTtcbiAgICAgIH0pXG4gICAgICAudGhlbih0aW1lID0+IHtcbiAgICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnRGlzY292ZXJlZCBlbmQgcG9pbnQgWyVzXSB3aXRoIHRpbWUgWyVzXScsIGVuZFBvaW50LnRvU3RyaW5nKCksIHRpbWUpO1xuICAgICAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgICAgICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZS5Sb3VuZFRyaXBUaW1lLFxuICAgICAgICAgIHJ1bnRpbWU6IChub3cgLSBTREsucGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICAgICAgdmFsdWU6IHt1aW50NjQ6IHRpbWUgfHwgMH0sXG4gICAgICAgICAgcmVzb3VyY2U6IGVuZFBvaW50LnRvU3RyaW5nKCksXG4gICAgICAgICAga2luZDogJ3BpbmcnXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBlbmRQb2ludDtcbiAgICAgIH0pKSk7XG5cbiAgICByZXR1cm4gZW5kUG9pbnQ7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IHtkZWZhdWx0RGlzY292ZXJ5VXJpfSBmcm9tICcuLi9kZWZhdWx0cyc7XG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi8uLi9yeC9TdWJqZWN0JztcbmltcG9ydCBWZXJzaW9uTWFuYWdlciBmcm9tICcuLi92ZXJzaW9uL1ZlcnNpb25NYW5hZ2VyJztcbmltcG9ydCBQYXJhbWV0ZXJzIGZyb20gJy4uLy4uL2Vudmlyb25tZW50L1BhcmFtZXRlcnMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaXNjb3ZlcnlVcmkge1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfZGlzY292ZXJ5VXJpOiBTdWJqZWN0PHN0cmluZz4gPSBuZXcgU3ViamVjdDxzdHJpbmc+KGRlZmF1bHREaXNjb3ZlcnlVcmkpO1xuXG4gIHN0YXRpYyBnZXQgdXJpKCk6IFN1YmplY3Q8c3RyaW5nPiB7XG4gICAgcmV0dXJuIERpc2NvdmVyeVVyaS5fZGlzY292ZXJ5VXJpO1xuICB9XG5cbiAgc3RhdGljIGJ1aWxkRGlzY292ZXJ5VXJsKHVyaTogVVJMKTogc3RyaW5nIHtcbiAgICBjb25zdCB1cmwgPSBuZXcgVVJMKHVyaS50b1N0cmluZygpKTtcbiAgICBjb25zdCBzZGtWZXJzaW9uID0gVmVyc2lvbk1hbmFnZXIuc2RrVmVyc2lvbjtcbiAgICBjb25zdCBpbnRlbnRpb25zID0gUGFyYW1ldGVycy5kaXNjb3ZlcnlQYXJhbWV0ZXJzLmludGVudGlvbnM7XG5cbiAgICB1cmwuc2VhcmNoUGFyYW1zLnNldCgndmVyc2lvbicsIHNka1ZlcnNpb24pO1xuICAgIHVybC5zZWFyY2hQYXJhbXMuc2V0KCdpbnRlbnRpb25zJywgaW50ZW50aW9ucyk7XG4gICAgdXJsLnNlYXJjaFBhcmFtcy5zZXQoJ18nLCBgJHtEYXRlLm5vdygpfWApO1xuXG4gICAgaWYgKHVybC5wYXRobmFtZSA9PT0gJy8nKSB7XG4gICAgICB1cmwucGF0aG5hbWUgPSAnL3BjYXN0L2VuZFBvaW50cyc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVybC50b1N0cmluZygpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Rpc2NvdmVyeVVyaSBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgRWRnZUF1dGhQYXJzZXIgZnJvbSAnLi4vLi4vZWRnZUF1dGgvRWRnZUF1dGhQYXJzZXInO1xuaW1wb3J0IHtFbmNvZGVkRWRnZVRva2VufSBmcm9tICcuLi8uLi9lZGdlQXV0aC9FbmNvZGVkRWRnZVRva2VuJztcblxuaW1wb3J0IHtcbiAgSVN1YnNjcmliZVJlc3BvbnNlLFxuICBJU3Vic2NyaWJlV2l0aE9mZmVyUmVxdWVzdCxcbiAgSVN1YnNjcmliZVdpdGhvdXRPZmZlclJlcXVlc3Rcbn0gZnJvbSAnLi4vYXBpL1N1YnNjcmliZSc7XG5pbXBvcnQge0lTZXRSZW1vdGVEZXNjcmlwdGlvblJlcXVlc3QsIElTZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlfSBmcm9tICcuLi9hcGkvU2V0UmVtb3RlRGVzY3JpcHRpb24nO1xuaW1wb3J0IHtJRGVzdHJveVN0cmVhbVJlcXVlc3QsIElEZXN0cm95U3RyZWFtUmVzcG9uc2V9IGZyb20gJy4uL2FwaS9EZXN0cm95U3RyZWFtJztcbmltcG9ydCB7SUFkZEljZUNhbmRpZGF0ZXNSZXF1ZXN0LCBJQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlfSBmcm9tICcuLi9hcGkvQWRkSWNlQ2FuZGlkYXRlcyc7XG5pbXBvcnQgVmVyc2lvbk1hbmFnZXIgZnJvbSAnLi4vdmVyc2lvbi9WZXJzaW9uTWFuYWdlcic7XG5pbXBvcnQgUGFyYW1ldGVycyBmcm9tICcuLi8uLi9lbnZpcm9ubWVudC9QYXJhbWV0ZXJzJztcbmltcG9ydCB7Qml0cmF0ZU1vZGUsIEJpdHJhdGVTdGF0ZSwgSVNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlfSBmcm9tICcuLi9hcGkvU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGUnO1xuaW1wb3J0IEJpdHJhdGVNb2RlTWFwcGluZyBmcm9tICcuL0JpdHJhdGVNb2RlTWFwcGluZyc7XG5pbXBvcnQgQml0cmF0ZVN0YXRlTWFwcGluZyBmcm9tICcuL0JpdHJhdGVTdGF0ZU1hcHBpbmcnO1xuaW1wb3J0IHtCaXRzUGVyU2Vjb25kLCBNaWxsaXNlY29uZH0gZnJvbSAnLi4vLi4vdW5pdHMvVW5pdHMnO1xuaW1wb3J0IHtcbiAgSVB1Ymxpc2hSZXNwb25zZSxcbiAgSVB1Ymxpc2hXaXRoT2ZmZXJSZXF1ZXN0LFxuICBJUHVibGlzaFdpdGhvdXRPZmZlclJlcXVlc3QsXG4gIFB1Ymxpc2hTdGF0dXNcbn0gZnJvbSAnLi4vYXBpL1B1Ymxpc2gnO1xuXG5jb25zdCBhcGlWZXJzaW9uID0gNztcblxuZXhwb3J0IHR5cGUgU3Vic2NyaWJlU3RhdHVzID0gJ29rJyB8ICduby1zdHJlYW0nIHwgJ25vdC1mb3VuZCcgfCAndW5hdXRob3JpemVkJyB8ICdnZW8tcmVzdHJpY3RlZCcgfCAnZ2VvLWJsb2NrZWQnIHwgJ3JhdGUtbGltaXRlZCcgfCAnY2FwYWNpdHknIHwgJ3RpbWVvdXQnIHwgJ2ZvcmJpZGRlbi10YWcnIHwgJ3BvcnQtaW4tcmFuZ2Utbm90LWZvdW5kJyB8ICdmYWlsZWQnO1xuZXhwb3J0IHR5cGUgU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXMgPSAnb2snIHwgJ25vdC1mb3VuZCcgfCAndW5hdXRob3JpemVkJyB8ICdyYXRlLWxpbWl0ZWQnIHwgJ2NhcGFjaXR5JyB8ICd0aW1lb3V0JyB8ICdmYWlsZWQnO1xuZXhwb3J0IHR5cGUgU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVTdGF0dXMgPSAnb2snIHwgJ25vdC1mb3VuZCcgfCAndW5hdXRob3JpemVkJyB8ICdyYXRlLWxpbWl0ZWQnIHwgJ2NhcGFjaXR5JyB8ICd0aW1lb3V0JyB8ICdmYWlsZWQnO1xuZXhwb3J0IHR5cGUgUmVtb3ZlVGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVTdGF0dXMgPSAnb2snIHwgJ25vdC1mb3VuZCcgfCAndW5hdXRob3JpemVkJyB8ICdyYXRlLWxpbWl0ZWQnIHwgJ2NhcGFjaXR5JyB8ICd0aW1lb3V0JyB8ICdmYWlsZWQnO1xuZXhwb3J0IHR5cGUgQWRkSWNlQ2FuZGlkYXRlc1N0YXR1cyA9ICdvaycgfCAnbm90LWZvdW5kJyB8ICd1bmF1dGhvcml6ZWQnIHwgJ3JhdGUtbGltaXRlZCcgfCAnY2FwYWNpdHknIHwgJ3RpbWVvdXQnIHwgJ2ZhaWxlZCc7XG5leHBvcnQgdHlwZSBEZXN0cm95U3RyZWFtU3RhdHVzID0gJ29rJyB8ICdub3QtZm91bmQnIHwgJ3VuYXV0aG9yaXplZCcgfCAncmF0ZS1saW1pdGVkJyB8ICdjYXBhY2l0eScgfCAndGltZW91dCcgfCAnZmFpbGVkJztcbmV4cG9ydCBpbnRlcmZhY2UgSVN0cmVhbSB7XG4gIHN0cmVhbUlkOiBzdHJpbmc7XG4gIHNoYXJlZFNlY3JldDogc3RyaW5nO1xuICB0ZW5hbmN5OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVN1YnNjcmliZVJlc3BvbnNlSW5pdCB7XG4gIHN0YXR1czogU3Vic2NyaWJlU3RhdHVzO1xuICBzdHJlYW0/OiBJU3RyZWFtO1xuICBsYWc/OiBNaWxsaXNlY29uZDtcbiAgcnRjQ29uZmlndXJhdGlvbj86IFJUQ0NvbmZpZ3VyYXRpb247XG4gIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2U/OiB7XG4gICAgc2Vzc2lvbkRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0O1xuICB9O1xuICBjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2U/OiB7XG4gICAgc2Vzc2lvbkRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0O1xuICB9O1xuICBjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlPzoge1xuICAgIHNlc3Npb25EZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdDtcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgSVB1Ymxpc2hSZXNwb25zZUluaXQgPSB7XG4gIHN0YXR1czogUHVibGlzaFN0YXR1cztcbiAgc3RyZWFtPzogSVN0cmVhbTtcbiAgbGFnPzogTWlsbGlzZWNvbmQ7XG4gIHJ0Y0NvbmZpZ3VyYXRpb24/OiBSVENDb25maWd1cmF0aW9uO1xuICBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlPzoge1xuICAgIHNlc3Npb25EZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdDtcbiAgfTtcbiAgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlPzoge1xuICAgIHNlc3Npb25EZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdDtcbiAgfTtcbiAgY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZT86IHtcbiAgICBzZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ7XG4gIH07XG59O1xuXG5pbnRlcmZhY2UgSVNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2VJbml0IHtcbiAgc3RhdHVzOiBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1cztcbiAgc2Vzc2lvbkRlc2NyaXB0aW9uPzogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdDtcbn1cblxuaW50ZXJmYWNlIElBZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2VJbml0IHtcbiAgc3RhdHVzOiBBZGRJY2VDYW5kaWRhdGVzU3RhdHVzO1xuICBvcHRpb25zPzogc3RyaW5nW107XG59XG5cbmludGVyZmFjZSBJU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVSZXNwb25zZUluaXQge1xuICBzdGF0dXM6IFNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlU3RhdHVzO1xufVxuXG5pbnRlcmZhY2UgSURlc3Ryb3lTdHJlYW1SZXNwb25zZUluaXQge1xuICBzdGF0dXM6IERlc3Ryb3lTdHJlYW1TdGF0dXM7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVuZFBvaW50IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ0VuZFBvaW50Jyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3VyaTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF90aW1lb3V0OiBudW1iZXI7XG4gIHByaXZhdGUgX3JvdW5kVHJpcFRpbWU6IG51bWJlcjtcblxuICBjb25zdHJ1Y3Rvcih1cmk6IHN0cmluZywgdGltZW91dDogbnVtYmVyKSB7XG4gICAgdGhpcy5fdXJpID0gdXJpO1xuICAgIHRoaXMuX3RpbWVvdXQgPSB0aW1lb3V0O1xuXG4gICAgaWYgKCF0aW1lb3V0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEVuZCBwb2ludCByZXF1aXJlcyBhIHRpbWVvdXRgKTtcbiAgICB9XG4gIH1cblxuICBnZXQgcm91bmRUcmlwVGltZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9yb3VuZFRyaXBUaW1lO1xuICB9XG5cbiAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYEVuZFBvaW50W3VyaT0ke3RoaXMuX3VyaX1dYDtcbiAgfVxuXG4gIGFzeW5jIHBpbmcoKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBjb25zdCB1cmwgPSB0aGlzLmJ1aWxkUGluZ1VybCgpO1xuICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICBmZXRjaCh1cmwsIHtcbiAgICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgICAgY2FjaGU6ICduby1jYWNoZSdcbiAgICAgIH0pLFxuICAgICAgbmV3IFByb21pc2U8UmVzcG9uc2U+KChfLCByZWplY3QpID0+XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gcmVqZWN0KG5ldyBFcnJvcihgUGluZyB0aW1lZCBvdXQgWyR7dXJsfV1gKSksIHRoaXMuX3RpbWVvdXQpXG4gICAgICApXG4gICAgXSk7XG4gICAgY29uc3QgZmluaXNoZWQgPSBEYXRlLm5vdygpO1xuXG4gICAgaWYgKCFyZXNwb25zZS5vaykgeyAvKiBIYW5kbGUgKi9cbiAgICAgIHRocm93IG5ldyBFcnJvcihgUGluZyBmYWlsZWQgWyR7dXJsfV0gWyR7cmVzcG9uc2Uuc3RhdHVzfV1gKTtcbiAgICB9XG5cbiAgICB0aGlzLl9yb3VuZFRyaXBUaW1lID0gZmluaXNoZWQgLSBzdGFydDtcblxuICAgIHJldHVybiB0aGlzLl9yb3VuZFRyaXBUaW1lO1xuICB9XG5cbiAgYXN5bmMgc3Vic2NyaWJlKHRva2VuOiBFbmNvZGVkRWRnZVRva2VuLCBsb2NhbFNlc3Npb25EZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdCwgZmFpbHVyZUNvdW50OiBudW1iZXIpOiBQcm9taXNlPElTdWJzY3JpYmVSZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCB0ZW5hbmN5ID0gRWRnZUF1dGhQYXJzZXIucGFyc2VUb2tlbih0b2tlbikudGVuYW5jeTtcblxuICAgIGlmICghdGVuYW5jeSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gcGFyc2UgdG9rZW4gWyVzXScsIHRva2VuKTtcblxuICAgICAgcmV0dXJuIHtzdGF0dXM6ICd1bmF1dGhvcml6ZWQnfTtcbiAgICB9XG5cbiAgICBjb25zdCB1cmwgPSB0aGlzLmJ1aWxkVXJsKFt0ZW5hbmN5LCAnc3RyZWFtJywgJ3N1YnNjcmliZSddKS50b1N0cmluZygpO1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgY29uc3QgY2xpZW50VmVyc2lvbiA9IFZlcnNpb25NYW5hZ2VyLnNka1ZlcnNpb247XG5cbiAgICBpZiAoZmFpbHVyZUNvdW50ID09PSAwICYmIGxvY2FsU2Vzc2lvbkRlc2NyaXB0aW9uKSB7XG4gICAgICBjb25zdCBib2R5V2l0aE9mZmVyOiBJU3Vic2NyaWJlV2l0aE9mZmVyUmVxdWVzdCA9IHtcbiAgICAgICAgYXBpVmVyc2lvbixcbiAgICAgICAgY2xpZW50VmVyc2lvbixcbiAgICAgICAgYmVhcmVyVG9rZW46IHRva2VuLFxuICAgICAgICBmYWlsdXJlQ291bnQsXG4gICAgICAgIGh0dHBSb3VuZFRyaXBUaW1lOiB0aGlzLl9yb3VuZFRyaXBUaW1lLFxuICAgICAgICBzZXRSZW1vdGVEZXNjcmlwdGlvbjoge1xuICAgICAgICAgIGFwaVZlcnNpb24sXG4gICAgICAgICAgc2Vzc2lvbkRlc2NyaXB0aW9uOiB7XG4gICAgICAgICAgICB0eXBlOiBsb2NhbFNlc3Npb25EZXNjcmlwdGlvbi50eXBlLFxuICAgICAgICAgICAgc2RwOiBsb2NhbFNlc3Npb25EZXNjcmlwdGlvbi5zZHBcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uOiB7YXBpVmVyc2lvbn1cbiAgICAgIH07XG5cbiAgICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeShib2R5V2l0aE9mZmVyKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGJvZHlXaXRob3V0T2ZmZXI6IElTdWJzY3JpYmVXaXRob3V0T2ZmZXJSZXF1ZXN0ID0ge1xuICAgICAgICBhcGlWZXJzaW9uLFxuICAgICAgICBjbGllbnRWZXJzaW9uLFxuICAgICAgICBiZWFyZXJUb2tlbjogdG9rZW4sXG4gICAgICAgIGZhaWx1cmVDb3VudCxcbiAgICAgICAgaHR0cFJvdW5kVHJpcFRpbWU6IHRoaXMuX3JvdW5kVHJpcFRpbWUsXG4gICAgICAgIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb246IHthcGlWZXJzaW9ufVxuICAgICAgfTtcblxuICAgICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KGJvZHlXaXRob3V0T2ZmZXIpKTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgbGV0IGh0dHBSZXNwb25zZTogUmVzcG9uc2U7XG5cbiAgICB0cnkge1xuICAgICAgbGV0IHRpbWVvdXQgPSBudWxsO1xuXG4gICAgICBodHRwUmVzcG9uc2UgPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgICBmZXRjaCh1cmwsIHtcbiAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICBib2R5OiBmb3JtRGF0YVxuICAgICAgICB9KSxcbiAgICAgICAgbmV3IFByb21pc2U8UmVzcG9uc2U+KHJlc29sdmUgPT5cbiAgICAgICAgICB0aW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gc3Vic2NyaWJlJywgbmV3IEVycm9yKGBTdWJzY3JpYmUgdGltZWQgb3V0IFske3VybH1dYCkpO1xuICAgICAgICAgICAgcmVzb2x2ZSh7c3RhdHVzOiA0MDh9IGFzIFJlc3BvbnNlKTtcbiAgICAgICAgICB9LCB0aGlzLl90aW1lb3V0KVxuICAgICAgICApXG4gICAgICBdKVxuICAgICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHN1YnNjcmliZScsIGUpO1xuXG4gICAgICByZXR1cm4ge3N0YXR1czogJ2ZhaWxlZCd9O1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXR1czogU3Vic2NyaWJlU3RhdHVzID0gdGhpcy5tYXBIdHRwU3RhdHVzVG9TdWJzY3JpYmVTdGF0dXMoaHR0cFJlc3BvbnNlKTtcblxuICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgIHJldHVybiB7c3RhdHVzfTtcbiAgICB9XG5cbiAgICBjb25zdCBmaW5pc2hlZCA9IERhdGUubm93KCk7XG4gICAgY29uc3Qgc3Vic2NyaWJlUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNvbnZlcnRIdHRwUmVzcG9uc2VUb1N1YnNjcmliZVJlc3BvbnNlKHRlbmFuY3ksIGh0dHBSZXNwb25zZSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuZGVidWcoJ0dvdCBzdWJzY3JpYmUgcmVzcG9uc2UgWyVqXSBpbiBbJXNdIG1zJywgc3Vic2NyaWJlUmVzcG9uc2UsIGZpbmlzaGVkIC0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIHN1YnNjcmliZVJlc3BvbnNlO1xuICB9XG5cbiAgYXN5bmMgcHVibGlzaChuYW1lOiBzdHJpbmcsIHRva2VuOiBFbmNvZGVkRWRnZVRva2VuLCBsb2NhbFNlc3Npb25EZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdCwgZmFpbHVyZUNvdW50OiBudW1iZXIpOiBQcm9taXNlPElQdWJsaXNoUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgdGVuYW5jeSA9IEVkZ2VBdXRoUGFyc2VyLnBhcnNlVG9rZW4odG9rZW4pLnRlbmFuY3k7XG5cbiAgICBpZiAoIXRlbmFuY3kpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHBhcnNlIHRva2VuIFslc10nLCB0b2tlbik7XG5cbiAgICAgIHJldHVybiB7c3RhdHVzOiAndW5hdXRob3JpemVkJ307XG4gICAgfVxuXG4gICAgY29uc3QgdXJsID0gdGhpcy5idWlsZFVybChbdGVuYW5jeSwgJ3N0cmVhbScsICdwdWJsaXNoJ10pLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBjb25zdCBjbGllbnRWZXJzaW9uID0gVmVyc2lvbk1hbmFnZXIuc2RrVmVyc2lvbjtcblxuICAgIGlmIChmYWlsdXJlQ291bnQgPT09IDAgJiYgbG9jYWxTZXNzaW9uRGVzY3JpcHRpb24pIHtcbiAgICAgIGNvbnN0IGJvZHlXaXRoT2ZmZXI6IElQdWJsaXNoV2l0aE9mZmVyUmVxdWVzdCA9IHtcbiAgICAgICAgYXBpVmVyc2lvbixcbiAgICAgICAgY2xpZW50VmVyc2lvbixcbiAgICAgICAgYmVhcmVyVG9rZW46IHRva2VuLFxuICAgICAgICBmYWlsdXJlQ291bnQsXG4gICAgICAgIGh0dHBSb3VuZFRyaXBUaW1lOiB0aGlzLl9yb3VuZFRyaXBUaW1lLFxuICAgICAgICBuYW1lLFxuICAgICAgICBzZXRSZW1vdGVEZXNjcmlwdGlvbjoge1xuICAgICAgICAgIGFwaVZlcnNpb24sXG4gICAgICAgICAgc2Vzc2lvbkRlc2NyaXB0aW9uOiB7XG4gICAgICAgICAgICB0eXBlOiBsb2NhbFNlc3Npb25EZXNjcmlwdGlvbi50eXBlLFxuICAgICAgICAgICAgc2RwOiBsb2NhbFNlc3Npb25EZXNjcmlwdGlvbi5zZHBcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uOiB7XG4gICAgICAgICAgc3RyZWFtSWQ6ICcnLFxuICAgICAgICAgIGFwaVZlcnNpb25cbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KGJvZHlXaXRoT2ZmZXIpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgYm9keVdpdGhvdXRPZmZlcjogSVB1Ymxpc2hXaXRob3V0T2ZmZXJSZXF1ZXN0ID0ge1xuICAgICAgICBhcGlWZXJzaW9uLFxuICAgICAgICBjbGllbnRWZXJzaW9uLFxuICAgICAgICBiZWFyZXJUb2tlbjogdG9rZW4sXG4gICAgICAgIGZhaWx1cmVDb3VudCxcbiAgICAgICAgaHR0cFJvdW5kVHJpcFRpbWU6IHRoaXMuX3JvdW5kVHJpcFRpbWUsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb246IHtcbiAgICAgICAgICBzdHJlYW1JZDogJycsXG4gICAgICAgICAgYXBpVmVyc2lvblxuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoYm9keVdpdGhvdXRPZmZlcikpO1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICBsZXQgaHR0cFJlc3BvbnNlOiBSZXNwb25zZTtcblxuICAgIHRyeSB7XG4gICAgICBsZXQgdGltZW91dCA9IG51bGw7XG5cbiAgICAgIGh0dHBSZXNwb25zZSA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICAgIGZldGNoKHVybCwge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIGJvZHk6IGZvcm1EYXRhXG4gICAgICAgIH0pLFxuICAgICAgICBuZXcgUHJvbWlzZTxSZXNwb25zZT4ocmVzb2x2ZSA9PlxuICAgICAgICAgIHRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBwdWJsaXNoJywgbmV3IEVycm9yKGBQdWJsaXNoIHRpbWVkIG91dCBbJHt1cmx9XWApKTtcbiAgICAgICAgICAgIHJlc29sdmUoe3N0YXR1czogNDA4fSBhcyBSZXNwb25zZSk7XG4gICAgICAgICAgfSwgdGhpcy5fdGltZW91dClcbiAgICAgICAgKVxuICAgICAgXSlcbiAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBwdWJsaXNoJywgZSk7XG5cbiAgICAgIHJldHVybiB7c3RhdHVzOiAnZmFpbGVkJ307XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdHVzOiBQdWJsaXNoU3RhdHVzID0gdGhpcy5tYXBIdHRwU3RhdHVzVG9QdWJsaXNoU3RhdHVzKGh0dHBSZXNwb25zZSk7XG5cbiAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICByZXR1cm4ge3N0YXR1c307XG4gICAgfVxuXG4gICAgY29uc3QgZmluaXNoZWQgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHN1YnNjcmliZVJlc3BvbnNlID0gYXdhaXQgdGhpcy5jb252ZXJ0SHR0cFJlc3BvbnNlVG9QdWJsaXNoUmVzcG9uc2UodGVuYW5jeSwgaHR0cFJlc3BvbnNlKTtcblxuICAgIHRoaXMuX2xvZ2dlci5kZWJ1ZygnR290IHB1Ymxpc2ggcmVzcG9uc2UgWyVqXSBpbiBbJXNdIG1zJywgc3Vic2NyaWJlUmVzcG9uc2UsIGZpbmlzaGVkIC0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIHN1YnNjcmliZVJlc3BvbnNlO1xuICB9XG5cbiAgYXN5bmMgc2V0UmVtb3RlRGVzY3JpcHRpb24oc3RyZWFtOiBJU3RyZWFtLCBzZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQpOiBQcm9taXNlPElTZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IHVybCA9IHRoaXMuYnVpbGRVcmwoW3N0cmVhbS50ZW5hbmN5LCAnc3RyZWFtJywgc3RyZWFtLnN0cmVhbUlkLCAnZGVzY3JpcHRpb24nLCAncmVtb3RlJ10pLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBjb25zdCBib2R5OiBJU2V0UmVtb3RlRGVzY3JpcHRpb25SZXF1ZXN0ID0ge1xuICAgICAgYXBpVmVyc2lvbixcbiAgICAgIHNoYXJlZFNlY3JldDogc3RyZWFtLnNoYXJlZFNlY3JldCxcbiAgICAgIHNlc3Npb25EZXNjcmlwdGlvbjoge1xuICAgICAgICB0eXBlOiBzZXNzaW9uRGVzY3JpcHRpb24udHlwZSxcbiAgICAgICAgc2RwOiBzZXNzaW9uRGVzY3JpcHRpb24uc2RwXG4gICAgICB9XG4gICAgfTtcblxuICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeShib2R5KSk7XG5cbiAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgbGV0IGh0dHBSZXNwb25zZTogUmVzcG9uc2U7XG5cbiAgICB0cnkge1xuICAgICAgbGV0IHRpbWVvdXQgPSBudWxsO1xuXG4gICAgICBodHRwUmVzcG9uc2UgPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgICBmZXRjaCh1cmwsIHtcbiAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICBib2R5OiBmb3JtRGF0YVxuICAgICAgICB9KSxcbiAgICAgICAgbmV3IFByb21pc2U8UmVzcG9uc2U+KHJlc29sdmUgPT5cbiAgICAgICAgICB0aW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gc2V0IHJlbW90ZSBkZXNjcmlwdGlvbicsIG5ldyBFcnJvcihgU2V0IHJlbW90ZSBkZXNjcmlwdGlvbiB0aW1lZCBvdXQgWyR7dXJsfV1gKSk7XG4gICAgICAgICAgICByZXNvbHZlKHtzdGF0dXM6IDQwOH0gYXMgUmVzcG9uc2UpO1xuICAgICAgICAgIH0sIHRoaXMuX3RpbWVvdXQpXG4gICAgICAgIClcbiAgICAgIF0pXG4gICAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgICBpZiAodGltZW91dCkge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gc2V0IHJlbW90ZSBkZXNjcmlwdGlvbicsIGUpO1xuXG4gICAgICByZXR1cm4ge3N0YXR1czogJ2ZhaWxlZCd9O1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXR1czogU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXMgPSB0aGlzLm1hcEh0dHBTdGF0dXNUb1NldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzKGh0dHBSZXNwb25zZSk7XG5cbiAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICByZXR1cm4ge3N0YXR1c307XG4gICAgfVxuXG4gICAgY29uc3QgZmluaXNoZWQgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNvbnZlcnRIdHRwUmVzcG9uc2VUb1NldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UoaHR0cFJlc3BvbnNlKTtcblxuICAgIHRoaXMuX2xvZ2dlci5kZWJ1ZygnR290IHNldCByZW1vdGUgZGVzY3JpcHRpb24gcmVzcG9uc2UgWyVqXSBpbiBbJXNdIG1zJywgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSwgZmluaXNoZWQgLSBzdGFydCk7XG5cbiAgICByZXR1cm4gc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZTtcbiAgfVxuXG4gIGFzeW5jIGxpbWl0Qml0cmF0ZShcbiAgICBzdHJlYW06IElTdHJlYW0sXG4gICAgZWxhcHNlZEluTWlsbGlzZWNvbmRzOiBudW1iZXIsXG4gICAgYml0cmF0ZUluQml0c1BlclNlY29uZDogQml0c1BlclNlY29uZCxcbiAgICBiaXRyYXRlU3RhdGU6IEJpdHJhdGVTdGF0ZSxcbiAgICBiaXRyYXRlTW9kZTogQml0cmF0ZU1vZGUsXG4gICk6IFByb21pc2U8SVNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgdXJsID0gdGhpcy5idWlsZFVybChbc3RyZWFtLnRlbmFuY3ksICdzdHJlYW0nLCBzdHJlYW0uc3RyZWFtSWQsICdiaXRyYXRlJ10pLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBjb25zdCBib2R5OiBJU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGUgPSB7XG4gICAgICBhcGlWZXJzaW9uLFxuICAgICAgc2hhcmVkU2VjcmV0OiBzdHJlYW0uc2hhcmVkU2VjcmV0LFxuICAgICAgZWxhcHNlZEluTWlsbGlzZWNvbmRzLFxuICAgICAgYml0cmF0ZUluQml0c1BlclNlY29uZCxcbiAgICAgIGJpdHJhdGVTdGF0ZTogQml0cmF0ZVN0YXRlTWFwcGluZy5jb252ZXJ0Qml0cmF0ZVN0YXRlVG9CaXRyYXRlU3RhdGVUeXBlKGJpdHJhdGVTdGF0ZSksXG4gICAgICBiaXRyYXRlTW9kZTogQml0cmF0ZU1vZGVNYXBwaW5nLmNvbnZlcnRCaXRyYXRlTW9kZVRvQml0cmF0ZU1vZGVUeXBlKGJpdHJhdGVNb2RlKVxuICAgIH07XG5cbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoYm9keSkpO1xuXG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGxldCBodHRwUmVzcG9uc2U6IFJlc3BvbnNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIGxldCB0aW1lb3V0ID0gbnVsbDtcblxuICAgICAgaHR0cFJlc3BvbnNlID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICAgICAgZmV0Y2godXJsLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgYm9keTogZm9ybURhdGFcbiAgICAgICAgfSksXG4gICAgICAgIG5ldyBQcm9taXNlPFJlc3BvbnNlPihyZXNvbHZlID0+XG4gICAgICAgICAgdGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHNldCBsaW1pdCBiaXRyYXRlIHRpbWVkJywgbmV3IEVycm9yKGBTZXQgbGltaXQgYml0cmF0ZSB0aW1lZCBvdXQgWyR7dXJsfV1gKSk7XG4gICAgICAgICAgICByZXNvbHZlKHtzdGF0dXM6IDQwOH0gYXMgUmVzcG9uc2UpO1xuICAgICAgICAgIH0sIHRoaXMuX3RpbWVvdXQpXG4gICAgICAgIClcbiAgICAgIF0pXG4gICAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgICBpZiAodGltZW91dCkge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gc2V0IGxpbWl0IGJpdHJhdGUgdGltZWQnLCBlKTtcblxuICAgICAgcmV0dXJuIHtzdGF0dXM6ICdmYWlsZWQnfTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0dXM6IFNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlU3RhdHVzID0gdGhpcy5tYXBIdHRwU3RhdHVzVG9TZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVN0YXR1cyhodHRwUmVzcG9uc2UpO1xuICAgIGNvbnN0IGZpbmlzaGVkID0gRGF0ZS5ub3coKTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdHb3Qgc2V0IGxpbWl0IGJpdHJhdGUgcmVzcG9uc2UgWyVzXSBpbiBbJXNdIG1zJywgc3RhdHVzLCBmaW5pc2hlZCAtIHN0YXJ0KTtcblxuICAgIHJldHVybiB7c3RhdHVzfTtcbiAgfVxuXG4gIGFzeW5jIGFkZEljZUNhbmRpZGF0ZXMoc3RyZWFtOiBJU3RyZWFtLCBjYW5kaWRhdGVzOiBSVENJY2VDYW5kaWRhdGVbXSwgZGlzY292ZXJ5Q29tcGxldGVkOiBib29sZWFuLCBvcHRpb25zOiBzdHJpbmdbXSA9IFtdKTogUHJvbWlzZTxJQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IHVybCA9IHRoaXMuYnVpbGRVcmwoW3N0cmVhbS50ZW5hbmN5LCAnc3RyZWFtJywgc3RyZWFtLnN0cmVhbUlkLCAnaWNlJywgJ2NhbmRpZGF0ZXMnXSkudG9TdHJpbmcoKTtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgIGNvbnN0IGJvZHk6IElBZGRJY2VDYW5kaWRhdGVzUmVxdWVzdCA9IHtcbiAgICAgIGFwaVZlcnNpb24sXG4gICAgICBzaGFyZWRTZWNyZXQ6IHN0cmVhbS5zaGFyZWRTZWNyZXQsXG4gICAgICBjYW5kaWRhdGVzLFxuICAgICAgZGlzY292ZXJ5Q29tcGxldGVkLFxuICAgICAgb3B0aW9uc1xuICAgIH07XG5cbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoYm9keSkpO1xuXG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGxldCBodHRwUmVzcG9uc2U6IFJlc3BvbnNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIGxldCB0aW1lb3V0ID0gbnVsbDtcblxuICAgICAgaHR0cFJlc3BvbnNlID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICAgICAgZmV0Y2godXJsLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgYm9keTogZm9ybURhdGFcbiAgICAgICAgfSksXG4gICAgICAgIG5ldyBQcm9taXNlPFJlc3BvbnNlPihyZXNvbHZlID0+XG4gICAgICAgICAgdGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIGFkZCBpY2UgY2FuZGlkYXRlcycsIG5ldyBFcnJvcihgQWRkIGljZSBjYW5kaWRhdGVzIHRpbWVkIG91dCBbJHt1cmx9XWApKTtcbiAgICAgICAgICAgIHJlc29sdmUoe3N0YXR1czogNDA4fSBhcyBSZXNwb25zZSk7XG4gICAgICAgICAgfSwgdGhpcy5fdGltZW91dClcbiAgICAgICAgKVxuICAgICAgXSlcbiAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBhZGQgaWNlIGNhbmRpZGF0ZXMnLCBlKTtcblxuICAgICAgcmV0dXJuIHtzdGF0dXM6ICdmYWlsZWQnfTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0dXM6IEFkZEljZUNhbmRpZGF0ZXNTdGF0dXMgPSB0aGlzLm1hcEh0dHBTdGF0dXNUb0FkZEljZUNhbmRpZGF0ZXNTdGF0dXMoaHR0cFJlc3BvbnNlKTtcblxuICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgIHJldHVybiB7c3RhdHVzfTtcbiAgICB9XG5cbiAgICBjb25zdCBmaW5pc2hlZCA9IERhdGUubm93KCk7XG4gICAgY29uc3QgYWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlID0gYXdhaXQgdGhpcy5jb252ZXJ0SHR0cFJlc3BvbnNlVG9BZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2UoaHR0cFJlc3BvbnNlKTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdHb3QgYWRkIElDRSBjYW5kaWRhdGVzIHJlc3BvbnNlIFslal0gaW4gWyVzXSBtcycsIGFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZSwgZmluaXNoZWQgLSBzdGFydCk7XG5cbiAgICByZXR1cm4gYWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlO1xuICB9XG5cbiAgYXN5bmMgZGVzdHJveVN0cmVhbShzdHJlYW06IElTdHJlYW0sIHJlYXNvbjogc3RyaW5nKTogUHJvbWlzZTxJRGVzdHJveVN0cmVhbVJlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IHVybCA9IHRoaXMuYnVpbGRVcmwoW3N0cmVhbS50ZW5hbmN5LCAnc3RyZWFtJywgc3RyZWFtLnN0cmVhbUlkLCAnZGVzdHJveSddKS50b1N0cmluZygpO1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgY29uc3QgYm9keTogSURlc3Ryb3lTdHJlYW1SZXF1ZXN0ID0ge1xuICAgICAgYXBpVmVyc2lvbixcbiAgICAgIHNoYXJlZFNlY3JldDogc3RyZWFtLnNoYXJlZFNlY3JldCxcbiAgICAgIHJlYXNvbixcbiAgICAgIG9wdGlvbnM6IFtdXG4gICAgfTtcblxuICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeShib2R5KSk7XG5cbiAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgbGV0IGh0dHBSZXNwb25zZTogUmVzcG9uc2U7XG5cbiAgICB0cnkge1xuICAgICAgbGV0IHRpbWVvdXQgPSBudWxsO1xuXG4gICAgICBodHRwUmVzcG9uc2UgPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgICBmZXRjaCh1cmwsIHtcbiAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICBib2R5OiBmb3JtRGF0YSxcbiAgICAgICAgICBjYWNoZTogJ25vLWNhY2hlJ1xuICAgICAgICB9KSxcbiAgICAgICAgbmV3IFByb21pc2U8UmVzcG9uc2U+KHJlc29sdmUgPT5cbiAgICAgICAgICB0aW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gc3Vic2NyaWJlJywgbmV3IEVycm9yKGBEZWxldGUgc3RyZWFtIHRpbWVkIG91dCBbJHt1cmx9XWApKTtcbiAgICAgICAgICAgIHJlc29sdmUoe3N0YXR1czogNDA4fSBhcyBSZXNwb25zZSk7XG4gICAgICAgICAgfSwgdGhpcy5fdGltZW91dClcbiAgICAgICAgKVxuICAgICAgXSlcbiAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBkZWxldGUgc3RyZWFtJywgZSk7XG5cbiAgICAgIHJldHVybiB7c3RhdHVzOiAnZmFpbGVkJ307XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdHVzOiBEZXN0cm95U3RyZWFtU3RhdHVzID0gdGhpcy5tYXBIdHRwU3RhdHVzVG9TZXREZXN0cm95U3RyZWFtU3RhdHVzKGh0dHBSZXNwb25zZSk7XG5cbiAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICByZXR1cm4ge3N0YXR1c307XG4gICAgfVxuXG4gICAgY29uc3QgZmluaXNoZWQgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IGRlc3Ryb3lTdHJlYW1SZXNwb25zZSA9IGF3YWl0IHRoaXMuY29udmVydEh0dHBSZXNwb25zZVRvRGVzdHJveVN0cmVhbVJlc3BvbnNlKGh0dHBSZXNwb25zZSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnR290IGRlc3Ryb3kgc3RyZWFtIHJlc3BvbnNlIFslal0gaW4gWyVzXSBtcycsIGRlc3Ryb3lTdHJlYW1SZXNwb25zZSwgZmluaXNoZWQgLSBzdGFydCk7XG5cbiAgICByZXR1cm4gZGVzdHJveVN0cmVhbVJlc3BvbnNlO1xuICB9XG5cbiAgYXN5bmMgZGVzdHJveVN0cmVhbU9uVW5tb3VudChzdHJlYW06IElTdHJlYW0sIHJlYXNvbjogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCFuYXZpZ2F0b3I/LnNlbmRCZWFjb24pIHtcbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLmRlc3Ryb3lTdHJlYW0oc3RyZWFtLCByZWFzb24pO1xuICAgIH1cblxuICAgIGNvbnN0IHVybCA9IHRoaXMuYnVpbGRVcmwoW3N0cmVhbS50ZW5hbmN5LCAnc3RyZWFtJywgc3RyZWFtLnN0cmVhbUlkLCAnZGVzdHJveSddKS50b1N0cmluZygpO1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgY29uc3QgYm9keTogSURlc3Ryb3lTdHJlYW1SZXF1ZXN0ID0ge1xuICAgICAgYXBpVmVyc2lvbixcbiAgICAgIHNoYXJlZFNlY3JldDogc3RyZWFtLnNoYXJlZFNlY3JldCxcbiAgICAgIHJlYXNvbixcbiAgICAgIG9wdGlvbnM6IFtdXG4gICAgfTtcblxuICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeShib2R5KSk7XG5cbiAgICBuYXZpZ2F0b3Iuc2VuZEJlYWNvbih1cmwsIGZvcm1EYXRhKTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRVcmwocGF0aDogc3RyaW5nW10pOiBVUkwge1xuICAgIGNvbnN0IHVyaSA9IG5ldyBVUkwodGhpcy5fdXJpKTtcbiAgICBjb25zdCBwYXRoQXNBcnJheSA9IHVyaS5wYXRobmFtZS5zcGxpdCgnLycpO1xuXG4gICAgcGF0aEFzQXJyYXkubGVuZ3RoID0gcGF0aEFzQXJyYXkubGVuZ3RoIC0gMTtcblxuICAgIHVyaS5wYXRobmFtZSA9IHBhdGhBc0FycmF5LmNvbmNhdCguLi5wYXRoKS5qb2luKCcvJyk7XG5cbiAgICByZXR1cm4gdXJpO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFBpbmdVcmwoKTogc3RyaW5nIHtcbiAgICBjb25zdCB1cmkgPSBuZXcgVVJMKHRoaXMuX3VyaSk7XG4gICAgY29uc3Qgc2RrVmVyc2lvbiA9IFZlcnNpb25NYW5hZ2VyLnNka1ZlcnNpb247XG4gICAgY29uc3QgaW50ZW50aW9ucyA9IFBhcmFtZXRlcnMuZGlzY292ZXJ5UGFyYW1ldGVycy5pbnRlbnRpb25zO1xuXG4gICAgdXJpLnNlYXJjaFBhcmFtcy5zZXQoJ3R5cGUnLCAnaHR0cCcpO1xuICAgIHVyaS5zZWFyY2hQYXJhbXMuc2V0KCd2ZXJzaW9uJywgc2RrVmVyc2lvbik7XG4gICAgdXJpLnNlYXJjaFBhcmFtcy5zZXQoJ2ludGVudGlvbnMnLCBpbnRlbnRpb25zKTtcbiAgICB1cmkuc2VhcmNoUGFyYW1zLnNldCgnXycsIGAke0RhdGUubm93KCl9YCk7XG5cbiAgICByZXR1cm4gdXJpLnRvU3RyaW5nKCk7XG4gIH1cblxuICBwcml2YXRlIG1hcEh0dHBTdGF0dXNUb1B1Ymxpc2hTdGF0dXMocmVzcG9uc2U6IFJlc3BvbnNlKTogUHVibGlzaFN0YXR1cyB7XG4gICAgaWYgKCFyZXNwb25zZSkge1xuICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cblxuICAgIHN3aXRjaCAocmVzcG9uc2Uuc3RhdHVzKSB7XG4gICAgICBjYXNlIDIwMDpcbiAgICAgICAgcmV0dXJuICdvayc7XG4gICAgICBjYXNlIDQwMTpcbiAgICAgICAgcmV0dXJuICd1bmF1dGhvcml6ZWQnO1xuICAgICAgY2FzZSA0MDI6XG4gICAgICAgIHJldHVybiAnZ2VvLXJlc3RyaWN0ZWQnO1xuICAgICAgY2FzZSA0MDM6XG4gICAgICAgIHJldHVybiAnZ2VvLWJsb2NrZWQnO1xuICAgICAgY2FzZSA0MDY6XG4gICAgICAgIHJldHVybiAnbWlzc2luZy1jaGFubmVsLW9yLXJvb20taWQnO1xuICAgICAgY2FzZSA0MDg6XG4gICAgICAgIHJldHVybiAndGltZW91dCc7XG4gICAgICBjYXNlIDQwOTpcbiAgICAgICAgcmV0dXJuICdwb3J0LWluLXJhbmdlLW5vdC1mb3VuZCc7XG4gICAgICBjYXNlIDQxNTpcbiAgICAgICAgcmV0dXJuICdmb3JiaWRkZW4tdGFnJztcbiAgICAgIGNhc2UgNTAzOlxuICAgICAgICByZXR1cm4gJ2NhcGFjaXR5JztcbiAgICAgIGNhc2UgNTA0OlxuICAgICAgICByZXR1cm4gJ3JhdGUtbGltaXRlZCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBtYXBIdHRwU3RhdHVzVG9TdWJzY3JpYmVTdGF0dXMocmVzcG9uc2U6IFJlc3BvbnNlKTogU3Vic2NyaWJlU3RhdHVzIHtcbiAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuXG4gICAgc3dpdGNoIChyZXNwb25zZS5zdGF0dXMpIHtcbiAgICAgIGNhc2UgMjAwOlxuICAgICAgICByZXR1cm4gJ29rJztcbiAgICAgIGNhc2UgNDAxOlxuICAgICAgICByZXR1cm4gJ3VuYXV0aG9yaXplZCc7XG4gICAgICBjYXNlIDQwMjpcbiAgICAgICAgcmV0dXJuICdnZW8tcmVzdHJpY3RlZCc7XG4gICAgICBjYXNlIDQwMzpcbiAgICAgICAgcmV0dXJuICdnZW8tYmxvY2tlZCc7XG4gICAgICBjYXNlIDQwODpcbiAgICAgICAgcmV0dXJuICd0aW1lb3V0JztcbiAgICAgIGNhc2UgNDA5OlxuICAgICAgICByZXR1cm4gJ3BvcnQtaW4tcmFuZ2Utbm90LWZvdW5kJztcbiAgICAgIGNhc2UgNDE1OlxuICAgICAgICByZXR1cm4gJ2ZvcmJpZGRlbi10YWcnO1xuICAgICAgY2FzZSA1MDM6XG4gICAgICAgIHJldHVybiAnY2FwYWNpdHknO1xuICAgICAgY2FzZSA1MDQ6XG4gICAgICAgIHJldHVybiAncmF0ZS1saW1pdGVkJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1hcEh0dHBTdGF0dXNUb1NldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzKHJlc3BvbnNlOiBSZXNwb25zZSk6IFNldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzIHtcbiAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuXG4gICAgc3dpdGNoIChyZXNwb25zZS5zdGF0dXMpIHtcbiAgICAgIGNhc2UgMjAwOlxuICAgICAgICByZXR1cm4gJ29rJztcbiAgICAgIGNhc2UgNDAxOlxuICAgICAgICByZXR1cm4gJ3VuYXV0aG9yaXplZCc7XG4gICAgICBjYXNlIDQwODpcbiAgICAgICAgcmV0dXJuICd0aW1lb3V0JztcbiAgICAgIGNhc2UgNTAzOlxuICAgICAgICByZXR1cm4gJ2NhcGFjaXR5JztcbiAgICAgIGNhc2UgNTA0OlxuICAgICAgICByZXR1cm4gJ3JhdGUtbGltaXRlZCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBtYXBIdHRwU3RhdHVzVG9TZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVN0YXR1cyhyZXNwb25zZTogUmVzcG9uc2UpOiBTZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVN0YXR1cyB7XG4gICAgaWYgKCFyZXNwb25zZSkge1xuICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cblxuICAgIHN3aXRjaCAocmVzcG9uc2Uuc3RhdHVzKSB7XG4gICAgICBjYXNlIDIwMDpcbiAgICAgICAgcmV0dXJuICdvayc7XG4gICAgICBjYXNlIDQwMTpcbiAgICAgICAgcmV0dXJuICd1bmF1dGhvcml6ZWQnO1xuICAgICAgY2FzZSA0MDg6XG4gICAgICAgIHJldHVybiAndGltZW91dCc7XG4gICAgICBjYXNlIDUwMzpcbiAgICAgICAgcmV0dXJuICdjYXBhY2l0eSc7XG4gICAgICBjYXNlIDUwNDpcbiAgICAgICAgcmV0dXJuICdyYXRlLWxpbWl0ZWQnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbWFwSHR0cFN0YXR1c1RvQWRkSWNlQ2FuZGlkYXRlc1N0YXR1cyhyZXNwb25zZTogUmVzcG9uc2UpOiBBZGRJY2VDYW5kaWRhdGVzU3RhdHVzIHtcbiAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuXG4gICAgc3dpdGNoIChyZXNwb25zZS5zdGF0dXMpIHtcbiAgICAgIGNhc2UgMjAwOlxuICAgICAgICByZXR1cm4gJ29rJztcbiAgICAgIGNhc2UgNDAxOlxuICAgICAgICByZXR1cm4gJ3VuYXV0aG9yaXplZCc7XG4gICAgICBjYXNlIDQwODpcbiAgICAgICAgcmV0dXJuICd0aW1lb3V0JztcbiAgICAgIGNhc2UgNTAzOlxuICAgICAgICByZXR1cm4gJ2NhcGFjaXR5JztcbiAgICAgIGNhc2UgNTA0OlxuICAgICAgICByZXR1cm4gJ3JhdGUtbGltaXRlZCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBtYXBIdHRwU3RhdHVzVG9TZXREZXN0cm95U3RyZWFtU3RhdHVzKHJlc3BvbnNlOiBSZXNwb25zZSk6IERlc3Ryb3lTdHJlYW1TdGF0dXMge1xuICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHJlc3BvbnNlLnN0YXR1cykge1xuICAgICAgY2FzZSAyMDA6XG4gICAgICAgIHJldHVybiAnb2snO1xuICAgICAgY2FzZSA0MDE6XG4gICAgICAgIHJldHVybiAndW5hdXRob3JpemVkJztcbiAgICAgIGNhc2UgNDA4OlxuICAgICAgICByZXR1cm4gJ3RpbWVvdXQnO1xuICAgICAgY2FzZSA1MDM6XG4gICAgICAgIHJldHVybiAnY2FwYWNpdHknO1xuICAgICAgY2FzZSA1MDQ6XG4gICAgICAgIHJldHVybiAncmF0ZS1saW1pdGVkJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNvbnZlcnRIdHRwUmVzcG9uc2VUb1N1YnNjcmliZVJlc3BvbnNlKHRlbmFuY3k6IHN0cmluZywgcmVzcG9uc2U6IFJlc3BvbnNlKTogUHJvbWlzZTxJU3Vic2NyaWJlUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKSBhcyBJU3Vic2NyaWJlUmVzcG9uc2U7XG4gICAgY29uc3Qgc3Vic2NyaWJlUmVzcG9uc2U6IElTdWJzY3JpYmVSZXNwb25zZUluaXQgPSB7c3RhdHVzOiBkYXRhLnN0YXR1c307XG5cbiAgICBzdWJzY3JpYmVSZXNwb25zZS5zdHJlYW0gPSB7XG4gICAgICB0ZW5hbmN5LFxuICAgICAgc3RyZWFtSWQ6IGRhdGEuc3RyZWFtSWQsXG4gICAgICBzaGFyZWRTZWNyZXQ6IGRhdGEuc2hhcmVkU2VjcmV0XG4gICAgfTtcblxuICAgIHN1YnNjcmliZVJlc3BvbnNlLmxhZyA9IGRhdGEubGFnO1xuXG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIGlmIChkYXRhLnJ0Y0NvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgc3Vic2NyaWJlUmVzcG9uc2UucnRjQ29uZmlndXJhdGlvbiA9IHRoaXMuY29udmVydElSdGNDb25maWd1cmF0aW9uVG9SVENDb25maWd1cmF0aW9uKGRhdGEucnRjQ29uZmlndXJhdGlvbik7XG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhLnNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UgJiYgZGF0YS5zZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbikge1xuICAgICAgICBzdWJzY3JpYmVSZXNwb25zZS5zZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlID0ge3Nlc3Npb25EZXNjcmlwdGlvbjogZGF0YS5zZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbn07XG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhLmNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2UgJiYgZGF0YS5jcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbikge1xuICAgICAgICBzdWJzY3JpYmVSZXNwb25zZS5jcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlID0ge3Nlc3Npb25EZXNjcmlwdGlvbjogZGF0YS5jcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbn07XG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhLmNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSAmJiBkYXRhLmNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24pIHtcbiAgICAgICAgc3Vic2NyaWJlUmVzcG9uc2UuY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlID0ge3Nlc3Npb25EZXNjcmlwdGlvbjogZGF0YS5jcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9ufTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc3Vic2NyaWJlUmVzcG9uc2U7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNvbnZlcnRIdHRwUmVzcG9uc2VUb1B1Ymxpc2hSZXNwb25zZSh0ZW5hbmN5OiBzdHJpbmcsIHJlc3BvbnNlOiBSZXNwb25zZSk6IFByb21pc2U8SVB1Ymxpc2hSZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpIGFzIElQdWJsaXNoUmVzcG9uc2U7XG4gICAgY29uc3QgcHVibGlzaFJlc3BvbnNlOiBJUHVibGlzaFJlc3BvbnNlSW5pdCA9IHtzdGF0dXM6IGRhdGEuc3RhdHVzfTtcblxuICAgIHB1Ymxpc2hSZXNwb25zZS5zdHJlYW0gPSB7XG4gICAgICB0ZW5hbmN5LFxuICAgICAgc3RyZWFtSWQ6IGRhdGEuc3RyZWFtSWQsXG4gICAgICBzaGFyZWRTZWNyZXQ6IGRhdGEuc2hhcmVkU2VjcmV0XG4gICAgfTtcblxuICAgIGlmIChkYXRhKSB7XG4gICAgICBpZiAoZGF0YS5ydGNDb25maWd1cmF0aW9uKSB7XG4gICAgICAgIHB1Ymxpc2hSZXNwb25zZS5ydGNDb25maWd1cmF0aW9uID0gdGhpcy5jb252ZXJ0SVJ0Y0NvbmZpZ3VyYXRpb25Ub1JUQ0NvbmZpZ3VyYXRpb24oZGF0YS5ydGNDb25maWd1cmF0aW9uKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRhdGEuc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSAmJiBkYXRhLnNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKSB7XG4gICAgICAgIHB1Ymxpc2hSZXNwb25zZS5zZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlID0ge3Nlc3Npb25EZXNjcmlwdGlvbjogZGF0YS5zZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbn07XG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhLmNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2UgJiYgZGF0YS5jcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbikge1xuICAgICAgICBwdWJsaXNoUmVzcG9uc2UuY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZSA9IHtzZXNzaW9uRGVzY3JpcHRpb246IGRhdGEuY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb259O1xuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YS5jcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UgJiYgZGF0YS5jcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKSB7XG4gICAgICAgIHB1Ymxpc2hSZXNwb25zZS5jcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UgPSB7c2Vzc2lvbkRlc2NyaXB0aW9uOiBkYXRhLmNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb259O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwdWJsaXNoUmVzcG9uc2U7XG4gIH1cblxuICBwcml2YXRlIGNvbnZlcnRJUnRjQ29uZmlndXJhdGlvblRvUlRDQ29uZmlndXJhdGlvbihjb25maWd1cmF0aW9uOiBSVENDb25maWd1cmF0aW9uKTogUlRDQ29uZmlndXJhdGlvbiB7XG4gICAgY29uc3QgcnRjQ29uZmlndXJhdGlvbjogUlRDQ29uZmlndXJhdGlvbiA9IHtpY2VTZXJ2ZXJzOiBbXX07XG5cbiAgICBpZiAoY29uZmlndXJhdGlvbi5idW5kbGVQb2xpY3kpIHtcbiAgICAgIHJ0Y0NvbmZpZ3VyYXRpb24uYnVuZGxlUG9saWN5ID0gY29uZmlndXJhdGlvbi5idW5kbGVQb2xpY3k7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjb25maWd1cmF0aW9uLmljZUNhbmRpZGF0ZVBvb2xTaXplID09PSAnbnVtYmVyJykge1xuICAgICAgcnRjQ29uZmlndXJhdGlvbi5pY2VDYW5kaWRhdGVQb29sU2l6ZSA9IGNvbmZpZ3VyYXRpb24uaWNlQ2FuZGlkYXRlUG9vbFNpemU7XG4gICAgfVxuXG4gICAgaWYgKGNvbmZpZ3VyYXRpb24uaWNlU2VydmVycykge1xuICAgICAgY29uc3QgaWNlU2VydmVyczogUlRDSWNlU2VydmVyW10gPSBbXTtcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb25maWd1cmF0aW9uLmljZVNlcnZlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWNlU2VydmVycy5wdXNoKHtcbiAgICAgICAgICB1cmxzOiBjb25maWd1cmF0aW9uLmljZVNlcnZlcnNbaV0udXJscyxcbiAgICAgICAgICB1c2VybmFtZTogY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzW2ldLnVzZXJuYW1lLFxuICAgICAgICAgIGNyZWRlbnRpYWw6IGNvbmZpZ3VyYXRpb24uaWNlU2VydmVyc1tpXS5jcmVkZW50aWFsXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBydGNDb25maWd1cmF0aW9uLmljZVNlcnZlcnMgPSBpY2VTZXJ2ZXJzO1xuICAgIH1cblxuICAgIGlmIChjb25maWd1cmF0aW9uLmljZVRyYW5zcG9ydFBvbGljeSkge1xuICAgICAgcnRjQ29uZmlndXJhdGlvbi5pY2VUcmFuc3BvcnRQb2xpY3kgPSBjb25maWd1cmF0aW9uLmljZVRyYW5zcG9ydFBvbGljeTtcbiAgICB9XG5cbiAgICBpZiAoY29uZmlndXJhdGlvbi5ydGNwTXV4UG9saWN5KSB7XG4gICAgICBydGNDb25maWd1cmF0aW9uLnJ0Y3BNdXhQb2xpY3kgPSBjb25maWd1cmF0aW9uLnJ0Y3BNdXhQb2xpY3k7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJ0Y0NvbmZpZ3VyYXRpb247XG4gIH1cbiAgcHJpdmF0ZSBhc3luYyBjb252ZXJ0SHR0cFJlc3BvbnNlVG9TZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlKHJlc3BvbnNlOiBSZXNwb25zZSk6IFByb21pc2U8SVNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKSBhcyBJU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZTtcbiAgICBjb25zdCBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlOiBJU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZUluaXQgPSB7c3RhdHVzOiBkYXRhLnN0YXR1c307XG5cbiAgICBpZiAoZGF0YSAmJiBkYXRhLnNlc3Npb25EZXNjcmlwdGlvbikge1xuICAgICAgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24gPSBkYXRhLnNlc3Npb25EZXNjcmlwdGlvbjtcbiAgICB9XG5cbiAgICByZXR1cm4gc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY29udmVydEh0dHBSZXNwb25zZVRvQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlKHJlc3BvbnNlOiBSZXNwb25zZSk6IFByb21pc2U8SUFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpIGFzIElBZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2U7XG4gICAgY29uc3QgYWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlOiBJQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlSW5pdCA9IHtcbiAgICAgIHN0YXR1czogZGF0YS5zdGF0dXMsXG4gICAgICBvcHRpb25zOiBbXVxuICAgIH07XG5cbiAgICBpZiAoZGF0YSkge1xuICAgICAgaWYgKGRhdGEub3B0aW9ucykge1xuICAgICAgICBhZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2Uub3B0aW9ucyA9IGRhdGEub3B0aW9ucztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gYWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjb252ZXJ0SHR0cFJlc3BvbnNlVG9EZXN0cm95U3RyZWFtUmVzcG9uc2UocmVzcG9uc2U6IFJlc3BvbnNlKTogUHJvbWlzZTxJRGVzdHJveVN0cmVhbVJlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCkgYXMgSURlc3Ryb3lTdHJlYW1SZXNwb25zZTtcbiAgICBjb25zdCBkZXN0cm95U3RyZWFtOiBJRGVzdHJveVN0cmVhbVJlc3BvbnNlSW5pdCA9IHtzdGF0dXM6IGRhdGEuc3RhdHVzfTtcblxuICAgIHJldHVybiBkZXN0cm95U3RyZWFtO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5pbXBvcnQgUmVhZE9ubHlTdWJqZWN0IGZyb20gJy4uLy4uL3J4L1JlYWRPbmx5U3ViamVjdCc7XG5pbXBvcnQgRXhwb25lbnRpYWxCYWNrb2ZmIGZyb20gJy4uLy4uL3RpbWUvRXhwb25lbnRpYWxCYWNrb2ZmJztcbmltcG9ydCBFbmRQb2ludCwge0lTdHJlYW19IGZyb20gJy4uL2Rpc2NvdmVyeS9FbmRQb2ludCc7XG5pbXBvcnQgU0RLIGZyb20gJy4uL1NESyc7XG5pbXBvcnQgR2FyYmFnZUNvbGxlY3Rvck1hbmFnZXIgZnJvbSAnLi4vLi4vZG9tL0dhcmJhZ2VDb2xsZWN0b3JNYW5hZ2VyJztcbmltcG9ydCBJUGVlckNvbm5lY3Rpb24gZnJvbSAnLi4vLi4vcnRjL0lQZWVyQ29ubmVjdGlvbic7XG5pbXBvcnQgUHVibGlzaGVyU3RhdGUgZnJvbSAnLi9QdWJsaXNoZXJTdGF0ZSc7XG5pbXBvcnQgYXNzZXJ0VW5yZWFjaGFibGUgZnJvbSAnLi4vLi4vbGFuZy9hc3NlcnRVbnJlYWNoYWJsZSc7XG5pbXBvcnQgRGlzcG9zYWJsZSBmcm9tICcuLi8uLi9sYW5nL0Rpc3Bvc2FibGUnO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBTZXNzaW9uVGVsZW1ldHJ5IGZyb20gJy4uLy4uL3ZpZGVvL1Nlc3Npb25UZWxlbWV0cnknO1xuaW1wb3J0IHtJUnRjTW9uaXRvclN0YXRpc3RpY30gZnJvbSAnLi4vLi4vcnRjL1J0Y0Nvbm5lY3Rpb25Nb25pdG9yJztcbmltcG9ydCBFZGdlQXV0aFBhcnNlciBmcm9tICcuLi8uLi9lZGdlQXV0aC9FZGdlQXV0aFBhcnNlcic7XG5pbXBvcnQge0VuY29kZWRFZGdlVG9rZW59IGZyb20gJy4uLy4uL2VkZ2VBdXRoL0VuY29kZWRFZGdlVG9rZW4nO1xuXG5pbXBvcnQgVG9rZW5Db250ZXh0IGZyb20gJy4uL2NvbnRleHQvVG9rZW5Db250ZXh0JztcbmltcG9ydCBQdWJsaXNoZXJDb250ZXh0IGZyb20gJy4vUHVibGlzaGVyQ29udGV4dCc7XG5pbXBvcnQgUGVlckNvbm5lY3Rpb25Db250ZXh0IGZyb20gJy4uL2NvbnRleHQvUGVlckNvbm5lY3Rpb25Db250ZXh0JztcbmltcG9ydCBTdGF0ZUNvbnRleHQgZnJvbSAnLi4vY29udGV4dC9TdGF0ZUNvbnRleHQnO1xuaW1wb3J0IERpc2NvdmVyeSBmcm9tICcuLi9kaXNjb3ZlcnkvRGlzY292ZXJ5JztcbmltcG9ydCBEaXNjb3ZlcnlVcmkgZnJvbSAnLi4vZGlzY292ZXJ5L0Rpc2NvdmVyeVVyaSc7XG5pbXBvcnQgTWV0cmljc0ZhY3RvcnkgZnJvbSAnLi4vLi4vbWV0cmljcy9NZXRyaWNzRmFjdG9yeSc7XG5pbXBvcnQgTWV0cmljc1NlcnZpY2UgZnJvbSAnLi4vLi4vbWV0cmljcy9NZXRyaWNzU2VydmljZSc7XG5pbXBvcnQgUmVhbFRpbWVQdWJsaXNoZXIgZnJvbSAnLi9SZWFsVGltZVB1Ymxpc2hlcic7XG5pbXBvcnQgRmVhdHVyZUVuYWJsZW1lbnQgZnJvbSAnLi4vLi4vZW52aXJvbm1lbnQvRmVhdHVyZUVuYWJsZW1lbnQnO1xuXG5jb25zdCBkZWZhdWx0U3RyZWFtVGVybWluYXRpb25SZWFzb24gPSAnY2xpZW50OnRlcm1pbmF0aW9uJztcbmNvbnN0IGZhaWx1cmVDb3VudENsZWFuVXBJbnRlcnZhbEluTWlsbGlzZWNvbmRzID0gMzAwMDtcbmNvbnN0IHN0YW5kYnlQb2xsaW5nSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcyA9IDE1MDAwO1xuY29uc3Qgb25lSG91ckluTWlsbGlzZWNvbmRzID0gMzYwMCAqIDEwMDA7XG5jb25zdCBtYXhSZWNvbm5lY3RpbmdBdHRlbXB0c0ludGVydmFsSW5NaWxsaXNlY29uZHMgPSAyICogb25lSG91ckluTWlsbGlzZWNvbmRzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQdWJsaXNoZXIgaW1wbGVtZW50cyBJRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdQdWJsaXNoZXInKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfdG9rZW5Db250ZXh0OiBUb2tlbkNvbnRleHQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3B1Ymxpc2hlckNvbnRleHQ6IFB1Ymxpc2hlckNvbnRleHQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BlZXJDb25uZWN0aW9uQ29udGV4dDogUGVlckNvbm5lY3Rpb25Db250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdGF0ZUNvbnRleHQ6IFN0YXRlQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfZXhwb25lbnRpYWxCYWNrb2ZmOiBFeHBvbmVudGlhbEJhY2tvZmY7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3B1Ymxpc2hlclN0YXJ0VGltZTogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVRva2VuOiBSZWFkT25seVN1YmplY3Q8RW5jb2RlZEVkZ2VUb2tlbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5UGVlckNvbm5lY3Rpb246IFJlYWRPbmx5U3ViamVjdDxJUGVlckNvbm5lY3Rpb24+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVN0YXRlOiBSZWFkT25seVN1YmplY3Q8UHVibGlzaGVyU3RhdGU+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVRva2VuRXhwaXJpbmc6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlBdXRob3JpemVkOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5T25saW5lOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5TG9hZGluZzogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVB1Ymxpc2hpbmc6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlTdGFuZGJ5OiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5U3RvcHBlZDogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUZhaWx1cmVDb3VudDogUmVhZE9ubHlTdWJqZWN0PG51bWJlcj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5RW5kUG9pbnQ6IFJlYWRPbmx5U3ViamVjdDxFbmRQb2ludD47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5U3RyZWFtOiBSZWFkT25seVN1YmplY3Q8SVN0cmVhbT47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5UnRjU3RhdGlzdGljczogUmVhZE9ubHlTdWJqZWN0PElSdGNNb25pdG9yU3RhdGlzdGljPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlNZWRpYVN0cmVhbTogUmVhZE9ubHlTdWJqZWN0PE1lZGlhU3RyZWFtPjtcblxuICBwcml2YXRlIF9tZXRyaWNzU2VydmljZTogTWV0cmljc1NlcnZpY2U7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3Nlc3Npb25UZWxlbWV0cnk6IFNlc3Npb25UZWxlbWV0cnk7XG5cbiAgY29uc3RydWN0b3IobWVkaWFTdHJlYW06IE1lZGlhU3RyZWFtLCB0b2tlbjogRW5jb2RlZEVkZ2VUb2tlbiwgbmFtZT86IHN0cmluZykge1xuICAgIHRoaXMuX3Rva2VuQ29udGV4dCA9IG5ldyBUb2tlbkNvbnRleHQodG9rZW4pO1xuICAgIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQgPSBuZXcgUHVibGlzaGVyQ29udGV4dChuYW1lKTtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQgPSBuZXcgUGVlckNvbm5lY3Rpb25Db250ZXh0KCk7XG4gICAgdGhpcy5fc3RhdGVDb250ZXh0ID0gbmV3IFN0YXRlQ29udGV4dCgpO1xuICAgIHRoaXMuX2V4cG9uZW50aWFsQmFja29mZiA9IG5ldyBFeHBvbmVudGlhbEJhY2tvZmYoKTtcbiAgICB0aGlzLl9wdWJsaXNoZXJTdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgIHRoaXMuX3JlYWRPbmx5VG9rZW4gPSBuZXcgUmVhZE9ubHlTdWJqZWN0PHN0cmluZz4odGhpcy5fdG9rZW5Db250ZXh0LnRva2VuKTtcbiAgICB0aGlzLl9yZWFkT25seVBlZXJDb25uZWN0aW9uID0gbmV3IFJlYWRPbmx5U3ViamVjdDxJUGVlckNvbm5lY3Rpb24+KHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvbik7XG4gICAgdGhpcy5fcmVhZE9ubHlTdGF0ZSA9IG5ldyBSZWFkT25seVN1YmplY3Q8UHVibGlzaGVyU3RhdGU+KHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RhdGUpO1xuICAgIHRoaXMuX3JlYWRPbmx5VG9rZW5FeHBpcmluZyA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4odGhpcy5fdG9rZW5Db250ZXh0LnRva2VuRXhwaXJpbmcpO1xuICAgIHRoaXMuX3JlYWRPbmx5QXV0aG9yaXplZCA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4odGhpcy5fcHVibGlzaGVyQ29udGV4dC5hdXRob3JpemVkKTtcbiAgICB0aGlzLl9yZWFkT25seU9ubGluZSA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4odGhpcy5fcHVibGlzaGVyQ29udGV4dC5vbmxpbmUpO1xuICAgIHRoaXMuX3JlYWRPbmx5TG9hZGluZyA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4odGhpcy5fcHVibGlzaGVyQ29udGV4dC5sb2FkaW5nKTtcbiAgICB0aGlzLl9yZWFkT25seVB1Ymxpc2hpbmcgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX3B1Ymxpc2hlckNvbnRleHQucHVibGlzaGluZyk7XG4gICAgdGhpcy5fcmVhZE9ubHlTdGFuZGJ5ID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0YW5kYnkpO1xuICAgIHRoaXMuX3JlYWRPbmx5U3RvcHBlZCA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4odGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdG9wcGVkKTtcbiAgICB0aGlzLl9yZWFkT25seUZhaWx1cmVDb3VudCA9IG5ldyBSZWFkT25seVN1YmplY3Q8bnVtYmVyPih0aGlzLl9wdWJsaXNoZXJDb250ZXh0LmZhaWx1cmVDb3VudCk7XG4gICAgdGhpcy5fcmVhZE9ubHlFbmRQb2ludCA9IG5ldyBSZWFkT25seVN1YmplY3Q8RW5kUG9pbnQ+KHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuZW5kUG9pbnQpO1xuICAgIHRoaXMuX3JlYWRPbmx5U3RyZWFtID0gbmV3IFJlYWRPbmx5U3ViamVjdDxJU3RyZWFtPih0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0cmVhbSk7XG4gICAgdGhpcy5fcmVhZE9ubHlSdGNTdGF0aXN0aWNzID0gbmV3IFJlYWRPbmx5U3ViamVjdDxJUnRjTW9uaXRvclN0YXRpc3RpYz4odGhpcy5fcHVibGlzaGVyQ29udGV4dC5ydGNTdGF0aXN0aWNzKTtcbiAgICB0aGlzLl9yZWFkT25seU1lZGlhU3RyZWFtID0gbmV3IFJlYWRPbmx5U3ViamVjdDxNZWRpYVN0cmVhbT4odGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0Lm1lZGlhU3RyZWFtKTtcblxuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5tZWRpYVN0cmVhbS52YWx1ZSA9IG1lZGlhU3RyZWFtO1xuXG4gICAgY29uc3QgZWRnZVRva2VuID0gRWRnZUF1dGhQYXJzZXIucGFyc2VUb2tlbih0aGlzLl90b2tlbkNvbnRleHQudG9rZW4udmFsdWUpO1xuICAgIGNvbnN0IGRpc2NvdmVyeVVyaSA9IChlZGdlVG9rZW4udXJpIHx8IFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpLnRvU3RyaW5nKCk7XG5cbiAgICBTREsudGVuYW5jeS52YWx1ZSA9IGVkZ2VUb2tlbi50ZW5hbmN5IHx8IFNESy50ZW5hbmN5LnZhbHVlO1xuICAgIERpc2NvdmVyeVVyaS51cmkudmFsdWUgPSBkaXNjb3ZlcnlVcmk7XG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UgPSBNZXRyaWNzRmFjdG9yeS5nZXRNZXRyaWNzU2VydmljZShkaXNjb3ZlcnlVcmkpO1xuICAgIHRoaXMuX3Nlc3Npb25UZWxlbWV0cnkgPSBuZXcgU2Vzc2lvblRlbGVtZXRyeShTREsucGFnZUxvYWRUaW1lLCB0aGlzLl9tZXRyaWNzU2VydmljZSk7XG4gICAgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5wdWJsaXNoZXJEaXNwb3NhYmxlcy5hZGQodGhpcy5fc2Vzc2lvblRlbGVtZXRyeSk7XG5cbiAgICB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnB1Ymxpc2hlckRpc3Bvc2FibGVzLmFkZChcbiAgICAgIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RhdGUuc3Vic2NyaWJlKHN0YXRlID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuY2xlYXJGYWlsdXJlQ291bnRUaW1lb3V0KSB7XG4gICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuY2xlYXJGYWlsdXJlQ291bnRUaW1lb3V0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5fcHVibGlzaGVyQ29udGV4dC5mYWlsdXJlQ291bnQudmFsdWUpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3RhdGUgIT09IFB1Ymxpc2hlclN0YXRlLlB1Ymxpc2hpbmcpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LmNsZWFyRmFpbHVyZUNvdW50VGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LmZhaWx1cmVDb3VudC52YWx1ZSA9IDA7XG4gICAgICAgIH0sIGZhaWx1cmVDb3VudENsZWFuVXBJbnRlcnZhbEluTWlsbGlzZWNvbmRzKTtcbiAgICAgIH0pKTtcblxuICAgIGNvbnN0IGRlc3Ryb3lTdHJlYW1PblVubW91bnQgPSAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdHJlYW0udmFsdWUgJiYgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5lbmRQb2ludC52YWx1ZSkge1xuICAgICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5fcHVibGlzaGVyQ29udGV4dC5lbmRQb2ludC52YWx1ZS5kZXN0cm95U3RyZWFtT25Vbm1vdW50KHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RyZWFtLnZhbHVlLCAnY2xpZW50OnRlcm1pbmF0aW9uLW9uLXdpbmRvdy11bmxvYWQnKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2JlZm9yZXVubG9hZCcsIGRlc3Ryb3lTdHJlYW1PblVubW91bnQpO1xuXG4gICAgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5wdWJsaXNoZXJEaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4ge1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2JlZm9yZXVubG9hZCcsIGRlc3Ryb3lTdHJlYW1PblVubW91bnQpO1xuICAgIH0pKTtcblxuICAgIHRoaXMuc3RhcnQoKTtcbiAgfVxuXG4gIGdldCB0b2tlbigpOiBFbmNvZGVkRWRnZVRva2VuIHtcbiAgICByZXR1cm4gdGhpcy5fdG9rZW5Db250ZXh0LnRva2VuLnZhbHVlO1xuICB9XG5cbiAgc2V0IHRva2VuKHRva2VuOiBFbmNvZGVkRWRnZVRva2VuKSB7XG4gICAgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5kaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG5cbiAgICB0aGlzLl90b2tlbkNvbnRleHQudG9rZW4udmFsdWUgPSB0b2tlbjtcbiAgICB0aGlzLl90b2tlbkNvbnRleHQudG9rZW5FeHBpcmluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgY29uc3QgZWRnZVRva2VuID0gRWRnZUF1dGhQYXJzZXIucGFyc2VUb2tlbih0aGlzLl90b2tlbkNvbnRleHQudG9rZW4udmFsdWUpO1xuICAgIGNvbnN0IGRpc2NvdmVyeVVyaSA9IChlZGdlVG9rZW4udXJpIHx8IFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpLnRvU3RyaW5nKCk7XG5cbiAgICBTREsudGVuYW5jeS52YWx1ZSA9IGVkZ2VUb2tlbi50ZW5hbmN5IHx8IFNESy50ZW5hbmN5LnZhbHVlO1xuICAgIERpc2NvdmVyeVVyaS51cmkudmFsdWUgPSBkaXNjb3ZlcnlVcmk7XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZSA9IE1ldHJpY3NGYWN0b3J5LmdldE1ldHJpY3NTZXJ2aWNlKGRpc2NvdmVyeVVyaSk7XG5cbiAgICB0aGlzLnN0YXJ0KCk7XG4gIH1cblxuICBnZXQgcGVlckNvbm5lY3Rpb24oKTogUmVhZE9ubHlTdWJqZWN0PElQZWVyQ29ubmVjdGlvbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVBlZXJDb25uZWN0aW9uO1xuICB9XG5cbiAgZ2V0IHN0YXRlKCk6IFJlYWRPbmx5U3ViamVjdDxQdWJsaXNoZXJTdGF0ZT4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVN0YXRlO1xuICB9XG5cbiAgZ2V0IHRva2VuRXhwaXJpbmcoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlUb2tlbkV4cGlyaW5nO1xuICB9XG5cbiAgZ2V0IGF1dGhvcml6ZWQoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlBdXRob3JpemVkO1xuICB9XG5cbiAgZ2V0IG9ubGluZSgpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seU9ubGluZTtcbiAgfVxuXG4gIGdldCBsb2FkaW5nKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5TG9hZGluZztcbiAgfVxuXG4gIGdldCBwdWJsaXNoaW5nKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5UHVibGlzaGluZztcbiAgfVxuXG4gIGdldCBzdGFuZGJ5KCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5U3RhbmRieTtcbiAgfVxuXG4gIGdldCBzdG9wcGVkKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5U3RvcHBlZDtcbiAgfVxuXG4gIGdldCBmYWlsdXJlQ291bnQoKTogUmVhZE9ubHlTdWJqZWN0PG51bWJlcj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seUZhaWx1cmVDb3VudDtcbiAgfVxuXG4gIGdldCBlbmRQb2ludCgpOiBSZWFkT25seVN1YmplY3Q8RW5kUG9pbnQ+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlFbmRQb2ludDtcbiAgfVxuXG4gIGdldCBzdHJlYW0oKTogUmVhZE9ubHlTdWJqZWN0PElTdHJlYW0+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlTdHJlYW07XG4gIH1cblxuICBnZXQgc3RyZWFtSWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdHJlYW1JZDtcbiAgfVxuXG4gIGdldCBydGNTdGF0aXN0aWNzKCk6IFJlYWRPbmx5U3ViamVjdDxJUnRjTW9uaXRvclN0YXRpc3RpYz4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVJ0Y1N0YXRpc3RpY3M7XG4gIH1cblxuICBnZXQgbWVkaWFTdHJlYW0oKTogUmVhZE9ubHlTdWJqZWN0PE1lZGlhU3RyZWFtPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5TWVkaWFTdHJlYW07XG4gIH1cblxuICBhc3luYyBzdG9wKHJlYXNvbjogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgaWYgKCF0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSkge1xuICAgICAgICB0aGlzLnByb2Nlc3NTdG9wKHJlYXNvbik7XG5cbiAgICAgICAgcmVzb2x2ZSgpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5kaXNwb3NhYmxlcy5hZGQodGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcuc3Vic2NyaWJlKGlzU3RhcnRpbmcgPT4ge1xuICAgICAgICBpZiAoIWlzU3RhcnRpbmcpIHtcbiAgICAgICAgICB0aGlzLnByb2Nlc3NTdG9wKHJlYXNvbik7XG4gICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9XG4gICAgICB9KSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHByb2Nlc3NTdG9wKHJlYXNvbjogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5jbGVhblVwUmVzb3VyY2VzKHJlYXNvbik7XG5cbiAgICBpZiAodGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlKSB7XG4gICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWUuY2xvc2UoKTtcbiAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZSA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdGF0ZS52YWx1ZSA9IFB1Ymxpc2hlclN0YXRlLlN0b3BwZWQ7XG4gIH1cblxuICBhc3luYyBkaXNwb3NlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLnN0b3AoJ2NsaWVudDpjaGFubmVsLWRpc3Bvc2UnKS50aGVuKCgpID0+IHtcbiAgICAgIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQucHVibGlzaGVyRGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzRGlzcG9zZWQgPSB0cnVlO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0VXJpKHRva2VuOiBFbmNvZGVkRWRnZVRva2VuKTogVVJMIHtcbiAgICBjb25zdCB1cmwgPSBFZGdlQXV0aFBhcnNlci5wYXJzZVRva2VuKHRva2VuKS51cmk7XG5cbiAgICBpZiAodXJsKSB7XG4gICAgICByZXR1cm4gdXJsO1xuICAgIH1cblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdGYWxsIGJhY2sgdG8gdGhlIGRlZmF1bHQgZGlzY292ZXIgVVJJIFslc10nLCBTREsuZGlzY292ZXJ5VXJpLnZhbHVlKTtcblxuICAgIHJldHVybiBuZXcgVVJMKFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpO1xuICB9XG5cbiAgYXN5bmMgc3RhcnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX3N0YXRlQ29udGV4dC5pc0Rpc3Bvc2VkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NoYW5uZWwgd2FzIGFscmVhZHkgZGlzcG9zZWQnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdQdWJsaXNoZXIgaXMgYWxyZWFkeSBzdGFydGluZywgc2tpcHBpbmcgc3RhcnQnKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlID0gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzLnByb2Nlc3NTdGFydCgpO1xuICB9XG5cbiAgc2V0TWVkaWFTdHJlYW0obWVkaWFTdHJlYW06IE1lZGlhU3RyZWFtKSB7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlID0gbWVkaWFTdHJlYW07XG5cbiAgICBpZiAodGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlKSB7XG4gICAgICBtZWRpYVN0cmVhbS5nZXRUcmFja3MoKS5mb3JFYWNoKG1lZGlhVHJhY2sgPT4ge1xuICAgICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWUuZ2V0U2VuZGVycygpLmZvckVhY2goc2VuZGVyID0+IHtcbiAgICAgICAgICBpZiAobWVkaWFUcmFjay5raW5kID09PSBzZW5kZXI/LnRyYWNrPy5raW5kICYmIG1lZGlhVHJhY2suaWQgIT09IHNlbmRlci50cmFjay5pZCkge1xuICAgICAgICAgICAgc2VuZGVyLnJlcGxhY2VUcmFjayhtZWRpYVRyYWNrKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBwcm9jZXNzU3RhcnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdG9rZW46IEVuY29kZWRFZGdlVG9rZW4gPSB0aGlzLl90b2tlbkNvbnRleHQudG9rZW4udmFsdWU7XG4gICAgY29uc3QgbGlzdGVuT25TdHJlYW1TZXR1cCA9IHRoaXMuX3Nlc3Npb25UZWxlbWV0cnkubGlzdGVuT25TdHJlYW1TZXR1cCgpO1xuXG4gICAgaWYgKCFFZGdlQXV0aFBhcnNlci5pc0VuY29kZWRFZGdlVG9rZW5WYWxpZCh0b2tlbikpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHBhcnNlIHRva2VuIFslc10nLCB0b2tlbik7XG4gICAgICB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0YXRlLnZhbHVlID0gUHVibGlzaGVyU3RhdGUuVW5hdXRob3JpemVkO1xuICAgICAgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5hdXRob3JpemVkLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5jbGVhblVwUmVzb3VyY2VzKCdjbGllbnQ6c3RhcnQnKTtcbiAgICB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0YXRlLnZhbHVlID0gUHVibGlzaGVyU3RhdGUuU3RhcnRpbmc7XG4gICAgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gdHJ1ZTtcblxuICAgIGNvbnN0IHVyaSA9IHRoaXMuZ2V0VXJpKHRva2VuKTtcblxuICAgIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuZGlzcG9zYWJsZXMuYWRkKFxuICAgICAgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdGF0ZS5zdWJzY3JpYmUoc3RhdGUgPT4ge1xuICAgICAgICBpZiAoc3RhdGUgPT09IFB1Ymxpc2hlclN0YXRlLkVycm9yIHx8IHN0YXRlID09PSBQdWJsaXNoZXJTdGF0ZS5SZWNvdmVyaW5nKSB7XG4gICAgICAgICAgRGlzY292ZXJ5LmNsZWFyQ2FjaGVkQ2xvc2VzdEVuZHBvaW50KHVyaSk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcblxuICAgIGNvbnN0IGhhbmRsZVN0cmVhbUZhaWx1cmVDYWxsYmFjazogKCkgPT4gUHJvbWlzZTx2b2lkPiA9ICgpID0+IG5ldyBQcm9taXNlKChyZXNvbHZlKTogdm9pZCA9PiB7XG4gICAgICAvLyBOZWVkIHRvIHNldCBpc1N0YXJ0aW5nIHRvIGZhbHNlIGFuZCBjYWxsIGhhbmRsZVN0cmVhbUZhaWx1cmUgaWYgc3RyZWFtIG1vbml0b3JzIGZvdW5kIGFuIGlzc3VlXG4gICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICByZXR1cm4gcmVzb2x2ZSh0aGlzLmhhbmRsZVN0cmVhbUZhaWx1cmUoKSk7XG4gICAgfSk7XG4gICAgY29uc3Qgc3RyZWFtUHVibGlzaGVyID0gbmV3IFJlYWxUaW1lUHVibGlzaGVyKHRoaXMuX3B1Ymxpc2hlckNvbnRleHQsIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dCwgaGFuZGxlU3RyZWFtRmFpbHVyZUNhbGxiYWNrKTtcblxuICAgIHJldHVybiBzdHJlYW1QdWJsaXNoZXIuc3RhcnQoXG4gICAgICB1cmksXG4gICAgICB0b2tlbixcbiAgICAgIGxpc3Rlbk9uU3RyZWFtU2V0dXApXG4gICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQubG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgbGlzdGVuT25TdHJlYW1TZXR1cC5mYWlsKCk7XG5cbiAgICAgICAgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5mYWlsdXJlQ291bnQudmFsdWUrKztcblxuICAgICAgICB0aGlzLl9wdWJsaXNoZXJDb250ZXh0Lm9ubGluZS52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMuY2xlYW5VcFJlc291cmNlcygnY2xpZW50OmNsZWFudXAtYWZ0ZXItZmFpbGVkLXNldHVwJyk7XG5cbiAgICAgICAgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdGF0ZS52YWx1ZSA9IFB1Ymxpc2hlclN0YXRlLkNsaWVudFN0YXJ0RXJyb3I7XG5cbiAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gc3RhcnQgcHVibGlzaGluZycsIGUpO1xuICAgICAgfSlcbiAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICBpZiAodGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdGF0ZS52YWx1ZSA9PT0gUHVibGlzaGVyU3RhdGUuUHVibGlzaGluZyB8fCAhU0RLLmF1dG9tYXRpY1JldHJ5T25GYWlsdXJlKSB7XG4gICAgICAgICAgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdGFydFJlY29ubmVjdGlvbkF0dGVtcHRzVGltZUluTWlsbGlzZWNvbmRzID0gMDtcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLmhhbmRsZVN0cmVhbUZhaWx1cmUoKVxuICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCBoYW5kbGluZyBzdHJlYW0gZmFpbHVyZScsIGUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIHRoaXMuZ2V0UmV0cnlJbnRlcnZhbCgpKTtcblxuICAgICAgICB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LmRpc3Bvc2FibGVzLmFkZChuZXcgRGlzcG9zYWJsZSgoKSA9PiB7XG4gICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG4gICAgICAgIH0pKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRSZXRyeUludGVydmFsKCk6IG51bWJlciB7XG4gICAgc3dpdGNoICh0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0YXRlLnZhbHVlKSB7XG4gICAgICBjYXNlIFB1Ymxpc2hlclN0YXRlLk9mZmxpbmU6XG4gICAgICAgIHJldHVybiBzdGFuZGJ5UG9sbGluZ0ludGVydmFsSW5NaWxsaXNlY29uZHM7XG4gICAgICBjYXNlIFB1Ymxpc2hlclN0YXRlLk5vdEZvdW5kOlxuICAgICAgY2FzZSBQdWJsaXNoZXJTdGF0ZS5FcnJvcjpcbiAgICAgIGNhc2UgUHVibGlzaGVyU3RhdGUuUmVjb3ZlcmluZzpcbiAgICAgIGNhc2UgUHVibGlzaGVyU3RhdGUuVW5hdXRob3JpemVkOlxuICAgICAgY2FzZSBQdWJsaXNoZXJTdGF0ZS5HZW9SZXN0cmljdGVkOlxuICAgICAgY2FzZSBQdWJsaXNoZXJTdGF0ZS5HZW9CbG9ja2VkOlxuICAgICAgY2FzZSBQdWJsaXNoZXJTdGF0ZS5TdG9wcGVkOlxuICAgICAgY2FzZSBQdWJsaXNoZXJTdGF0ZS5TdGFydGluZzpcbiAgICAgIGNhc2UgUHVibGlzaGVyU3RhdGUuUHVibGlzaGluZzpcbiAgICAgIGNhc2UgUHVibGlzaGVyU3RhdGUuUmVjb25uZWN0aW5nOlxuICAgICAgY2FzZSBQdWJsaXNoZXJTdGF0ZS5VbnN1cHBvcnRlZEZlYXR1cmU6XG4gICAgICBjYXNlIFB1Ymxpc2hlclN0YXRlLkNvbmZpZ3VyYXRpb25FcnJvcjpcbiAgICAgIGNhc2UgUHVibGlzaGVyU3RhdGUuVHJhbnNpZW50Q29uZmlndXJhdGlvbkVycm9yOlxuICAgICAgY2FzZSBQdWJsaXNoZXJTdGF0ZS5Db25uZWN0aW9uRXJyb3I6XG4gICAgICBjYXNlIFB1Ymxpc2hlclN0YXRlLkNsaWVudFN0YXJ0RXJyb3I6XG4gICAgICAgIC8vIEZpcnN0IGFuZCBzZWNvbmQgYXR0ZW1wdCBmYXN0LCBhZnRlciB0aGF0IGV4cG9uZW50aWFsIHdpdGggYmFja29mZiBpbnRlcnZhbFxuICAgICAgICByZXR1cm4gdGhpcy5fZXhwb25lbnRpYWxCYWNrb2ZmLmdldEV4cG9uZW50aWFsQmFja29mZkludGVydmFsQnlGYWlsdXJlQ291bnQodGhpcy5fcHVibGlzaGVyQ29udGV4dC5mYWlsdXJlQ291bnQudmFsdWUpO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZSh0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0YXRlLnZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGhhbmRsZVN0cmVhbUZhaWx1cmUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgbGV0IHJlY29ubmVjdGluZ0F0dGVtcHRzSW50ZXJ2YWwgPSAwO1xuXG4gICAgc3dpdGNoICh0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0YXRlLnZhbHVlKSB7XG4gICAgICBjYXNlIFB1Ymxpc2hlclN0YXRlLkVycm9yOlxuICAgICAgY2FzZSBQdWJsaXNoZXJTdGF0ZS5SZWNvbm5lY3Rpbmc6XG4gICAgICBjYXNlIFB1Ymxpc2hlclN0YXRlLk9mZmxpbmU6XG4gICAgICBjYXNlIFB1Ymxpc2hlclN0YXRlLlJlY292ZXJpbmc6XG4gICAgICBjYXNlIFB1Ymxpc2hlclN0YXRlLlRyYW5zaWVudENvbmZpZ3VyYXRpb25FcnJvcjpcbiAgICAgIGNhc2UgUHVibGlzaGVyU3RhdGUuQ29ubmVjdGlvbkVycm9yOlxuICAgICAgY2FzZSBQdWJsaXNoZXJTdGF0ZS5DbGllbnRTdGFydEVycm9yOlxuICAgICAgICBpZiAoIXRoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RhcnRSZWNvbm5lY3Rpb25BdHRlbXB0c1RpbWVJbk1pbGxpc2Vjb25kcykge1xuICAgICAgICAgIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RhcnRSZWNvbm5lY3Rpb25BdHRlbXB0c1RpbWVJbk1pbGxpc2Vjb25kcyA9IERhdGUubm93KCk7XG4gICAgICAgIH1cblxuICAgICAgICByZWNvbm5lY3RpbmdBdHRlbXB0c0ludGVydmFsID0gRGF0ZS5ub3coKSAtIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RhcnRSZWNvbm5lY3Rpb25BdHRlbXB0c1RpbWVJbk1pbGxpc2Vjb25kcztcblxuICAgICAgICBpZiAobWF4UmVjb25uZWN0aW5nQXR0ZW1wdHNJbnRlcnZhbEluTWlsbGlzZWNvbmRzIDw9IHJlY29ubmVjdGluZ0F0dGVtcHRzSW50ZXJ2YWwpIHtcbiAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnUHVibGlzaGVyIHN0b3BwZWQgd2l0aCBzdGF0ZSBbJXNdIFslc10gYWZ0ZXIgZXhjZWVkaW5nIHRpbWVvdXQnLCB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0YXRlLnZhbHVlLCBQdWJsaXNoZXJTdGF0ZVt0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0YXRlLnZhbHVlXSk7XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnUmV0cnkgc3RhcnQgd2l0aCBpbml0aWFsIHN0YXRlIFslc10gWyVzXScsIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RhdGUudmFsdWUsIFB1Ymxpc2hlclN0YXRlW3RoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RhdGUudmFsdWVdKTtcblxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgUHVibGlzaGVyU3RhdGUuVW5hdXRob3JpemVkOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnUHVibGlzaGVyIGlzIHVuYXV0aG9yaXplZCwgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQuIFBsZWFzZSBwcm92aWRlIGEgbmV3IHRva2VuIGFuZCBpbnZva2Ugc3RhcnQoKScpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgUHVibGlzaGVyU3RhdGUuR2VvUmVzdHJpY3RlZDpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1B1Ymxpc2hlciBpcyBnZW8gcmVzdHJpY3RlZCwgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQuIFBsZWFzZSBwcm92aWRlIGEgbmV3IHRva2VuIGFuZCBpbnZva2Ugc3RhcnQoKScpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgUHVibGlzaGVyU3RhdGUuR2VvQmxvY2tlZDpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1B1Ymxpc2hlciBpcyBnZW8gYmxvY2tlZCwgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQuIFBsZWFzZSBwcm92aWRlIGEgbmV3IHRva2VuIGFuZCBpbnZva2Ugc3RhcnQoKScpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgUHVibGlzaGVyU3RhdGUuU3RvcHBlZDpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1B1Ymxpc2hlciBpcyBzdG9wcGVkLCBza2lwcGluZyByZXRyeSBvZiBzdGFydC4nKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIFB1Ymxpc2hlclN0YXRlLlB1Ymxpc2hpbmc6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdQdWJsaXNoZXIgaXMgcHVibGlzaGluZywgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQnKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIFB1Ymxpc2hlclN0YXRlLlN0YXJ0aW5nOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnUHVibGlzaGVyIGlzIGFscmVhZHkgc3RhcnRpbmcsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0Jyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSBQdWJsaXNoZXJTdGF0ZS5VbnN1cHBvcnRlZEZlYXR1cmU6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdQdWJsaXNoZXIgaXMgc3RvcHBlZCBkdWUgdG8gdW5zdXBwb3J0ZWQgZmVhdHVyZSwgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQuJyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSBQdWJsaXNoZXJTdGF0ZS5Ob3RGb3VuZDpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1B1Ymxpc2hlciBpcyBzdG9wcGVkIGR1ZSB0byBjaGFubmVsIG5vdCBmb3VuZCwgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQuJyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSBQdWJsaXNoZXJTdGF0ZS5Db25maWd1cmF0aW9uRXJyb3I6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdQdWJsaXNoZXIgaXMgc3RvcHBlZCBkdWUgdG8gY29uZmlndXJhdGlvbiBlcnJvciwgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQuJyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUodGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdGF0ZS52YWx1ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc3RhcnQoKTtcbiAgfVxuXG4gIHByaXZhdGUgY2xlYW5VcFJlc291cmNlcyhyZWFzb246IHN0cmluZyA9IGRlZmF1bHRTdHJlYW1UZXJtaW5hdGlvblJlYXNvbik6IHZvaWQge1xuICAgIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuZGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuXG4gICAgY29uc3QgcGVlckNvbm5lY3Rpb24gPSB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWU7XG5cbiAgICBpZiAocGVlckNvbm5lY3Rpb24pIHtcbiAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZSA9IG51bGw7XG4gICAgICBwZWVyQ29ubmVjdGlvbi5jbG9zZSgpO1xuICAgICAgcGVlckNvbm5lY3Rpb24uZGlzcG9zZSgpO1xuXG4gICAgICBpZiAoU0RLLmZvcmNlR2FyYmFnZUNvbGxlY3Rpb25PblJlc3RhcnQgJiYgIShGZWF0dXJlRW5hYmxlbWVudC5pc01vYmlsZSAmJiBTREsuc2tpcEdhcmJhZ2VDb2xsZWN0aW9uT25Nb2JpbGVEZXZpY2VzKSkge1xuICAgICAgICBHYXJiYWdlQ29sbGVjdG9yTWFuYWdlci5mb3JjZUdhcmJhZ2VDb2xsZWN0aW9uKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5wdWJsaXNoaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdG9wcGVkLnZhbHVlID0gdHJ1ZTtcbiAgICB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0YW5kYnkudmFsdWUgPSBmYWxzZTtcblxuICAgIGlmICh0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0cmVhbS52YWx1ZSAmJiB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LmVuZFBvaW50LnZhbHVlKSB7XG4gICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5fcHVibGlzaGVyQ29udGV4dC5lbmRQb2ludC52YWx1ZS5kZXN0cm95U3RyZWFtKHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RyZWFtLnZhbHVlLCByZWFzb24pXG4gICAgICAgIC50aGVuKCh7c3RhdHVzfSkgPT4ge1xuICAgICAgICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci53YXJuKCdbJXNdIEZhaWxlZCB0byBkZXN0cm95IHN0cmVhbSB3aXRoIHJlYXNvbiBbJXNdJywgdGhpcy5zdHJlYW1JZCwgc3RhdHVzKTtcblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIERlc3Ryb3llZCBzdHJlYW0gd2l0aCByZWFzb24gWyVzXScsIHRoaXMuc3RyZWFtSWQsIHN0YXR1cyk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ1slc10gRmFpbGVkIHRvIGRlc3Ryb3kgc3RyZWFtJywgdGhpcy5zdHJlYW1JZCwgZSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RyZWFtLnZhbHVlID0gbnVsbDtcbiAgICB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LmVuZFBvaW50LnZhbHVlID0gbnVsbDtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyA9IDA7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uLy4uL3J4L1N1YmplY3QnO1xuaW1wb3J0IFB1Ymxpc2hlclN0YXRlIGZyb20gJy4vUHVibGlzaGVyU3RhdGUnO1xuaW1wb3J0IEVuZFBvaW50LCB7SVN0cmVhbX0gZnJvbSAnLi4vZGlzY292ZXJ5L0VuZFBvaW50JztcbmltcG9ydCBhc3NlcnRVbnJlYWNoYWJsZSBmcm9tICcuLi8uLi9sYW5nL2Fzc2VydFVucmVhY2hhYmxlJztcbmltcG9ydCBEaXNwb3NhYmxlTGlzdCBmcm9tICcuLi8uLi9sYW5nL0Rpc3Bvc2FibGVMaXN0JztcbmltcG9ydCB7UHVibGlzaFN0YXR1c30gZnJvbSAnLi4vYXBpL1B1Ymxpc2gnO1xuaW1wb3J0IFN0cmluZ3MgZnJvbSAnLi4vLi4vbGFuZy9TdHJpbmdzJztcbmltcG9ydCB7SVJ0Y1B1Ymxpc2hNb25pdG9yU3RhdGlzdGljfSBmcm9tICcuLi8uLi9ydGMvUnRjUHVibGlzaE1vbml0b3InO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQdWJsaXNoZXJDb250ZXh0IHtcbiAgcHVibGlzaGVySW5pdGlhbGl6YXRpb246IERhdGU7XG4gIGRpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdDtcbiAgcHVibGlzaGVyRGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0O1xuICBzdGF0ZTogU3ViamVjdDxQdWJsaXNoZXJTdGF0ZT47XG4gIGF1dGhvcml6ZWQ6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIG9ubGluZTogU3ViamVjdDxib29sZWFuPjtcbiAgbG9hZGluZzogU3ViamVjdDxib29sZWFuPjtcbiAgcHVibGlzaGluZzogU3ViamVjdDxib29sZWFuPjtcbiAgc3RhbmRieTogU3ViamVjdDxib29sZWFuPjtcbiAgc3RvcHBlZDogU3ViamVjdDxib29sZWFuPjtcbiAgZmFpbHVyZUNvdW50OiBTdWJqZWN0PG51bWJlcj47XG4gIGVuZFBvaW50OiBTdWJqZWN0PEVuZFBvaW50PjtcbiAgc3RyZWFtOiBTdWJqZWN0PElTdHJlYW0+O1xuICBydGNTdGF0aXN0aWNzOiBTdWJqZWN0PElSdGNQdWJsaXNoTW9uaXRvclN0YXRpc3RpYz47XG4gIGNsZWFyRmFpbHVyZUNvdW50VGltZW91dDogbnVtYmVyO1xuICBzdGFydFJlY29ubmVjdGlvbkF0dGVtcHRzVGltZUluTWlsbGlzZWNvbmRzOiBudW1iZXI7XG4gIG5hbWU6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihuYW1lPzogc3RyaW5nKSB7XG4gICAgdGhpcy5kaXNwb3NhYmxlcyA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICAgIHRoaXMucHVibGlzaGVyRGlzcG9zYWJsZXMgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgICB0aGlzLnB1Ymxpc2hlckluaXRpYWxpemF0aW9uID0gbmV3IERhdGUoKTtcbiAgICB0aGlzLnN0YXRlID0gbmV3IFN1YmplY3Q8UHVibGlzaGVyU3RhdGU+KFB1Ymxpc2hlclN0YXRlLlN0YXJ0aW5nKTtcbiAgICB0aGlzLmF1dGhvcml6ZWQgPSBuZXcgU3ViamVjdDxib29sZWFuPih0cnVlKTtcbiAgICB0aGlzLm9ubGluZSA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xuICAgIHRoaXMubG9hZGluZyA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICB0aGlzLnB1Ymxpc2hpbmcgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy5zdGFuZGJ5ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHRoaXMuc3RvcHBlZCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICB0aGlzLmZhaWx1cmVDb3VudCA9IG5ldyBTdWJqZWN0PG51bWJlcj4oMCk7XG4gICAgdGhpcy5lbmRQb2ludCA9IG5ldyBTdWJqZWN0PEVuZFBvaW50PihudWxsKTtcbiAgICB0aGlzLnN0cmVhbSA9IG5ldyBTdWJqZWN0PElTdHJlYW0+KG51bGwpO1xuICAgIHRoaXMucnRjU3RhdGlzdGljcyA9IG5ldyBTdWJqZWN0PElSdGNQdWJsaXNoTW9uaXRvclN0YXRpc3RpYz4obnVsbCk7XG4gICAgdGhpcy5uYW1lID0gbmFtZSAmJiBuYW1lLmxlbmd0aCA/IG5hbWUgOiB0aGlzLmdlbmVyYXRlU2NyZWVuTmFtZSgpO1xuICAgIHRoaXMuc3RhcnRSZWNvbm5lY3Rpb25BdHRlbXB0c1RpbWVJbk1pbGxpc2Vjb25kcyA9IDA7XG4gIH1cblxuICBnZXQgc3RyZWFtSWQoKTogc3RyaW5nIHtcbiAgICBjb25zdCBzdHJlYW0gPSB0aGlzLnN0cmVhbS52YWx1ZTtcblxuICAgIGlmICghc3RyZWFtKSB7XG4gICAgICByZXR1cm4gJy0nO1xuICAgIH1cblxuICAgIHJldHVybiBzdHJlYW0uc3RyZWFtSWQ7XG4gIH1cblxuICBhcHBseVN0YXR1cyhzdGF0dXM6IFB1Ymxpc2hTdGF0dXMpOiB2b2lkIHtcbiAgICBzd2l0Y2ggKHN0YXR1cykge1xuICAgICAgY2FzZSAnb2snOlxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3VuYXV0aG9yaXplZCc6XG4gICAgICBjYXNlICdnZW8tcmVzdHJpY3RlZCc6XG4gICAgICBjYXNlICdnZW8tYmxvY2tlZCc6XG4gICAgICAgIHRoaXMuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZmFsbHRocm91Z2hcbiAgICAgIGNhc2UgJ25vdC1mb3VuZCc6XG4gICAgICAgIHRoaXMuZmFpbHVyZUNvdW50LnZhbHVlID0gMDtcbiAgICAgICAgdGhpcy5wdWJsaXNoaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc3RhbmRieS52YWx1ZSA9IHRydWU7XG4gICAgICAgIHRoaXMuc3RvcHBlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnN0cmVhbS52YWx1ZSA9IG51bGw7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhpcy5mYWlsdXJlQ291bnQudmFsdWUrKztcbiAgICAgICAgdGhpcy5wdWJsaXNoaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc3RhbmRieS52YWx1ZSA9IHRydWU7XG4gICAgICAgIHRoaXMuc3RvcHBlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnN0cmVhbS52YWx1ZSA9IG51bGw7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIG1hcFB1Ymxpc2hTdGF0dXNUb1B1Ymxpc2hlclN0YXR1cyhzdGF0dXM6IFB1Ymxpc2hTdGF0dXMpOiBQdWJsaXNoZXJTdGF0ZSB7XG4gICAgc3dpdGNoIChzdGF0dXMpIHtcbiAgICAgIGNhc2UgJ29rJzpcbiAgICAgICAgcmV0dXJuIFB1Ymxpc2hlclN0YXRlLlN0YXJ0aW5nO1xuICAgICAgY2FzZSAnbm90LWZvdW5kJzpcbiAgICAgICAgcmV0dXJuIFB1Ymxpc2hlclN0YXRlLk5vdEZvdW5kO1xuICAgICAgY2FzZSAnZ2VvLXJlc3RyaWN0ZWQnOlxuICAgICAgICByZXR1cm4gUHVibGlzaGVyU3RhdGUuR2VvUmVzdHJpY3RlZDtcbiAgICAgIGNhc2UgJ2dlby1ibG9ja2VkJzpcbiAgICAgICAgcmV0dXJuIFB1Ymxpc2hlclN0YXRlLkdlb0Jsb2NrZWQ7XG4gICAgICBjYXNlICd1bmF1dGhvcml6ZWQnOlxuICAgICAgICByZXR1cm4gUHVibGlzaGVyU3RhdGUuVW5hdXRob3JpemVkO1xuICAgICAgY2FzZSAnY2FwYWNpdHknOlxuICAgICAgY2FzZSAncmF0ZS1saW1pdGVkJzpcbiAgICAgIGNhc2UgJ3RpbWVvdXQnOlxuICAgICAgICByZXR1cm4gUHVibGlzaGVyU3RhdGUuUmVjb3ZlcmluZztcbiAgICAgIGNhc2UgJ21pc3NpbmctY2hhbm5lbC1vci1yb29tLWlkJzpcbiAgICAgIGNhc2UgJ2ZvcmJpZGRlbi10YWcnOlxuICAgICAgICByZXR1cm4gUHVibGlzaGVyU3RhdGUuQ29uZmlndXJhdGlvbkVycm9yO1xuICAgICAgY2FzZSAncG9ydC1pbi1yYW5nZS1ub3QtZm91bmQnOlxuICAgICAgICByZXR1cm4gUHVibGlzaGVyU3RhdGUuVHJhbnNpZW50Q29uZmlndXJhdGlvbkVycm9yO1xuICAgICAgY2FzZSAnZmFpbGVkJzpcbiAgICAgICAgcmV0dXJuIFB1Ymxpc2hlclN0YXRlLkVycm9yO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUoc3RhdHVzKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdlbmVyYXRlU2NyZWVuTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBTdHJpbmdzLnJhbmRvbSgxMik7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmVudW0gUHVibGlzaGVyU3RhdGUge1xuICBPZmZsaW5lID0gMSxcbiAgU3RhcnRpbmcsXG4gIFB1Ymxpc2hpbmcsXG4gIFJlY292ZXJpbmcsXG4gIFJlY29ubmVjdGluZyxcbiAgU3RvcHBlZCxcbiAgVW5hdXRob3JpemVkLFxuICBHZW9SZXN0cmljdGVkLFxuICBHZW9CbG9ja2VkLFxuICBVbnN1cHBvcnRlZEZlYXR1cmUsXG4gIE5vdEZvdW5kLFxuICBDb25maWd1cmF0aW9uRXJyb3IsXG4gIFRyYW5zaWVudENvbmZpZ3VyYXRpb25FcnJvcixcbiAgQ29ubmVjdGlvbkVycm9yLFxuICBDbGllbnRTdGFydEVycm9yLFxuICBFcnJvclxufVxuXG5leHBvcnQgZGVmYXVsdCBQdWJsaXNoZXJTdGF0ZTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IFNESyBmcm9tICcuLi9TREsnO1xuaW1wb3J0IHtFbmNvZGVkRWRnZVRva2VufSBmcm9tICcuLi8uLi9lZGdlQXV0aC9FbmNvZGVkRWRnZVRva2VuJztcbmltcG9ydCBQdWJsaXNoZXIgZnJvbSAnLi9QdWJsaXNoZXInO1xuXG50eXBlIENyZWF0ZVB1Ymxpc2hlck9wdGlvbnMgPSB7XG4gIG1lZGlhU3RyZWFtOiBNZWRpYVN0cmVhbTtcbiAgdG9rZW46IEVuY29kZWRFZGdlVG9rZW47XG4gIG5hbWU/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQdWJsaXNoZXJzIHtcbiAgc3RhdGljIGNyZWF0ZVB1Ymxpc2hlcihvcHRpb25zOiBDcmVhdGVQdWJsaXNoZXJPcHRpb25zKTogUHVibGlzaGVyIHtcbiAgICBpZiAoIVNESy5pbml0aWFsaXplZC52YWx1ZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTREsgaXMgbm90IGxvYWRlZC4nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFB1Ymxpc2hlcihvcHRpb25zLm1lZGlhU3RyZWFtLCBvcHRpb25zLnRva2VuLCBvcHRpb25zLm5hbWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1B1Ymxpc2hlcnMgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgYXNzZXJ0VW5yZWFjaGFibGUgZnJvbSAnLi4vLi4vbGFuZy9hc3NlcnRVbnJlYWNoYWJsZSc7XG5pbXBvcnQgRGlzcG9zYWJsZSBmcm9tICcuLi8uLi9sYW5nL0Rpc3Bvc2FibGUnO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcbmltcG9ydCBHYXJiYWdlQ29sbGVjdG9yTWFuYWdlciBmcm9tICcuLi8uLi9kb20vR2FyYmFnZUNvbGxlY3Rvck1hbmFnZXInO1xuaW1wb3J0IEZlYXR1cmVFbmFibGVtZW50IGZyb20gJy4uLy4uL2Vudmlyb25tZW50L0ZlYXR1cmVFbmFibGVtZW50JztcbmltcG9ydCB7U2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXN9IGZyb20gJy4uL2Rpc2NvdmVyeS9FbmRQb2ludCc7XG5pbXBvcnQgRGlzY292ZXJ5IGZyb20gJy4uL2Rpc2NvdmVyeS9EaXNjb3ZlcnknO1xuaW1wb3J0IElQZWVyQ29ubmVjdGlvbiBmcm9tICcuLi8uLi9ydGMvSVBlZXJDb25uZWN0aW9uJztcbmltcG9ydCBQZWVyQ29ubmVjdGlvblNlcnZpY2UgZnJvbSAnLi4vLi4vcnRjL1BlZXJDb25uZWN0aW9uU2VydmljZSc7XG5pbXBvcnQgUGVlckNvbm5lY3Rpb25Db250ZXh0IGZyb20gJy4uL2NvbnRleHQvUGVlckNvbm5lY3Rpb25Db250ZXh0JztcbmltcG9ydCBSdGNQdWJsaXNoTW9uaXRvciBmcm9tICcuLi8uLi9ydGMvUnRjUHVibGlzaE1vbml0b3InO1xuaW1wb3J0IFJ0Y0NvbmZpZ3VyYXRpb25NYW5hZ2VyIGZyb20gJy4uLy4uL3J0Yy9SdGNDb25maWd1cmF0aW9uTWFuYWdlcic7XG5pbXBvcnQgUHVibGlzaGVyU3RhdGUgZnJvbSAnLi9QdWJsaXNoZXJTdGF0ZSc7XG5pbXBvcnQgUHVibGlzaGVyQ29udGV4dCBmcm9tICcuL1B1Ymxpc2hlckNvbnRleHQnO1xuXG5jb25zdCBpY2VDYW5kaWRhdGVBY2N1bXVsYXRpb25JbnRlcnZhbCA9IDEwMDtcbmNvbnN0IHNvZnRSZXN0YXJ0SW50ZXJ2YWwgPSAxMDAwO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZWFsVGltZVB1Ymxpc2hlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdSZWFsVGltZVB1Ymxpc2hlcicpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9wdWJsaXNoZXJDb250ZXh0OiBQdWJsaXNoZXJDb250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9wZWVyQ29ubmVjdGlvbkNvbnRleHQ6IFBlZXJDb25uZWN0aW9uQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfaGFuZGxlU3RyZWFtRmFpbHVyZTogKCkgPT4gUHJvbWlzZTx2b2lkPjtcblxuICBjb25zdHJ1Y3RvcihwdWJsaXNoZXJDb250ZXh0OiBQdWJsaXNoZXJDb250ZXh0LCBwZWVyQ29ubmVjdGlvbkNvbnRleHQ6IFBlZXJDb25uZWN0aW9uQ29udGV4dCwgaGFuZGxlU3RyZWFtRmFpbHVyZTogKCkgPT4gUHJvbWlzZTx2b2lkPikge1xuICAgIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQgPSBwdWJsaXNoZXJDb250ZXh0O1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dCA9IHBlZXJDb25uZWN0aW9uQ29udGV4dDtcbiAgICB0aGlzLl9oYW5kbGVTdHJlYW1GYWlsdXJlID0gaGFuZGxlU3RyZWFtRmFpbHVyZTtcbiAgfVxuXG4gIHN0YXJ0KHVyaSwgdG9rZW4sIGxpc3Rlbk9uU3RyZWFtU2V0dXApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIW5hdmlnYXRvci5vbkxpbmUpIHtcbiAgICAgIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RhdGUudmFsdWUgPSBQdWJsaXNoZXJTdGF0ZS5PZmZsaW5lO1xuXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFByb21pc2UuYWxsKFtcbiAgICAgIERpc2NvdmVyeS5kaXNjb3ZlckNsb3Nlc3RFbmRQb2ludFdpdGhDYWNoaW5nKHVyaSksXG4gICAgICBQZWVyQ29ubmVjdGlvblNlcnZpY2UuY3JlYXRlUGVlckNvbm5lY3Rpb25PZmZlcignc2VuZG9ubHknKVxuICAgICAgICAudGhlbigoe2xvY2FsT2ZmZXIsIHBlZXJDb25uZWN0aW9ufSkgPT4ge1xuICAgICAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZSA9IHBlZXJDb25uZWN0aW9uO1xuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGxvY2FsT2ZmZXIsXG4gICAgICAgICAgICBwZWVyQ29ubmVjdGlvblxuICAgICAgICAgIH07XG4gICAgICAgIH0pXG4gICAgXSlcbiAgICAgIC50aGVuKChbZW5kUG9pbnQsIHtsb2NhbE9mZmVyLCBwZWVyQ29ubmVjdGlvbn1dKSA9PiB7XG4gICAgICAgIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQub25saW5lLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5lbmRQb2ludC52YWx1ZSA9IGVuZFBvaW50O1xuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ29ubmVjdGluZyB0byBbJXNdJywgZW5kUG9pbnQudG9TdHJpbmcoKSk7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdMb2NhbCBvZmZlcjpcXG4nICsgbG9jYWxPZmZlci5zZHApO1xuXG4gICAgICAgIGlmIChGZWF0dXJlRW5hYmxlbWVudC5jbGllbnRPZmZlckRpc2FibGVkIHx8ICFwZWVyQ29ubmVjdGlvbi5zdXBwb3J0c1NldENvbmZpZ3VyYXRpb24gfHwgIXBlZXJDb25uZWN0aW9uLnN1cHBvcnRzR2V0Q29uZmlndXJhdGlvbiB8fCB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LmZhaWx1cmVDb3VudC52YWx1ZSA+IDApIHtcbiAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5jbG9zZSgpO1xuICAgICAgICAgIHBlZXJDb25uZWN0aW9uLmRpc3Bvc2UoKTtcblxuICAgICAgICAgIGlmIChTREsuZm9yY2VHYXJiYWdlQ29sbGVjdGlvbk9uUmVzdGFydCAmJiAhKEZlYXR1cmVFbmFibGVtZW50LmlzTW9iaWxlICYmIFNESy5za2lwR2FyYmFnZUNvbGxlY3Rpb25Pbk1vYmlsZURldmljZXMpKSB7XG4gICAgICAgICAgICBHYXJiYWdlQ29sbGVjdG9yTWFuYWdlci5mb3JjZUdhcmJhZ2VDb2xsZWN0aW9uKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcGVlckNvbm5lY3Rpb24gPSBudWxsO1xuICAgICAgICAgIGxvY2FsT2ZmZXIgPSBudWxsO1xuICAgICAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZSA9IHBlZXJDb25uZWN0aW9uO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGVuZFBvaW50LnB1Ymxpc2godGhpcy5fcHVibGlzaGVyQ29udGV4dC5uYW1lLCB0b2tlbiwgbG9jYWxPZmZlciwgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5mYWlsdXJlQ291bnQudmFsdWUpO1xuICAgICAgfSlcbiAgICAgIC50aGVuKCh7c3RhdHVzLCBzdHJlYW0sIHJ0Y0NvbmZpZ3VyYXRpb24sIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UsIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSwgY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZX0pID0+IHtcbiAgICAgICAgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdHJlYW0udmFsdWUgPSBzdHJlYW07XG5cbiAgICAgICAgdGhpcy5fbG9nZ2VyLmRlYnVnKFxuICAgICAgICAgICdbJXNdIFB1Ymxpc2ggY29tcGxldGVkIFslc10gWyVqXSBbJWpdIFslal0gWyVqXScsXG4gICAgICAgICAgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdHJlYW1JZCxcbiAgICAgICAgICBzdGF0dXMsXG4gICAgICAgICAgcnRjQ29uZmlndXJhdGlvbixcbiAgICAgICAgICBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLFxuICAgICAgICAgIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSxcbiAgICAgICAgICBjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdGF0ZS52YWx1ZSA9IHRoaXMuX3B1Ymxpc2hlckNvbnRleHQubWFwUHVibGlzaFN0YXR1c1RvUHVibGlzaGVyU3RhdHVzKHN0YXR1cyk7XG5cbiAgICAgICAgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5hcHBseVN0YXR1cyhzdGF0dXMpO1xuXG4gICAgICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5hcHBseVJ0Y0NvbmZpZ3VyYXRpb24odGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlLCBydGNDb25maWd1cmF0aW9uKVxuICAgICAgICAgIC50aGVuKHBlZXJDb25uZWN0aW9uID0+IHtcbiAgICAgICAgICAgIGxldCBzdWJtaXRDYW5kaWRhdGVzVGltZW91dDtcbiAgICAgICAgICAgIGxldCBjYW5jZWxEaXNjb3ZlcnkgPSBmYWxzZTtcbiAgICAgICAgICAgIGxldCBkaXNjb3ZlcnlDb21wbGV0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIGNvbnN0IGNhbmRpZGF0ZXM6IFJUQ0ljZUNhbmRpZGF0ZVtdID0gW107XG5cbiAgICAgICAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZSA9IHBlZXJDb25uZWN0aW9uO1xuXG4gICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5hZGRTdHJlYW0odGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlKTtcblxuICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24ub25pY2VjYW5kaWRhdGUgPSAoZSk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICBpZiAodGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdHJlYW0udmFsdWUgIT09IHN0cmVhbSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICh0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWUgIT09IHBlZXJDb25uZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKGNhbmNlbERpc2NvdmVyeSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICghU0RLLnNlbmRMb2NhbENhbmRpZGF0ZXMudmFsdWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoZS5jYW5kaWRhdGUgJiYgZS5jYW5kaWRhdGUuY2FuZGlkYXRlKSB7XG4gICAgICAgICAgICAgICAgY2FuZGlkYXRlcy5wdXNoKGUuY2FuZGlkYXRlKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkaXNjb3ZlcnlDb21wbGV0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKCFzdWJtaXRDYW5kaWRhdGVzVGltZW91dCkge1xuICAgICAgICAgICAgICAgIHN1Ym1pdENhbmRpZGF0ZXNUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAodGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdHJlYW0udmFsdWUgIT09IHN0cmVhbSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIGlmIChjYW5jZWxEaXNjb3ZlcnkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5fcHVibGlzaGVyQ29udGV4dC5lbmRQb2ludC52YWx1ZS5hZGRJY2VDYW5kaWRhdGVzKHN0cmVhbSwgY2FuZGlkYXRlcywgZGlzY292ZXJ5Q29tcGxldGVkKVxuICAgICAgICAgICAgICAgICAgICAudGhlbigoe3N0YXR1cywgb3B0aW9uc30pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIud2FybignWyVzXSBGYWlsZWQgdG8gYWRkIElDRSBjYW5kaWRhdGVzIHdpdGggcmVhc29uIFslc10nLCB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0cmVhbUlkLCBzdGF0dXMpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuaW5jbHVkZXMoJ2NhbmNlbCcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYW5jZWxEaXNjb3ZlcnkgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIEFkZGVkIElDRSBjYW5kaWRhdGVzIHdpdGggcmVhc29uIFslc10gYW5kIG9wdGlvbnMgWyVzXScsIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RyZWFtSWQsIHN0YXR1cywgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ1slc10gRmFpbGVkIHRvIGFkZCBJQ0UgY2FuZGlkYXRlcycsIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RyZWFtSWQsIGUpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9LCBpY2VDYW5kaWRhdGVBY2N1bXVsYXRpb25JbnRlcnZhbCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLm9uaWNlY29ubmVjdGlvbnN0YXRlY2hhbmdlID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICBpZiAodGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdHJlYW0udmFsdWUgIT09IHN0cmVhbSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICh0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWUgIT09IHBlZXJDb25uZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgY29uc3QgcmV0cnlDYWxsYmFjayA9ICgpOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgICAvLyBJZiB3ZSBzdG9wIG5vcm1hbGx5IHRoZSBwZWVyIGNvbm5lY3Rpb24gaXMgdW5yZWdpc3RlcmVkIGZpcnN0LlxuICAgICAgICAgICAgICAgIC8vIFRodXMgYW55dGltZSB3ZSBzZWUgYSBjbG9zZWQgcGVlciBjb25uZWN0aW9uIHRoYXQgaXMgc3RpbGwgdmFsaWQsIGl0IGlzIGFuIGVycm9yLlxuICAgICAgICAgICAgICAgIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RhdGUudmFsdWUgPSBQdWJsaXNoZXJTdGF0ZS5Db25uZWN0aW9uRXJyb3I7XG4gICAgICAgICAgICAgICAgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5wdWJsaXNoaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9oYW5kbGVTdHJlYW1GYWlsdXJlKClcbiAgICAgICAgICAgICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgICdbJXNdIEZhaWxlZCBoYW5kbGluZyBzdHJlYW0gZmFpbHVyZSBhZnRlciBwZWVyIGNvbm5lY3Rpb24gc3RvcHBlZCB3aXRoIHN0YXRlIFslc10nLFxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RyZWFtSWQsXG4gICAgICAgICAgICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgIGVcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgIHN3aXRjaCAocGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnY2hlY2tpbmcnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ2NvbXBsZXRlZCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnY29ubmVjdGVkJzpcbiAgICAgICAgICAgICAgICBjYXNlICduZXcnOlxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAnZGlzY29ubmVjdGVkJzpcbiAgICAgICAgICAgICAgICBjYXNlICdmYWlsZWQnOlxuICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gSUNFIGNvbm5lY3Rpb24gc3RhdGUgY2hhbmdlZCB0byBbJXNdLCB0cnlpbmcgdG8gcmVjb25uZWN0JywgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdHJlYW1JZCwgcGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlKTtcbiAgICAgICAgICAgICAgICAgIHRoaXMucmVjb25uZWN0UGVlckNvbm5lY3Rpb24ocGVlckNvbm5lY3Rpb24sIHJldHJ5Q2FsbGJhY2spO1xuXG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgY2FzZSAnY2xvc2VkJzpcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIElDRSBjb25uZWN0aW9uIHN0YXRlIGNoYW5nZWQgdG8gWyVzXSwgcmV0cnlpbmcgdG8gY29ubmVjdCcsIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RyZWFtSWQsIHBlZXJDb25uZWN0aW9uLmljZUNvbm5lY3Rpb25TdGF0ZSk7XG4gICAgICAgICAgICAgICAgICByZXRyeUNhbGxiYWNrKCk7XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUocGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KHJlc29sdmUgPT4ge1xuICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gU2V0IGxvY2FsIFNEUCBvZmZlciBbJXNdJywgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdHJlYW1JZCwgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24uc2RwKTtcblxuICAgICAgICAgICAgICByZXR1cm4gcGVlckNvbm5lY3Rpb24uc2V0TG9jYWxEZXNjcmlwdGlvbihzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbilcbiAgICAgICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBGYWlsZWQgdG8gc2V0IGxvY2FsIGRlc2NyaXB0aW9uIFslal0gd2l0aCBtZXNzYWdlIFslc10nLCB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0cmVhbUlkLCBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbiwgZS5tZXNzYWdlKTtcblxuICAgICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoIWNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBTZXQgcmVtb3RlIFNEUCBhbnN3ZXIgWyVzXScsIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RyZWFtSWQsIGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uLnNkcCk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIHBlZXJDb25uZWN0aW9uLnNldFJlbW90ZURlc2NyaXB0aW9uKGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKVxuICAgICAgICAgICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIEZhaWxlZCB0byBzZXQgcmVtb3RlIGRlc2NyaXB0aW9uIFslal0gd2l0aCBtZXNzYWdlIFslc10nLCB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0cmVhbUlkLCBjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbiwgZS5tZXNzYWdlKTtcblxuICAgICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoIWNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIFNldCByZW1vdGUgU0RQIG9mZmVyIFslc10nLCB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0cmVhbUlkLCBjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uLnNkcCk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIHBlZXJDb25uZWN0aW9uLnNldFJlbW90ZURlc2NyaXB0aW9uKGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24pXG4gICAgICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gRmFpbGVkIHRvIHNldCByZW1vdGUgZGVzY3JpcHRpb24gWyVqXSB3aXRoIG1lc3NhZ2UgWyVzXScsIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RyZWFtSWQsIGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uLCBlLm1lc3NhZ2UpO1xuXG4gICAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHBlZXJDb25uZWN0aW9uLmNyZWF0ZUFuc3dlcih7XG4gICAgICAgICAgICAgICAgICAgIG9mZmVyVG9SZWNlaXZlQXVkaW86IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBvZmZlclRvUmVjZWl2ZVZpZGVvOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSkudGhlbihhbnN3ZXIgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gU2V0IGxvY2FsIFNEUCBhbnN3ZXIgWyVzXScsIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RyZWFtSWQsIGFuc3dlci5zZHApO1xuXG4gICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcHVibGlzaGVyQ29udGV4dC5lbmRQb2ludC52YWx1ZS5zZXRSZW1vdGVEZXNjcmlwdGlvbihzdHJlYW0sIGFuc3dlcik7XG4gICAgICAgICAgICAgICAgfSkudGhlbigoe3N0YXR1cywgc2Vzc2lvbkRlc2NyaXB0aW9ufSkgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdGF0ZS52YWx1ZSA9IHRoaXMubWFwU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXNUb1B1Ymxpc2hlclN0YXR1cyhzdGF0dXMpO1xuXG4gICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQucHVibGlzaGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0YW5kYnkudmFsdWUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0b3BwZWQudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIFNldCBsb2NhbCBTRFAgWyVzXScsIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RyZWFtSWQsIHNlc3Npb25EZXNjcmlwdGlvbi5zZHApO1xuXG4gICAgICAgICAgICAgICAgICByZXR1cm4gcGVlckNvbm5lY3Rpb24uc2V0TG9jYWxEZXNjcmlwdGlvbihzZXNzaW9uRGVzY3JpcHRpb24pXG4gICAgICAgICAgICAgICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBGYWlsZWQgdG8gc2V0IGxvY2FsIGRlc2NyaXB0aW9uIFslal0gd2l0aCBtZXNzYWdlIFslc10nLCB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LnN0cmVhbUlkLCBzZXNzaW9uRGVzY3JpcHRpb24sIGUubWVzc2FnZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICBsaXN0ZW5PblN0cmVhbVNldHVwLnN1Y2Nlc3ModGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdHJlYW1JZCk7XG5cbiAgICAgICAgICAgICAgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdGF0ZS52YWx1ZSA9IFB1Ymxpc2hlclN0YXRlLlB1Ymxpc2hpbmc7XG4gICAgICAgICAgICAgIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQucHVibGlzaGluZy52YWx1ZSA9IHRydWU7XG5cbiAgICAgICAgICAgICAgY29uc3QgcnRjUHVibGlzaE1vbml0b3IgPSBuZXcgUnRjUHVibGlzaE1vbml0b3IocGVlckNvbm5lY3Rpb24sIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5tZWRpYVN0cmVhbS52YWx1ZSwgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5lbmRQb2ludC52YWx1ZS5yb3VuZFRyaXBUaW1lIC8gNCk7XG5cbiAgICAgICAgICAgICAgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5kaXNwb3NhYmxlcy5hZGQocnRjUHVibGlzaE1vbml0b3IpO1xuXG4gICAgICAgICAgICAgIGNvbnN0IGlnbm9yZWQgPSBydGNQdWJsaXNoTW9uaXRvci5ydGNTdGF0aXN0aWMuc3Vic2NyaWJlKHN0YXRpc3RpY3MgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQucnRjU3RhdGlzdGljcy52YWx1ZSA9IHN0YXRpc3RpY3M7XG4gICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGFwcGx5UnRjQ29uZmlndXJhdGlvbihcbiAgICBvcHRpb25hbFBlZXJDb25uZWN0aW9uOiBJUGVlckNvbm5lY3Rpb24gfCBudWxsLFxuICAgIHJ0Y0NvbmZpZ3VyYXRpb246IFJUQ0NvbmZpZ3VyYXRpb24pOiBQcm9taXNlPElQZWVyQ29ubmVjdGlvbj4ge1xuICAgIGlmICghb3B0aW9uYWxQZWVyQ29ubmVjdGlvbikge1xuICAgICAgcnRjQ29uZmlndXJhdGlvbiA9IFJ0Y0NvbmZpZ3VyYXRpb25NYW5hZ2VyLnRydW5jYXRlSWNlU2VydmVycyhydGNDb25maWd1cmF0aW9uKTtcblxuICAgICAgcmV0dXJuIFNESy5wZWVyQ29ubmVjdGlvbkZhY3RvcnkudmFsdWUuY3JlYXRlUGVlckNvbm5lY3Rpb24ocnRjQ29uZmlndXJhdGlvbik7XG4gICAgfVxuXG4gICAgY29uc3QgbmV3UnRjQ29uZmlndXJhdGlvbiA9IHtcbiAgICAgIC4uLm9wdGlvbmFsUGVlckNvbm5lY3Rpb24uZ2V0Q29uZmlndXJhdGlvbigpLFxuICAgICAgLi4ucnRjQ29uZmlndXJhdGlvblxuICAgIH07XG5cbiAgICBvcHRpb25hbFBlZXJDb25uZWN0aW9uLnNldENvbmZpZ3VyYXRpb24obmV3UnRjQ29uZmlndXJhdGlvbik7XG5cbiAgICByZXR1cm4gb3B0aW9uYWxQZWVyQ29ubmVjdGlvbjtcbiAgfVxuXG4gIHByaXZhdGUgcmVjb25uZWN0UGVlckNvbm5lY3Rpb24ocGVlckNvbm5lY3Rpb246IElQZWVyQ29ubmVjdGlvbiwgcmV0cnlDYWxsYmFjazogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIGlmIChwZWVyQ29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGUgPT09ICdjbG9zZWQnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fcHVibGlzaGVyQ29udGV4dC5zdGF0ZS52YWx1ZSA9IFB1Ymxpc2hlclN0YXRlLlJlY29ubmVjdGluZztcblxuICAgIGlmICh0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyA8IFNESy5tYXhpbWFsTnVtYmVyT2ZQZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzIHx8ICFTREsuYXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uKSB7XG4gICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cysrO1xuXG4gICAgICBjb25zdCBpc0NsaWVudE9mZmVyRmxvdyA9IHBlZXJDb25uZWN0aW9uLmN1cnJlbnRMb2NhbERlc2NyaXB0aW9uPy50eXBlID09PSAnb2ZmZXInO1xuXG4gICAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQuY2xpZW50T2ZmZXJEaXNhYmxlZCB8fFxuICAgICAgICAhcGVlckNvbm5lY3Rpb24uc3VwcG9ydHNTZXRDb25maWd1cmF0aW9uIHx8XG4gICAgICAgICFwZWVyQ29ubmVjdGlvbi5zdXBwb3J0c0dldENvbmZpZ3VyYXRpb24gfHxcbiAgICAgICAgIWlzQ2xpZW50T2ZmZXJGbG93XG4gICAgICApIHtcbiAgICAgICAgY29uc3QgcmVjb25uZWN0UGVlckNvbm5lY3Rpb25UaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5yZWNvbm5lY3RQZWVyQ29ubmVjdGlvbihwZWVyQ29ubmVjdGlvbiwgcmV0cnlDYWxsYmFjayk7XG4gICAgICAgIH0sIHNvZnRSZXN0YXJ0SW50ZXJ2YWwpO1xuXG4gICAgICAgIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuZGlzcG9zYWJsZXMuYWRkKG5ldyBEaXNwb3NhYmxlKCgpID0+IGNsZWFyVGltZW91dChyZWNvbm5lY3RQZWVyQ29ubmVjdGlvblRpbWVvdXQpKSk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9sb2dnZXIuaW5mbygnUmVjb25uZWN0aW5nIHBlZXIgY29ubmVjdGlvbiBieSByZXN0YXJ0aW5nIElDRScpO1xuXG4gICAgICBjb25zdCBjdXJyZW50TG9jYWxEZXNjcmlwdGlvbiA9IHBlZXJDb25uZWN0aW9uLmN1cnJlbnRMb2NhbERlc2NyaXB0aW9uO1xuICAgICAgY29uc3QgaWdub3JlZCA9IHBlZXJDb25uZWN0aW9uLmNyZWF0ZU9mZmVyKHtpY2VSZXN0YXJ0OiB0cnVlfSkudGhlbihvZmZlciA9PiB7XG4gICAgICAgIHJldHVybiBwZWVyQ29ubmVjdGlvbi5zZXRMb2NhbERlc2NyaXB0aW9uKG9mZmVyKS50aGVuKCgpID0+IHtcbiAgICAgICAgICByZXR1cm4gcGVlckNvbm5lY3Rpb24uc2V0TG9jYWxEZXNjcmlwdGlvbihjdXJyZW50TG9jYWxEZXNjcmlwdGlvbilcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKHBlZXJDb25uZWN0aW9uLmljZUNvbm5lY3Rpb25TdGF0ZSA9PT0gJ2Rpc2Nvbm5lY3RlZCcgfHwgcGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlID09PSAnZmFpbGVkJykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlY29ubmVjdFBlZXJDb25uZWN0aW9uVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5yZWNvbm5lY3RQZWVyQ29ubmVjdGlvbihwZWVyQ29ubmVjdGlvbiwgcmV0cnlDYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgfSwgc29mdFJlc3RhcnRJbnRlcnZhbCk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9wdWJsaXNoZXJDb250ZXh0LmRpc3Bvc2FibGVzLmFkZChuZXcgRGlzcG9zYWJsZSgoKSA9PiBjbGVhclRpbWVvdXQocmVjb25uZWN0UGVlckNvbm5lY3Rpb25UaW1lb3V0KSkpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX3B1Ymxpc2hlckNvbnRleHQuc3RhdGUudmFsdWUgPSBQdWJsaXNoZXJTdGF0ZS5QdWJsaXNoaW5nO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9KVxuICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gcmVjb25uZWN0IHBlZXIgY29ubmVjdGlvbicsIGUpO1xuICAgICAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzID0gMDtcbiAgICAgICAgICByZXRyeUNhbGxiYWNrKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0ZhaWxlZCB0byByZWNvbm5lY3QgcGVlciBjb25uZWN0aW9uIGFmdGVyIFslc10gYXR0ZW1wdHMsIHBlcmZvcm1pbmcgZnVsbCByZWNvdmVyeScsIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzKTtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyA9IDA7XG4gICAgcmV0cnlDYWxsYmFjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBtYXBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1c1RvUHVibGlzaGVyU3RhdHVzKHN0YXR1czogU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXMpOiBQdWJsaXNoZXJTdGF0ZSB7XG4gICAgc3dpdGNoIChzdGF0dXMpIHtcbiAgICAgIGNhc2UgJ29rJzpcbiAgICAgICAgcmV0dXJuIFB1Ymxpc2hlclN0YXRlLlN0YXJ0aW5nO1xuICAgICAgY2FzZSAndW5hdXRob3JpemVkJzpcbiAgICAgICAgcmV0dXJuIFB1Ymxpc2hlclN0YXRlLlVuYXV0aG9yaXplZDtcbiAgICAgIGNhc2UgJ25vdC1mb3VuZCc6XG4gICAgICAgIHJldHVybiBQdWJsaXNoZXJTdGF0ZS5Ob3RGb3VuZDtcbiAgICAgIGNhc2UgJ2NhcGFjaXR5JzpcbiAgICAgIGNhc2UgJ3JhdGUtbGltaXRlZCc6XG4gICAgICBjYXNlICd0aW1lb3V0JzpcbiAgICAgICAgcmV0dXJuIFB1Ymxpc2hlclN0YXRlLlJlY292ZXJpbmc7XG4gICAgICBjYXNlICdmYWlsZWQnOlxuICAgICAgICByZXR1cm4gUHVibGlzaGVyU3RhdGUuRXJyb3I7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZShzdGF0dXMpO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IENoYW5uZWxDb250ZXh0IGZyb20gJy4uL2NvbnRleHQvQ2hhbm5lbENvbnRleHQnO1xuaW1wb3J0IERpc2NvdmVyeSBmcm9tICcuLi9kaXNjb3ZlcnkvRGlzY292ZXJ5JztcbmltcG9ydCBEaXNwb3NhYmxlIGZyb20gJy4uLy4uL2xhbmcvRGlzcG9zYWJsZSc7XG5pbXBvcnQgRGlzcG9zYWJsZUxpc3QgZnJvbSAnLi4vLi4vbGFuZy9EaXNwb3NhYmxlTGlzdCc7XG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQgQ2hhbm5lbFN0YXRlIGZyb20gJy4uL2NoYW5uZWxzL0NoYW5uZWxTdGF0ZSc7XG5pbXBvcnQge0NodW5rZWRTdHJlYW1pbmd9IGZyb20gJy4vQ2h1bmtlZFN0cmVhbWluZyc7XG5pbXBvcnQge0NodW5rZWRTdHJlYW1pbmdTdGF0aXN0aWNzfSBmcm9tICcuL1N0cmVhbVR5cGVzJztcbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuLi8uLi9sYW5nL0lEaXNwb3NhYmxlJztcbmltcG9ydCB7SVN0cmVhbX0gZnJvbSAnLi9JU3RyZWFtJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQge05ldHdvcmtTdGF0ZXN9IGZyb20gJy4vTmV0d29ya1N0YXRlcyc7XG5pbXBvcnQgQ2h1bmtlZFN0cmVhbVBsYXliYWNrTW9kZSBmcm9tICcuL0NodW5rZWRTdHJlYW1QbGF5YmFja01vZGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDaHVua2VkU3RyZWFtIGltcGxlbWVudHMgSVN0cmVhbSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdDaHVua2VkU3RyZWFtJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NoYW5uZWxDb250ZXh0OiBDaGFubmVsQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfY2h1bmtlZFN0cmVhbVBsYXliYWNrTW9kZTogQ2h1bmtlZFN0cmVhbVBsYXliYWNrTW9kZTtcbiAgcHJpdmF0ZSByZWFkb25seSBfbW9uaXRvckRpc3Bvc2FibGVzID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2hhbmRsZVN0cmVhbUZhaWx1cmU6ICgpID0+IFByb21pc2U8dm9pZD47XG4gIHByaXZhdGUgX3N0cmVhbVN0YXRpc3RpY3M6IENodW5rZWRTdHJlYW1pbmdTdGF0aXN0aWNzO1xuICBwcml2YXRlIF9tb25pdG9yRmFpbHVyZUNvdW50ID0gMDtcblxuICBjb25zdHJ1Y3RvcihjaGFubmVsQ29udGV4dCwgY2h1bmtlZFN0cmVhbVBsYXliYWNrTW9kZTogQ2h1bmtlZFN0cmVhbVBsYXliYWNrTW9kZSwgaGFuZGxlU3RyZWFtRmFpbHVyZTogKCkgPT4gUHJvbWlzZTx2b2lkPikge1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0ID0gY2hhbm5lbENvbnRleHQ7XG4gICAgdGhpcy5fY2h1bmtlZFN0cmVhbVBsYXliYWNrTW9kZSA9IGNodW5rZWRTdHJlYW1QbGF5YmFja01vZGU7XG4gICAgdGhpcy5faGFuZGxlU3RyZWFtRmFpbHVyZSA9IGhhbmRsZVN0cmVhbUZhaWx1cmU7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuZGlzcG9zYWJsZXMuYWRkKHRoaXMpO1xuICB9XG5cbiAgc3RhcnQodXJpOiBVUkwsIHRva2VuOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQgfCBJRGlzcG9zYWJsZT4ge1xuICAgIHJldHVybiBEaXNjb3ZlcnkuZGlzY292ZXJDbG9zZXN0RW5kUG9pbnRXaXRoQ2FjaGluZyh1cmkpXG4gICAgICAudGhlbihlbmRQb2ludCA9PiB7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0Lm9ubGluZS52YWx1ZSA9IHRydWU7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlID0gZW5kUG9pbnQ7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDb25uZWN0aW5nIHRvIFslc10nLCBlbmRQb2ludC50b1N0cmluZygpKTtcblxuICAgICAgICByZXR1cm4gZW5kUG9pbnQuc3Vic2NyaWJlKHRva2VuLCBudWxsLCB0aGlzLl9jaGFubmVsQ29udGV4dC5mYWlsdXJlQ291bnQudmFsdWUpO1xuICAgICAgfSlcbiAgICAgIC50aGVuKCh7c3RhdHVzLCBzdHJlYW0sIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSwgbGFnfSkgPT4ge1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUgPSBzdHJlYW07XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxhZy52YWx1ZSA9IGxhZztcblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hcHBseVNlc3Npb25BbmRTdHJlYW1Qcm9wZXJ0aWVzVG9WaWRlb0VsZW1lbnQoKTtcblxuICAgICAgICB0aGlzLl9sb2dnZXIuZGVidWcoXG4gICAgICAgICAgJ1slc10gU3Vic2NyaWJlIGNvbXBsZXRlZCBbJXNdIFslal0gWyVqXSBbJWpdIFslal0nLFxuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLFxuICAgICAgICAgIHN0YXR1cyxcbiAgICAgICAgICBjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UsXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSB0aGlzLl9jaGFubmVsQ29udGV4dC5tYXBTdWJzY3JpYmVTdGF0dXNUb0NoYW5uZWxTdGF0dXMoc3RhdHVzKTtcblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hcHBseVN0YXR1cyhzdGF0dXMpO1xuXG4gICAgICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBvZmZlclNkcCA9IGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24uc2RwO1xuICAgICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICAgIG9yaWdpblN0YXJ0VGltZTogRGF0ZS5ub3coKSAtIGxhZyArIHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlLnJvdW5kVHJpcFRpbWUgLyAyLFxuICAgICAgICAgIGxhZ1xuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBDaHVua2VkU3RyZWFtaW5nLnN0YXJ0KHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZSwgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIG9mZmVyU2RwLCBvcHRpb25zKVxuICAgICAgICAgIC50aGVuKHBsYXllciA9PiB7XG4gICAgICAgICAgICB0aGlzLm1vbml0b3IocGxheWVyKTtcblxuICAgICAgICAgICAgcmV0dXJuIHBsYXllcjtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignQ2h1bmtlZFN0cmVhbWluZyBmYWlsZWQnLCBlKTtcbiAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlN0b3BwZWQ7XG4gICAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgbW9uaXRvcihwbGF5ZXI6IElEaXNwb3NhYmxlKTogdm9pZCB7XG4gICAgdGhpcy5fbW9uaXRvckRpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcblxuICAgIGNvbnN0IHRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCBuZXdTdHJlYW1TdGF0aXN0aWNzID0gQ2h1bmtlZFN0cmVhbWluZy5nZXRTdGF0cygpO1xuXG4gICAgICBpZiAodGhpcy5fY2h1bmtlZFN0cmVhbVBsYXliYWNrTW9kZSA9PT0gQ2h1bmtlZFN0cmVhbVBsYXliYWNrTW9kZS5MaXZlXG4gICAgICAgICAgJiYgbmV3U3RyZWFtU3RhdGlzdGljcy5uZXR3b3JrU3RhdGUgPT09IE5ldHdvcmtTdGF0ZXMuTmV0d29ya05vU291cmNlXG4gICAgICAgICAgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLmN1cnJlbnRUaW1lID09PSB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuZHVyYXRpb25cbiAgICAgICkge1xuICAgICAgICB0aGlzLl9tb25pdG9yRmFpbHVyZUNvdW50ID0gMDtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuQ29ubmVjdGlvbkVycm9yO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IHRydWU7XG4gICAgICAgIHBsYXllci5kaXNwb3NlKCk7XG4gICAgICAgIHRoaXMuX21vbml0b3JEaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG5cbiAgICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX2hhbmRsZVN0cmVhbUZhaWx1cmUoKVxuICAgICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIGhhbmRsaW5nIGVuZCBvZiBzdHJlYW0nLCBlKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9zdHJlYW1TdGF0aXN0aWNzICYmXG4gICAgICAgICF0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUucGF1c2VkICYmXG4gICAgICAgIHRoaXMuX3N0cmVhbVN0YXRpc3RpY3MuY3VycmVudFRpbWUgPj0gbmV3U3RyZWFtU3RhdGlzdGljcy5jdXJyZW50VGltZSAmJlxuICAgICAgICAgICh0aGlzLl9zdHJlYW1TdGF0aXN0aWNzLmRhdGFCdWZmZXJlZCA+PSBuZXdTdHJlYW1TdGF0aXN0aWNzLmRhdGFCdWZmZXJlZCB8fCAhbmV3U3RyZWFtU3RhdGlzdGljcy5kYXRhQnVmZmVyZWQpXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5fbW9uaXRvckZhaWx1cmVDb3VudCsrO1xuXG4gICAgICAgIGlmICh0aGlzLl9tb25pdG9yRmFpbHVyZUNvdW50ID4gNCkge1xuICAgICAgICAgIHRoaXMuX21vbml0b3JGYWlsdXJlQ291bnQgPSAwO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkNvbm5lY3Rpb25FcnJvcjtcblxuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICBwbGF5ZXIuZGlzcG9zZSgpO1xuICAgICAgICAgIHRoaXMuX21vbml0b3JEaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG5cbiAgICAgICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5faGFuZGxlU3RyZWFtRmFpbHVyZSgpXG4gICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIGhhbmRsaW5nIHN0cmVhbSBmYWlsdXJlJywgZSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fbW9uaXRvckZhaWx1cmVDb3VudCA9IDA7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUucGF1c2VkICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID09PSBDaGFubmVsU3RhdGUuUGxheWluZykge1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5QYXVzZWQ7XG4gICAgICB9XG5cbiAgICAgIGlmICghdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnBhdXNlZCAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSAhPT0gQ2hhbm5lbFN0YXRlLlBsYXlpbmcpIHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuUGxheWluZztcbiAgICAgIH1cblxuICAgICAgdGhpcy5fc3RyZWFtU3RhdGlzdGljcyA9IG5ld1N0cmVhbVN0YXRpc3RpY3M7XG5cbiAgICAgIHRoaXMubW9uaXRvcihwbGF5ZXIpO1xuICAgIH0sIDEwMDApO1xuXG4gICAgdGhpcy5fbW9uaXRvckRpc3Bvc2FibGVzLmFkZChuZXcgRGlzcG9zYWJsZSgoKSA9PiB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgfSkpO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9tb25pdG9yRGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5lbnVtIENodW5rZWRTdHJlYW1QbGF5YmFja01vZGUge1xuICAgIExpdmUgPSAxLFxuICAgIE9uZERlbWFuZCA9IDJcbn1cblxuZXhwb3J0IGRlZmF1bHQgQ2h1bmtlZFN0cmVhbVBsYXliYWNrTW9kZTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBGZWF0dXJlRW5hYmxlbWVudCBmcm9tICcuLi8uLi9lbnZpcm9ubWVudC9GZWF0dXJlRW5hYmxlbWVudCc7XG5pbXBvcnQgV2ViUGxheWVyIGZyb20gJy4vV2ViUGxheWVyJztcbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcbmltcG9ydCBTaGFrYVBsYXllciBmcm9tICcuL1NoYWthUGxheWVyJztcbmltcG9ydCBIbHNQbGF5ZXIgZnJvbSAnLi9IbHNQbGF5ZXInO1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uLy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuaW1wb3J0IHtIbHNQbGF5ZXJUeXBlLCBDaHVua2VkU3RyZWFtaW5nT3B0aW9ucywgQ2h1bmtlZFN0cmVhbWluZ1N0YXRpc3RpY3MsIFNoYWthVHlwZSwgV2ViUGxheWVyVHlwZX0gZnJvbSAnLi9TdHJlYW1UeXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBDaHVua2VkU3RyZWFtaW5nIHtcbiAgcHJpdmF0ZSBzdGF0aWMgX3BlbmRpbmcgPSBmYWxzZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX2hsc1BsYXllcjogSGxzUGxheWVyVHlwZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX3BoZW5peFdlYlBsYXllcjogV2ViUGxheWVyVHlwZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX3NoYWthOiBTaGFrYVR5cGU7XG4gIHByaXZhdGUgc3RhdGljIF9vcHRpb25zOiBDaHVua2VkU3RyZWFtaW5nT3B0aW9ucztcbiAgcHJpdmF0ZSBzdGF0aWMgX3BsYXllcjogU2hha2FQbGF5ZXIgfCBXZWJQbGF5ZXIgfCBIbHNQbGF5ZXI7XG5cbiAgc3RhdGljIGdldCBobHNQbGF5ZXIoKTogSGxzUGxheWVyVHlwZSB7XG4gICAgcmV0dXJuIHRoaXMuX2hsc1BsYXllcjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgcGhlbml4V2ViUGxheWVyKCk6IFdlYlBsYXllclR5cGUge1xuICAgIHJldHVybiB0aGlzLl9waGVuaXhXZWJQbGF5ZXI7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHNoYWthKCk6IFNoYWthVHlwZSB7XG4gICAgcmV0dXJuIHRoaXMuX3NoYWthO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIHN0YXJ0KHZpZGVvRWxlbWVudDogSFRNTFZpZGVvRWxlbWVudCwgc3RyZWFtSWQ6IHN0cmluZywgb2ZmZXJTZHA6IHN0cmluZywgb3B0aW9uczogQ2h1bmtlZFN0cmVhbWluZ09wdGlvbnMpOiBQcm9taXNlPElEaXNwb3NhYmxlPiB7XG4gICAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnM7XG5cbiAgICBpZiAodGhpcy5faGxzUGxheWVyIHx8IHRoaXMuX3NoYWthIHx8IHRoaXMuX3BoZW5peFdlYlBsYXllcikge1xuICAgICAgcmV0dXJuIHRoaXMubG9hZGVkKHZpZGVvRWxlbWVudCwgc3RyZWFtSWQsIG9mZmVyU2RwKTtcbiAgICB9XG5cbiAgICBpZiAoIVNESy53ZWJQbGF5ZXJMb2FkZXIgJiYgIVNESy5zaGFrYVBsYXllckxvYWRlciAmJiAhU0RLLmhsc0pzTG9hZGVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkLWZlYXR1cmUsIGFkZCBzdHJlYW0gcGxheWVyJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgaWYgKFNESy5obHNKc0xvYWRlcikge1xuICAgICAgICB0aGlzLl9wZW5kaW5nID0gdHJ1ZTtcbiAgICAgICAgU0RLLmhsc0pzTG9hZGVyKHBsYXllciA9PiB7XG4gICAgICAgICAgdGhpcy5faGxzUGxheWVyID0gcGxheWVyO1xuXG4gICAgICAgICAgaWYgKHRoaXMuX3BlbmRpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuX3BlbmRpbmcgPSBmYWxzZTtcblxuICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLmxvYWRlZCh2aWRlb0VsZW1lbnQsIHN0cmVhbUlkLCBvZmZlclNkcCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChTREsud2ViUGxheWVyTG9hZGVyKSB7XG4gICAgICAgIHRoaXMuX3BlbmRpbmcgPSB0cnVlO1xuICAgICAgICBTREsud2ViUGxheWVyTG9hZGVyKHBsYXllciA9PiB7XG4gICAgICAgICAgdGhpcy5fcGhlbml4V2ViUGxheWVyID0gcGxheWVyO1xuXG4gICAgICAgICAgaWYgKHRoaXMuX3BlbmRpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuX3BlbmRpbmcgPSBmYWxzZTtcblxuICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLmxvYWRlZCh2aWRlb0VsZW1lbnQsIHN0cmVhbUlkLCBvZmZlclNkcCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChTREsuc2hha2FQbGF5ZXJMb2FkZXIpIHtcbiAgICAgICAgdGhpcy5fcGVuZGluZyA9IHRydWU7XG4gICAgICAgIFNESy5zaGFrYVBsYXllckxvYWRlcihwbGF5ZXIgPT4ge1xuICAgICAgICAgIHRoaXMuX3NoYWthID0gcGxheWVyO1xuXG4gICAgICAgICAgaWYgKHRoaXMuX3BlbmRpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuX3BlbmRpbmcgPSBmYWxzZTtcblxuICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLmxvYWRlZCh2aWRlb0VsZW1lbnQsIHN0cmVhbUlkLCBvZmZlclNkcCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgZ2V0U3RhdHMoKTogQ2h1bmtlZFN0cmVhbWluZ1N0YXRpc3RpY3Mge1xuICAgIGlmICh0aGlzLl9wbGF5ZXIpIHtcbiAgICAgIHJldHVybiB0aGlzLl9wbGF5ZXIuZ2V0U3RhdHMoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGFzeW5jIHBsYXkoUGxheWVyOiB0eXBlb2YgV2ViUGxheWVyIHwgdHlwZW9mIFNoYWthUGxheWVyIHwgdHlwZW9mIEhsc1BsYXllciwgdmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50LCBzdHJlYW1JZDogc3RyaW5nLCBvZmZlclNkcDogc3RyaW5nLCBvcHRpb25zOiBDaHVua2VkU3RyZWFtaW5nT3B0aW9ucyk6IFByb21pc2U8SURpc3Bvc2FibGU+IHtcbiAgICBjb25zdCBkYXNoTWFuaWZlc3RVcmxNYXRjaCA9IG9mZmVyU2RwLm1hdGNoKC9hPXgtcGxheWxpc3Q6KFteXFxuXSpbLl1tcGRcXD8/W15cXHNdKikvbSk7XG4gICAgY29uc3QgaGxzTWFuaWZlc3RVcmxNYXRjaCA9IG9mZmVyU2RwLm1hdGNoKC9hPXgtcGxheWxpc3Q6KFteXFxuXSpbLl1tM3U4XFw/P1teXFxzXSopL20pO1xuICAgIGNvbnN0IG1hbmlmZXN0VXJsID0gZGFzaE1hbmlmZXN0VXJsTWF0Y2ggJiYgZGFzaE1hbmlmZXN0VXJsTWF0Y2hbMV0gPyBkYXNoTWFuaWZlc3RVcmxNYXRjaFsxXSA6ICcnO1xuICAgIGNvbnN0IHBsYXlsaXN0VXJsID0gaGxzTWFuaWZlc3RVcmxNYXRjaCAmJiBobHNNYW5pZmVzdFVybE1hdGNoWzFdID8gaGxzTWFuaWZlc3RVcmxNYXRjaFsxXSA6ICcnO1xuXG4gICAgaWYgKHBsYXlsaXN0VXJsKSB7XG4gICAgICBpZiAoIXRoaXMuX3BoZW5peFdlYlBsYXllciB8fCBGZWF0dXJlRW5hYmxlbWVudC5zaG91bGRVc2VOYXRpdmVIbHMpIHtcbiAgICAgICAgdGhpcy5fcGxheWVyID0gbmV3IFBsYXllcih2aWRlb0VsZW1lbnQsICdobHMnLCBzdHJlYW1JZCwgcGxheWxpc3RVcmwsIG9wdGlvbnMpO1xuXG4gICAgICAgIHRoaXMuX3BsYXllci5zdGFydCgpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLl9wbGF5ZXI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG1hbmlmZXN0VXJsKSB7XG4gICAgICBpZiAoIXRoaXMuX2hsc1BsYXllciAmJiAhKHRoaXMuX3BoZW5peFdlYlBsYXllciAmJiBGZWF0dXJlRW5hYmxlbWVudC5zaG91bGRVc2VOYXRpdmVIbHMpKSB7XG4gICAgICAgIHRoaXMuX3BsYXllciA9IG5ldyBQbGF5ZXIodmlkZW9FbGVtZW50LCAnZGFzaCcsIHN0cmVhbUlkLCBtYW5pZmVzdFVybCwgb3B0aW9ucyk7XG5cbiAgICAgICAgdGhpcy5fcGxheWVyLnN0YXJ0KCk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX3BsYXllcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobWFuaWZlc3RVcmwgfHwgcGxheWxpc3RVcmwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgWyR7c3RyZWFtSWR9XSBDYW5ub3QgcGxheSBbJHtwbGF5bGlzdFVybCA/ICdITFMnIDogJ0RBU0gnfV0gc3RyZWFtIHdpdGggaW5jbHVkZWQgcGxheWVyYCk7XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKCdObyBzdHJlYW0gcGxheWxpc3QgZm91bmQnKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGxvYWRlZCh2aWRlb0VsZW1lbnQ6IEhUTUxWaWRlb0VsZW1lbnQsIHN0cmVhbUlkOiBzdHJpbmcsIG9mZmVyU2RwOiBzdHJpbmcpOiBQcm9taXNlPElEaXNwb3NhYmxlPiB7XG4gICAgaWYgKCF0aGlzLl9zaGFrYSAmJiAhdGhpcy5fcGhlbml4V2ViUGxheWVyICYmICF0aGlzLl9obHNQbGF5ZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5faGxzUGxheWVyKSB7XG4gICAgICByZXR1cm4gdGhpcy5wbGF5KEhsc1BsYXllciwgdmlkZW9FbGVtZW50LCBzdHJlYW1JZCwgb2ZmZXJTZHAsIHtcbiAgICAgICAgLi4udGhpcy5fb3B0aW9ucyxcbiAgICAgICAgcHJlZmVyTmF0aXZlOiBGZWF0dXJlRW5hYmxlbWVudC5zaG91bGRVc2VOYXRpdmVIbHNcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9waGVuaXhXZWJQbGF5ZXIpIHtcbiAgICAgIHJldHVybiB0aGlzLnBsYXkoV2ViUGxheWVyLCB2aWRlb0VsZW1lbnQsIHN0cmVhbUlkLCBvZmZlclNkcCwge1xuICAgICAgICAuLi50aGlzLl9vcHRpb25zLFxuICAgICAgICBwcmVmZXJOYXRpdmU6IEZlYXR1cmVFbmFibGVtZW50LnNob3VsZFVzZU5hdGl2ZUhsc1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3NoYWthKSB7XG4gICAgICByZXR1cm4gdGhpcy5wbGF5KFNoYWthUGxheWVyLCB2aWRlb0VsZW1lbnQsIHN0cmVhbUlkLCBvZmZlclNkcCwge1xuICAgICAgICAuLi50aGlzLl9vcHRpb25zLFxuICAgICAgICBwcmVmZXJOYXRpdmU6IEZlYXR1cmVFbmFibGVtZW50LnNob3VsZFVzZU5hdGl2ZUhsc1xuICAgICAgfSk7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0NodW5rZWRTdHJlYW1pbmd9IGZyb20gJy4vQ2h1bmtlZFN0cmVhbWluZyc7XG5pbXBvcnQge0NodW5rZWRTdHJlYW1pbmdPcHRpb25zLCBDaHVua2VkU3RyZWFtaW5nU3RhdGlzdGljc30gZnJvbSAnLi9TdHJlYW1UeXBlcyc7XG5pbXBvcnQge0lIbHNQbGF5ZXJUeXBlfSBmcm9tICcuL0lIbHNQbGF5ZXInO1xuaW1wb3J0IHtOZXR3b3JrU3RhdGVzfSBmcm9tICcuL05ldHdvcmtTdGF0ZXMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBIbHNQbGF5ZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF92aWRlb0VsZW1lbnQ6IEhUTUxWaWRlb0VsZW1lbnQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2tpbmQ6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfc3RyZWFtSWQ6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfbWFuaWZlc3RVUkk6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfb3B0aW9uczogQ2h1bmtlZFN0cmVhbWluZ09wdGlvbnM7XG4gIHByaXZhdGUgX3BsYXllcjogSUhsc1BsYXllclR5cGU7XG5cbiAgY29uc3RydWN0b3IodmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50LCBraW5kOiBzdHJpbmcsIHN0cmVhbUlkOiBzdHJpbmcsIG1hbmlmZXN0VVJJOiBzdHJpbmcsIG9wdGlvbnM6IENodW5rZWRTdHJlYW1pbmdPcHRpb25zKSB7XG4gICAgdGhpcy5fdmlkZW9FbGVtZW50ID0gdmlkZW9FbGVtZW50O1xuICAgIHRoaXMuX2tpbmQgPSBraW5kO1xuICAgIHRoaXMuX3N0cmVhbUlkID0gc3RyZWFtSWQ7XG4gICAgdGhpcy5fbWFuaWZlc3RVUkkgPSBlbmNvZGVVUkkobWFuaWZlc3RVUkkpLnJlcGxhY2UoL1sjXS9nLCAnJTIzJyk7XG4gICAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnM7XG4gIH1cblxuICBzdGFydCgpOiB2b2lkIHtcbiAgICBpZiAoQ2h1bmtlZFN0cmVhbWluZy5obHNQbGF5ZXIpIHtcbiAgICAgIGlmIChDaHVua2VkU3RyZWFtaW5nLmhsc1BsYXllci5pc1N1cHBvcnRlZCgpKSB7XG4gICAgICAgIHRoaXMuX3BsYXllciA9IG5ldyBDaHVua2VkU3RyZWFtaW5nLmhsc1BsYXllcih7XG4gICAgICAgICAgZW5hYmxlV29ya2VyOiB0cnVlLFxuICAgICAgICAgIG1heEJ1ZmZlckxlbmd0aDogMSxcbiAgICAgICAgICBiYWNrQnVmZmVyTGVuZ3RoOiAwLFxuICAgICAgICAgIGxpdmVTeW5jRHVyYXRpb246IDcsXG4gICAgICAgICAgbGl2ZUR1cmF0aW9uSW5maW5pdHk6IHRydWUsXG4gICAgICAgICAgbGl2ZU1heExhdGVuY3lEdXJhdGlvbjogSW5maW5pdHksXG4gICAgICAgICAgaGlnaEJ1ZmZlcldhdGNoZG9nUGVyaW9kOiAxXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLl9wbGF5ZXIubG9hZFNvdXJjZSh0aGlzLl9tYW5pZmVzdFVSSSk7XG4gICAgICAgIHRoaXMuX3BsYXllci5hdHRhY2hNZWRpYSh0aGlzLl92aWRlb0VsZW1lbnQpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLl92aWRlb0VsZW1lbnQuY2FuUGxheVR5cGUoJ2FwcGxpY2F0aW9uL3ZuZC5hcHBsZS5tcGVndXJsJykpIHtcbiAgICAgICAgdGhpcy5fdmlkZW9FbGVtZW50LnNyYyA9IHRoaXMuX21hbmlmZXN0VVJJO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlzU3VwcG9ydGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBDaHVua2VkU3RyZWFtaW5nLmhsc1BsYXllciAmJiBDaHVua2VkU3RyZWFtaW5nLmhsc1BsYXllci5pc1N1cHBvcnRlZCgpO1xuICB9XG5cbiAgZ2V0U3RhdHMoKTogQ2h1bmtlZFN0cmVhbWluZ1N0YXRpc3RpY3Mge1xuICAgIGlmICghdGhpcy5fcGxheWVyKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB3aWR0aDogMCxcbiAgICAgICAgaGVpZ2h0OiAwLFxuICAgICAgICBjdXJyZW50VGltZTogMC4wLFxuICAgICAgICBsYWc6IDAuMCxcbiAgICAgICAgbmV0d29ya1N0YXRlOiBOZXR3b3JrU3RhdGVzLk5ldHdvcmtOb1NvdXJjZVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0aXN0aWNzID0ge1xuICAgICAgd2lkdGg6IHRoaXMuX3BsYXllci5tZWRpYS5vZmZzZXRXaWR0aCxcbiAgICAgIGhlaWdodDogdGhpcy5fcGxheWVyLm1lZGlhLm9mZnNldEhlaWdodCxcbiAgICAgIGN1cnJlbnRUaW1lOiB0aGlzLl9wbGF5ZXIubWVkaWEuY3VycmVudFRpbWUsXG4gICAgICBsYWc6IDAuMCxcbiAgICAgIG5ldHdvcmtTdGF0ZTogTmV0d29ya1N0YXRlcy5OZXR3b3JrSWRsZSxcbiAgICAgIGRhdGFCdWZmZXJlZDogMC4wXG4gICAgfTtcblxuICAgIGlmICh0aGlzLl92aWRlb0VsZW1lbnQuYnVmZmVyZWQgJiYgdGhpcy5fdmlkZW9FbGVtZW50LmJ1ZmZlcmVkLmxlbmd0aCkge1xuICAgICAgc3RhdGlzdGljcy5kYXRhQnVmZmVyZWQgPSB0aGlzLl92aWRlb0VsZW1lbnQuYnVmZmVyZWQuZW5kKDApO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9wbGF5ZXIuc3RyZWFtQ29udHJvbGxlci5zdGF0ZSA9PT0gJ0lETEUnKSB7XG4gICAgICBzdGF0aXN0aWNzLm5ldHdvcmtTdGF0ZSA9IE5ldHdvcmtTdGF0ZXMuTmV0d29ya0lkbGU7XG4gICAgfSBlbHNlIGlmICh0aGlzLl9wbGF5ZXIuc3RyZWFtQ29udHJvbGxlci5zdGF0ZSA9PT0gJ0VSUk9SJyB8fCB0aGlzLl9wbGF5ZXIuc3RyZWFtQ29udHJvbGxlci5zdGF0ZSA9PT0gJ0VOREVEJykge1xuICAgICAgc3RhdGlzdGljcy5uZXR3b3JrU3RhdGUgPSBOZXR3b3JrU3RhdGVzLk5ldHdvcmtOb1NvdXJjZTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX3BsYXllci5zdHJlYW1Db250cm9sbGVyLnN0YXRlLmluY2x1ZGVzKCdMT0FESU5HJykgfHwgdGhpcy5fcGxheWVyLnN0cmVhbUNvbnRyb2xsZXIuc3RhdGUuaW5jbHVkZXMoJ1dBSVRJTkcnKSkge1xuICAgICAgc3RhdGlzdGljcy5uZXR3b3JrU3RhdGUgPSBOZXR3b3JrU3RhdGVzLk5ldHdvcmtMb2FkaW5nO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0aXN0aWNzLm5ldHdvcmtTdGF0ZSA9IE5ldHdvcmtTdGF0ZXMuTmV0d29ya0VtcHR5O1xuICAgIH1cblxuICAgIGNvbnN0IGN1cnJlbnRUaW1lID0gdGhpcy5fdmlkZW9FbGVtZW50WydjdXJyZW50VGltZSddIHx8IDA7XG4gICAgY29uc3QgdHJ1ZUN1cnJlbnRUaW1lID0gKERhdGUubm93KCkgLSB0aGlzLl9vcHRpb25zLm9yaWdpblN0YXJ0VGltZSkgLyAxMDAwO1xuXG4gICAgc3RhdGlzdGljcy5sYWcgPSBNYXRoLm1heCgwLjAsIChjdXJyZW50VGltZSArICh0aGlzLl9vcHRpb25zLmxhZyAvIDEwMDApKSAtIHRydWVDdXJyZW50VGltZSk7XG5cbiAgICByZXR1cm4gc3RhdGlzdGljcztcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3BsYXllciAmJiB0aGlzLl9wbGF5ZXIuZGVzdHJveSkge1xuICAgICAgdGhpcy5fcGxheWVyLmRlc3Ryb3koKTtcblxuICAgICAgdGhpcy5fcGxheWVyID0gbnVsbDtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuZXhwb3J0IGVudW0gTmV0d29ya1N0YXRlcyB7XG4gIE5ldHdvcmtFbXB0eSxcbiAgTmV0d29ya0lkbGUsXG4gIE5ldHdvcmtMb2FkaW5nLFxuICBOZXR3b3JrTm9Tb3VyY2Vcbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBJUGVlckNvbm5lY3Rpb24gZnJvbSAnLi4vLi4vcnRjL0lQZWVyQ29ubmVjdGlvbic7XG5pbXBvcnQgU0RLIGZyb20gJy4uL1NESyc7XG5pbXBvcnQgRGlzcG9zYWJsZUxpc3QgZnJvbSAnLi4vLi4vbGFuZy9EaXNwb3NhYmxlTGlzdCc7XG5pbXBvcnQgR2FyYmFnZUNvbGxlY3Rvck1hbmFnZXIgZnJvbSAnLi4vLi4vZG9tL0dhcmJhZ2VDb2xsZWN0b3JNYW5hZ2VyJztcbmltcG9ydCB7SVN0cmVhbX0gZnJvbSAnLi9JU3RyZWFtJztcbmltcG9ydCB7U2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXN9IGZyb20gJy4uL2Rpc2NvdmVyeS9FbmRQb2ludCc7XG5pbXBvcnQgUGVlckNvbm5lY3Rpb25TZXJ2aWNlIGZyb20gJy4uLy4uL3J0Yy9QZWVyQ29ubmVjdGlvblNlcnZpY2UnO1xuaW1wb3J0IERpc2NvdmVyeSBmcm9tICcuLi9kaXNjb3ZlcnkvRGlzY292ZXJ5JztcbmltcG9ydCBGZWF0dXJlRW5hYmxlbWVudCBmcm9tICcuLi8uLi9lbnZpcm9ubWVudC9GZWF0dXJlRW5hYmxlbWVudCc7XG5pbXBvcnQgQ2hhbm5lbFN0YXRlIGZyb20gJy4uL2NoYW5uZWxzL0NoYW5uZWxTdGF0ZSc7XG5pbXBvcnQgYXNzZXJ0VW5yZWFjaGFibGUgZnJvbSAnLi4vLi4vbGFuZy9hc3NlcnRVbnJlYWNoYWJsZSc7XG5pbXBvcnQgUnRjQ29ubmVjdGlvbk1vbml0b3IgZnJvbSAnLi4vLi4vcnRjL1J0Y0Nvbm5lY3Rpb25Nb25pdG9yJztcbmltcG9ydCBEdXJhdGlvbnMgZnJvbSAnLi4vLi4vdGltZS9EdXJhdGlvbic7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IENoYW5uZWxDb250ZXh0IGZyb20gJy4uL2NvbnRleHQvQ2hhbm5lbENvbnRleHQnO1xuaW1wb3J0IFJ0Y0NvbmZpZ3VyYXRpb25NYW5hZ2VyIGZyb20gJy4uLy4uL3J0Yy9SdGNDb25maWd1cmF0aW9uTWFuYWdlcic7XG5pbXBvcnQgUGVlckNvbm5lY3Rpb25Db250ZXh0IGZyb20gJy4uL2NvbnRleHQvUGVlckNvbm5lY3Rpb25Db250ZXh0JztcbmltcG9ydCBTdHJlYW1UcmFuc2Zvcm1Db250ZXh0IGZyb20gJy4uL2NvbnRleHQvU3RyZWFtVHJhbnNmb3JtQ29udGV4dCc7XG5pbXBvcnQgSW5zZXJ0YWJsZVN0cmVhbXMgZnJvbSAnLi4vdHJhbnNmb3JtYXRpb24vSW5zZXJ0YWJsZVN0cmVhbXMnO1xuaW1wb3J0IFNkcFBhcnNlciBmcm9tICcuLi8uLi9ydGMvU2RwUGFyc2VyJztcblxuY29uc3QgaWNlQ2FuZGlkYXRlQWNjdW11bGF0aW9uSW50ZXJ2YWwgPSAxMDA7XG5jb25zdCBkZWZhdWx0U3RyZWFtU2V0dXBUaW1lb3V0ID0gMzAwMDA7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlYWxUaW1lU3RyZWFtIGltcGxlbWVudHMgSVN0cmVhbSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdSZWFsVGltZVN0cmVhbScpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9jaGFubmVsQ29udGV4dDogQ2hhbm5lbENvbnRleHQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BlZXJDb25uZWN0aW9uQ29udGV4dDogUGVlckNvbm5lY3Rpb25Db250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0OiBTdHJlYW1UcmFuc2Zvcm1Db250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9oYW5kbGVTdHJlYW1GYWlsdXJlOiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9kaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3Q7XG5cbiAgY29uc3RydWN0b3IoY2hhbm5lbENvbnRleHQsIHBlZXJDb25uZWN0aW9uQ29udGV4dCwgc3RyZWFtVHJhbnNmb3JtQ29udGV4dCwgaGFuZGxlU3RyZWFtRmFpbHVyZTogKCkgPT4gUHJvbWlzZTx2b2lkPikge1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0ID0gY2hhbm5lbENvbnRleHQ7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0ID0gcGVlckNvbm5lY3Rpb25Db250ZXh0O1xuICAgIHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQgPSBzdHJlYW1UcmFuc2Zvcm1Db250ZXh0O1xuICAgIHRoaXMuX2hhbmRsZVN0cmVhbUZhaWx1cmUgPSBoYW5kbGVTdHJlYW1GYWlsdXJlO1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuZGlzcG9zYWJsZXMuYWRkKHRoaXMpO1xuICB9XG5cbiAgc3RhcnQodXJpLCB0b2tlbiwgbGlzdGVuT25TdHJlYW1TZXR1cCwgcGxheU1lZGlhU3RyZWFtSW5WaWRlb0VsZW1lbnQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBlbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXMgPSB0eXBlb2YgdGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5lbmNvZGVkVmlkZW9TdHJlYW1TaW5rID09PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiB0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0LmVuY29kZWRBdWRpb1N0cmVhbVNpbmsgPT09ICdmdW5jdGlvbic7XG5cbiAgICByZXR1cm4gUHJvbWlzZS5hbGwoW1xuICAgICAgRGlzY292ZXJ5LmRpc2NvdmVyQ2xvc2VzdEVuZFBvaW50V2l0aENhY2hpbmcodXJpKSxcbiAgICAgIFBlZXJDb25uZWN0aW9uU2VydmljZS5jcmVhdGVQZWVyQ29ubmVjdGlvbk9mZmVyKCdyZWN2b25seScsIGVuY29kZWRJbnNlcnRhYmxlU3RyZWFtcylcbiAgICAgICAgLnRoZW4oKHtsb2NhbE9mZmVyLCBwZWVyQ29ubmVjdGlvbn0pID0+IHtcbiAgICAgICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWUgPSBwZWVyQ29ubmVjdGlvbjtcblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBsb2NhbE9mZmVyLFxuICAgICAgICAgICAgcGVlckNvbm5lY3Rpb25cbiAgICAgICAgICB9O1xuICAgICAgICB9KVxuICAgIF0pXG4gICAgICAudGhlbigoW2VuZFBvaW50LCB7bG9jYWxPZmZlciwgcGVlckNvbm5lY3Rpb259XSkgPT4ge1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5vbmxpbmUudmFsdWUgPSB0cnVlO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZSA9IGVuZFBvaW50O1xuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ29ubmVjdGluZyB0byBbJXNdJywgZW5kUG9pbnQudG9TdHJpbmcoKSk7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdMb2NhbCBvZmZlcjpcXG4nICsgbG9jYWxPZmZlci5zZHApO1xuXG4gICAgICAgIGlmIChGZWF0dXJlRW5hYmxlbWVudC5jbGllbnRPZmZlckRpc2FibGVkIHx8ICFwZWVyQ29ubmVjdGlvbi5zdXBwb3J0c1NldENvbmZpZ3VyYXRpb24gfHwgIXBlZXJDb25uZWN0aW9uLnN1cHBvcnRzR2V0Q29uZmlndXJhdGlvbikge1xuICAgICAgICAgIHBlZXJDb25uZWN0aW9uLmNsb3NlKCk7XG4gICAgICAgICAgcGVlckNvbm5lY3Rpb24uZGlzcG9zZSgpO1xuXG4gICAgICAgICAgaWYgKFNESy5mb3JjZUdhcmJhZ2VDb2xsZWN0aW9uT25SZXN0YXJ0ICYmICEoRmVhdHVyZUVuYWJsZW1lbnQuaXNNb2JpbGUgJiYgU0RLLnNraXBHYXJiYWdlQ29sbGVjdGlvbk9uTW9iaWxlRGV2aWNlcykpIHtcbiAgICAgICAgICAgIEdhcmJhZ2VDb2xsZWN0b3JNYW5hZ2VyLmZvcmNlR2FyYmFnZUNvbGxlY3Rpb24oKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBwZWVyQ29ubmVjdGlvbiA9IG51bGw7XG4gICAgICAgICAgbG9jYWxPZmZlciA9IG51bGw7XG4gICAgICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlID0gcGVlckNvbm5lY3Rpb247XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZW5kUG9pbnQuc3Vic2NyaWJlKHRva2VuLCBsb2NhbE9mZmVyLCB0aGlzLl9jaGFubmVsQ29udGV4dC5mYWlsdXJlQ291bnQudmFsdWUpO1xuICAgICAgfSlcbiAgICAgIC50aGVuKCh7c3RhdHVzLCBzdHJlYW0sIHJ0Y0NvbmZpZ3VyYXRpb24sIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UsIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSwgY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZSwgbGFnfSkgPT4ge1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUgPSBzdHJlYW07XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxhZy52YWx1ZSA9IGxhZztcblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hcHBseVNlc3Npb25BbmRTdHJlYW1Qcm9wZXJ0aWVzVG9WaWRlb0VsZW1lbnQoKTtcblxuICAgICAgICB0aGlzLl9sb2dnZXIuZGVidWcoXG4gICAgICAgICAgJ1slc10gU3Vic2NyaWJlIGNvbXBsZXRlZCBbJXNdIFslal0gWyVqXSBbJWpdIFslal0nLFxuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLFxuICAgICAgICAgIHN0YXR1cyxcbiAgICAgICAgICBydGNDb25maWd1cmF0aW9uLFxuICAgICAgICAgIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UsXG4gICAgICAgICAgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLFxuICAgICAgICAgIGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2VcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IHRoaXMuX2NoYW5uZWxDb250ZXh0Lm1hcFN1YnNjcmliZVN0YXR1c1RvQ2hhbm5lbFN0YXR1cyhzdGF0dXMpO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmFwcGx5U3RhdHVzKHN0YXR1cyk7XG5cbiAgICAgICAgaWYgKHN0YXR1cyAhPT0gJ29rJykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmFwcGx5UnRjQ29uZmlndXJhdGlvbih0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWUsIHJ0Y0NvbmZpZ3VyYXRpb24pXG4gICAgICAgICAgLnRoZW4ocGVlckNvbm5lY3Rpb24gPT4ge1xuICAgICAgICAgICAgbGV0IHN1Ym1pdENhbmRpZGF0ZXNUaW1lb3V0O1xuICAgICAgICAgICAgbGV0IGNhbmNlbERpc2NvdmVyeSA9IGZhbHNlO1xuICAgICAgICAgICAgbGV0IGRpc2NvdmVyeUNvbXBsZXRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgY29uc3QgY2FuZGlkYXRlczogUlRDSWNlQ2FuZGlkYXRlW10gPSBbXTtcblxuICAgICAgICAgICAgaWYgKCF0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWUpIHtcbiAgICAgICAgICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlID0gcGVlckNvbm5lY3Rpb247XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLm9uaWNlY2FuZGlkYXRlID0gKGUpOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSAhPT0gc3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZSAhPT0gcGVlckNvbm5lY3Rpb24pIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoY2FuY2VsRGlzY292ZXJ5KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKCFTREsuc2VuZExvY2FsQ2FuZGlkYXRlcy52YWx1ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChlLmNhbmRpZGF0ZSAmJiBlLmNhbmRpZGF0ZS5jYW5kaWRhdGUpIHtcbiAgICAgICAgICAgICAgICBjYW5kaWRhdGVzLnB1c2goZS5jYW5kaWRhdGUpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRpc2NvdmVyeUNvbXBsZXRlZCA9IHRydWU7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoIXN1Ym1pdENhbmRpZGF0ZXNUaW1lb3V0KSB7XG4gICAgICAgICAgICAgICAgc3VibWl0Q2FuZGlkYXRlc1RpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUgIT09IHN0cmVhbSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIGlmIChjYW5jZWxEaXNjb3ZlcnkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUuYWRkSWNlQ2FuZGlkYXRlcyhzdHJlYW0sIGNhbmRpZGF0ZXMsIGRpc2NvdmVyeUNvbXBsZXRlZClcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4oKHtzdGF0dXMsIG9wdGlvbnN9KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cyAhPT0gJ29rJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLndhcm4oJ1slc10gRmFpbGVkIHRvIGFkZCBJQ0UgY2FuZGlkYXRlcyB3aXRoIHJlYXNvbiBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIHN0YXR1cyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5pbmNsdWRlcygnY2FuY2VsJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbmNlbERpc2NvdmVyeSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gQWRkZWQgSUNFIGNhbmRpZGF0ZXMgd2l0aCByZWFzb24gWyVzXSBhbmQgb3B0aW9ucyBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIHN0YXR1cywgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ1slc10gRmFpbGVkIHRvIGFkZCBJQ0UgY2FuZGlkYXRlcycsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBlKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSwgaWNlQ2FuZGlkYXRlQWNjdW11bGF0aW9uSW50ZXJ2YWwpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5vbmljZWNvbm5lY3Rpb25zdGF0ZWNoYW5nZSA9ICgpOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSAhPT0gc3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZSAhPT0gcGVlckNvbm5lY3Rpb24pIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjb25zdCByZXRyeUNhbGxiYWNrID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgIC8vIElmIHdlIHN0b3Agbm9ybWFsbHkgdGhlIHBlZXIgY29ubmVjdGlvbiBpcyB1bnJlZ2lzdGVyZWQgZmlyc3QuXG4gICAgICAgICAgICAgICAgLy8gVGh1cyBhbnl0aW1lIHdlIHNlZSBhIGNsb3NlZCBwZWVyIGNvbm5lY3Rpb24gdGhhdCBpcyBzdGlsbCB2YWxpZCwgaXQgaXMgYW4gZXJyb3IuXG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuQ29ubmVjdGlvbkVycm9yO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnBhdXNlKCk7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuc3JjT2JqZWN0ID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5faGFuZGxlU3RyZWFtRmFpbHVyZSgpXG4gICAgICAgICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAnWyVzXSBGYWlsZWQgaGFuZGxpbmcgc3RyZWFtIGZhaWx1cmUgYWZ0ZXIgcGVlciBjb25uZWN0aW9uIHN0b3BwZWQgd2l0aCBzdGF0ZSBbJXNdJyxcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCxcbiAgICAgICAgICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgZVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgc3dpdGNoIChwZWVyQ29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdjaGVja2luZyc6XG4gICAgICAgICAgICAgICAgY2FzZSAnY29tcGxldGVkJzpcbiAgICAgICAgICAgICAgICBjYXNlICdjb25uZWN0ZWQnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ25ldyc6XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgICAgICAgICBjYXNlICdkaXNjb25uZWN0ZWQnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ2ZhaWxlZCc6XG4gICAgICAgICAgICAgICAgICBpZiAobmF2aWdhdG9yLm9uTGluZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBJQ0UgY29ubmVjdGlvbiBzdGF0ZSBjaGFuZ2VkIHRvIFslc10sIHRyeWluZyB0byByZWNvbm5lY3QnLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgcGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWNvbm5lY3RQZWVyQ29ubmVjdGlvbihwZWVyQ29ubmVjdGlvbiwgcmV0cnlDYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICBjYXNlICdjbG9zZWQnOlxuICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gSUNFIGNvbm5lY3Rpb24gc3RhdGUgY2hhbmdlZCB0byBbJXNdLCByZXRyeWluZyB0byBjb25uZWN0JywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIHBlZXJDb25uZWN0aW9uLmljZUNvbm5lY3Rpb25TdGF0ZSk7XG5cbiAgICAgICAgICAgICAgICAgIHJldHJ5Q2FsbGJhY2soKTtcblxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZShwZWVyQ29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGUpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCBtZWRpYVN0cmVhbVByb21pc2UgPSBuZXcgUHJvbWlzZTxNZWRpYVN0cmVhbT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoIUZlYXR1cmVFbmFibGVtZW50Lm9uVHJhY2tEaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4gcmVqZWN0KG5ldyBFcnJvcignU3RyZWFtIHNldHVwIHRpbWVkIG91dCcpKSwgZGVmYXVsdFN0cmVhbVNldHVwVGltZW91dCk7XG5cbiAgICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5vbnRyYWNrID0gKGUpOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgICAgICAgICAgICAgICAgcmVzb2x2ZShlLnN0cmVhbXNbMF0pO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjb25zdCB0cmFja0xpc3RlbmVyID0gKGUpOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVzZS1iZWZvcmUtZGVmaW5lXG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG4gICAgICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcigndHJhY2snLCB0cmFja0xpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5yZW1vdmVFdmVudExpc3RlbmVyKCdhZGRzdHJlYW0nLCB0cmFja0xpc3RlbmVyKTtcblxuICAgICAgICAgICAgICAgIGlmIChlLnN0cmVhbXMpIHtcbiAgICAgICAgICAgICAgICAgIHJlc29sdmUoZS5zdHJlYW1zWzBdKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgcmVzb2x2ZShlLnN0cmVhbSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgIGNvbnN0IHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RyYWNrJywgdHJhY2tMaXN0ZW5lcik7XG4gICAgICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWRkc3RyZWFtJywgdHJhY2tMaXN0ZW5lcik7XG4gICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignU3RyZWFtIHNldHVwIHRpbWVkIG91dCcpKTtcbiAgICAgICAgICAgICAgfSwgZGVmYXVsdFN0cmVhbVNldHVwVGltZW91dCk7XG5cbiAgICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24uYWRkRXZlbnRMaXN0ZW5lcigndHJhY2snLCB0cmFja0xpc3RlbmVyKTtcbiAgICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24uYWRkRXZlbnRMaXN0ZW5lcignYWRkc3RyZWFtJywgdHJhY2tMaXN0ZW5lcik7XG5cbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPihyZXNvbHZlID0+IHtcbiAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgIGlmICghc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIFNldCBsb2NhbCBTRFAgb2ZmZXIgWyVzXScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbi5zZHApO1xuXG4gICAgICAgICAgICAgIHJldHVybiBwZWVyQ29ubmVjdGlvbi5zZXRMb2NhbERlc2NyaXB0aW9uKHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKVxuICAgICAgICAgICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIEZhaWxlZCB0byBzZXQgbG9jYWwgZGVzY3JpcHRpb24gWyVqXSB3aXRoIG1lc3NhZ2UgWyVzXScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbiwgZS5tZXNzYWdlKTtcblxuICAgICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoIWNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBTZXQgcmVtb3RlIFNEUCBhbnN3ZXIgWyVzXScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbi5zZHApO1xuXG4gICAgICAgICAgICAgIHJldHVybiBwZWVyQ29ubmVjdGlvbi5zZXRSZW1vdGVEZXNjcmlwdGlvbihjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbilcbiAgICAgICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBGYWlsZWQgdG8gc2V0IHJlbW90ZSBkZXNjcmlwdGlvbiBbJWpdIHdpdGggbWVzc2FnZSBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uLCBlLm1lc3NhZ2UpO1xuXG4gICAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgIGlmICghY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gU2V0IHJlbW90ZSBTRFAgb2ZmZXIgWyVzXScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uLnNkcCk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIHBlZXJDb25uZWN0aW9uLnNldFJlbW90ZURlc2NyaXB0aW9uKGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24pXG4gICAgICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gRmFpbGVkIHRvIHNldCByZW1vdGUgZGVzY3JpcHRpb24gWyVqXSB3aXRoIG1lc3NhZ2UgWyVzXScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uLCBlLm1lc3NhZ2UpO1xuXG4gICAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHBlZXJDb25uZWN0aW9uLmNyZWF0ZUFuc3dlcih7XG4gICAgICAgICAgICAgICAgICAgIG9mZmVyVG9SZWNlaXZlQXVkaW86IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIG9mZmVyVG9SZWNlaXZlVmlkZW86IHRydWVcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pLnRoZW4oYW5zd2VyID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIFNldCBsb2NhbCBTRFAgYW5zd2VyIFslal0nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgYW5zd2VyKTtcblxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlLnNldFJlbW90ZURlc2NyaXB0aW9uKHN0cmVhbSwgYW5zd2VyKTtcbiAgICAgICAgICAgICAgICB9KS50aGVuKCh7c3RhdHVzLCBzZXNzaW9uRGVzY3JpcHRpb259KSA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IHRoaXMubWFwU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXNUb0NoYW5uZWxTdGF0dXMoc3RhdHVzKTtcblxuICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cyAhPT0gJ29rJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YW5kYnkudmFsdWUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdG9wcGVkLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICByZXR1cm4gcGVlckNvbm5lY3Rpb24uc2V0TG9jYWxEZXNjcmlwdGlvbihzZXNzaW9uRGVzY3JpcHRpb24pXG4gICAgICAgICAgICAgICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBGYWlsZWQgdG8gc2V0IGxvY2FsIGRlc2NyaXB0aW9uIFslal0gd2l0aCBtZXNzYWdlIFslc10nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgc2Vzc2lvbkRlc2NyaXB0aW9uLCBlLm1lc3NhZ2UpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgbGlzdGVuT25TdHJlYW1TZXR1cC5zdWNjZXNzKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkKTtcblxuICAgICAgICAgICAgICByZXR1cm4gbWVkaWFTdHJlYW1Qcm9taXNlO1xuICAgICAgICAgICAgfSkudGhlbihtZWRpYVN0cmVhbSA9PiB7XG4gICAgICAgICAgICAgIGlmICh0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0Lmhhc0VuY29kZWRJbnNlcnRhYmxlU3RyZWFtcy52YWx1ZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcnNlZFJlbW90ZURlc2NyaXB0aW9uID0gbmV3IFNkcFBhcnNlcihwZWVyQ29ubmVjdGlvbi5jdXJyZW50UmVtb3RlRGVzY3JpcHRpb24uc2RwKTtcbiAgICAgICAgICAgICAgICBjb25zdCB7ZGlzcG9zYWJsZXN9ID0gSW5zZXJ0YWJsZVN0cmVhbXMuYXBwbHlFbmNvZGVkU3RyZWFtVHJhbnNmb3JtYXRpb24obWVkaWFTdHJlYW0sIHBlZXJDb25uZWN0aW9uLmdldFJlY2VpdmVycygpLCB0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0LmVuY29kZWRWaWRlb1N0cmVhbVNpbmssIHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuZW5jb2RlZEF1ZGlvU3RyZWFtU2luaywgcGFyc2VkUmVtb3RlRGVzY3JpcHRpb24udmlkZW9Db2RlYywgcGFyc2VkUmVtb3RlRGVzY3JpcHRpb24uYXVkaW9Db2RlYyk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQoZGlzcG9zYWJsZXMpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuaGFzSW5zZXJ0YWJsZVN0cmVhbXMudmFsdWUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB7dHJhbnNmb3JtZWRTdHJlYW0sIGRpc3Bvc2FibGVzfSA9IEluc2VydGFibGVTdHJlYW1zLmFwcGx5SW5zZXJ0YWJsZVN0cmVhbVRyYW5zZm9ybWF0aW9uKG1lZGlhU3RyZWFtLCB0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0LnZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2ssIHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuYXVkaW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjayk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQoZGlzcG9zYWJsZXMpO1xuICAgICAgICAgICAgICAgIG1lZGlhU3RyZWFtID0gdHJhbnNmb3JtZWRTdHJlYW07XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQubWVkaWFTdHJlYW0udmFsdWUgPSBtZWRpYVN0cmVhbTtcblxuICAgICAgICAgICAgICBjb25zdCBydGNDb25uZWN0aW9uTW9uaXRvciA9IG5ldyBSdGNDb25uZWN0aW9uTW9uaXRvcihwZWVyQ29ubmVjdGlvbiwgbWVkaWFTdHJlYW0sIHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlLnJvdW5kVHJpcFRpbWUgLyA0KTtcblxuICAgICAgICAgICAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQocnRjQ29ubmVjdGlvbk1vbml0b3IpO1xuXG4gICAgICAgICAgICAgIGNvbnN0IHJ0Y0Nvbm5lY3Rpb25Nb25pdG9yU3RhdGlzdGljU3Vic2NyaXB0aW9uID0gcnRjQ29ubmVjdGlvbk1vbml0b3IucnRjU3RhdGlzdGljLnN1YnNjcmliZShzdGF0aXN0aWNzID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNTdGF0aXN0aWNzLnZhbHVlID0gc3RhdGlzdGljcztcblxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5fY2hhbm5lbENvbnRleHQucnRjVmlkZW9TdGF0aXN0aWMgJiYgIXRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNBdWRpb1N0YXRpc3RpYyA9IHN0YXRpc3RpY3MuYXVkaW87XG4gICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYyA9IHN0YXRpc3RpY3MudmlkZW87XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBsZXQgYXVkaW9UcmFja0ZhaWxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGxldCB2aWRlb1RyYWNrRmFpbGVkID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICBpZiAoc3RhdGlzdGljcy5hdWRpbykge1xuICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljLnRpbWVzdGFtcCAhPT0gc3RhdGlzdGljcy5hdWRpby50aW1lc3RhbXApIHtcbiAgICAgICAgICAgICAgICAgICAgYXVkaW9UcmFja0ZhaWxlZCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljLmJ5dGVzUmVjZWl2ZWQgPT09IHN0YXRpc3RpY3MuYXVkaW8uYnl0ZXNSZWNlaXZlZDtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoYXVkaW9UcmFja0ZhaWxlZCAmJiBuYXZpZ2F0b3Iub25MaW5lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAgICAgICAgICAgICAgICAgICAnWyVzXSBBdWRpbyB0cmFjayBmYWlsZWQgd2l0aCBsYXN0IGJ5dGVzUmVjZWl2ZWQgWyVzXSBpcyBlcXVhbCB0byBwcmV2aW91cyBieXRlc1JlY2VpdmVkIFslc10gd2l0aGluIFslc10nLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0aXN0aWNzLmF1ZGlvLmJ5dGVzUmVjZWl2ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNBdWRpb1N0YXRpc3RpYy5ieXRlc1JlY2VpdmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IER1cmF0aW9ucyhzdGF0aXN0aWNzLmF1ZGlvLnRpbWVzdGFtcCAtIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljLnRpbWVzdGFtcCkudG9Jc29TdHJpbmcoKVxuICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNBdWRpb1N0YXRpc3RpYyA9IHN0YXRpc3RpY3MuYXVkaW87XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHN0YXRpc3RpY3MudmlkZW8pIHtcbiAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYyAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYy50aW1lc3RhbXAgIT09IHN0YXRpc3RpY3MudmlkZW8udGltZXN0YW1wKSB7XG4gICAgICAgICAgICAgICAgICAgIHZpZGVvVHJhY2tGYWlsZWQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYyAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYy5ieXRlc1JlY2VpdmVkID09PSBzdGF0aXN0aWNzLnZpZGVvLmJ5dGVzUmVjZWl2ZWQ7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHZpZGVvVHJhY2tGYWlsZWQgJiYgbmF2aWdhdG9yLm9uTGluZSkge1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgICAgICAgICAgICAgICAgICAgJ1slc10gVmlkZW8gdHJhY2sgZmFpbGVkIHdpdGggbGFzdCBieXRlc1JlY2VpdmVkIFslc10gaXMgZXF1YWwgdG8gcHJldmlvdXMgYnl0ZXNSZWNlaXZlZCBbJXNdIHdpdGhpbiBbJXNdJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGlzdGljcy52aWRlby5ieXRlc1JlY2VpdmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucnRjVmlkZW9TdGF0aXN0aWMuYnl0ZXNSZWNlaXZlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBEdXJhdGlvbnMoc3RhdGlzdGljcy52aWRlby50aW1lc3RhbXAgLSB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYy50aW1lc3RhbXApLnRvSXNvU3RyaW5nKClcbiAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucnRjVmlkZW9TdGF0aXN0aWMgPSBzdGF0aXN0aWNzLnZpZGVvO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICghbmF2aWdhdG9yLm9uTGluZSkge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuT2ZmbGluZTtcblxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh2aWRlb1RyYWNrRmFpbGVkIHx8IGF1ZGlvVHJhY2tGYWlsZWQpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHJldHJ5Q2FsbGJhY2sgPSAoKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkNvbm5lY3Rpb25FcnJvcjtcblxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnBhdXNlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnNyY09iamVjdCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgIHJ0Y0Nvbm5lY3Rpb25Nb25pdG9yLmRpc3Bvc2UoKTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5faGFuZGxlU3RyZWFtRmFpbHVyZSgpXG4gICAgICAgICAgICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAnWyVzXSBGYWlsZWQgaGFuZGxpbmcgc3RyZWFtIGZhaWx1cmUgYWZ0ZXIgdHJhY2sgc3RvcHBlZCB3aXRoIHN0YXRlIFslc10nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBlXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgdGhpcy5yZWNvbm5lY3RQZWVyQ29ubmVjdGlvbihwZWVyQ29ubmVjdGlvbiwgcmV0cnlDYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzID0gMDtcblxuICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlICE9PSBDaGFubmVsU3RhdGUuUmVjb25uZWN0aW5nICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlICE9PSBDaGFubmVsU3RhdGUuT2ZmbGluZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA/IENoYW5uZWxTdGF0ZS5QbGF5aW5nIDogQ2hhbm5lbFN0YXRlLlBhdXNlZDtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIHN0YXRlIHJlc3RvcmVkIHRvIFslc10gYWZ0ZXIgcmVjb25uZWN0aW5nJywgQ2hhbm5lbFN0YXRlW3RoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQocnRjQ29ubmVjdGlvbk1vbml0b3JTdGF0aXN0aWNTdWJzY3JpcHRpb24pO1xuXG4gICAgICAgICAgICAgIGlmICghU0RLLmF1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlBhdXNlZDtcblxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHJldHVybiBwbGF5TWVkaWFTdHJlYW1JblZpZGVvRWxlbWVudChtZWRpYVN0cmVhbSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBhcHBseVJ0Y0NvbmZpZ3VyYXRpb24oXG4gICAgb3B0aW9uYWxQZWVyQ29ubmVjdGlvbjogSVBlZXJDb25uZWN0aW9uIHwgbnVsbCxcbiAgICBydGNDb25maWd1cmF0aW9uOiBSVENDb25maWd1cmF0aW9uKTogUHJvbWlzZTxJUGVlckNvbm5lY3Rpb24+IHtcbiAgICBpZiAoIW9wdGlvbmFsUGVlckNvbm5lY3Rpb24pIHtcbiAgICAgIHJ0Y0NvbmZpZ3VyYXRpb24gPSBSdGNDb25maWd1cmF0aW9uTWFuYWdlci50cnVuY2F0ZUljZVNlcnZlcnMocnRjQ29uZmlndXJhdGlvbik7XG5cbiAgICAgIHJldHVybiBTREsucGVlckNvbm5lY3Rpb25GYWN0b3J5LnZhbHVlLmNyZWF0ZVBlZXJDb25uZWN0aW9uKHJ0Y0NvbmZpZ3VyYXRpb24pO1xuICAgIH1cblxuICAgIGNvbnN0IG5ld1J0Y0NvbmZpZ3VyYXRpb24gPSB7XG4gICAgICAuLi5vcHRpb25hbFBlZXJDb25uZWN0aW9uLmdldENvbmZpZ3VyYXRpb24oKSxcbiAgICAgIC4uLnJ0Y0NvbmZpZ3VyYXRpb25cbiAgICB9O1xuXG4gICAgb3B0aW9uYWxQZWVyQ29ubmVjdGlvbi5zZXRDb25maWd1cmF0aW9uKG5ld1J0Y0NvbmZpZ3VyYXRpb24pO1xuXG4gICAgcmV0dXJuIG9wdGlvbmFsUGVlckNvbm5lY3Rpb247XG4gIH1cblxuICBwcml2YXRlIHJlY29ubmVjdFBlZXJDb25uZWN0aW9uKHBlZXJDb25uZWN0aW9uOiBJUGVlckNvbm5lY3Rpb24sIHJldHJ5Q2FsbGJhY2s6ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICBpZiAocGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlID09PSAnY2xvc2VkJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlJlY29ubmVjdGluZztcblxuICAgIGlmICh0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyA8IFNESy5tYXhpbWFsTnVtYmVyT2ZQZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzIHx8ICFTREsuYXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uKSB7XG4gICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cysrO1xuXG4gICAgICBjb25zdCBpc0NsaWVudE9mZmVyRmxvdyA9IHBlZXJDb25uZWN0aW9uLmN1cnJlbnRMb2NhbERlc2NyaXB0aW9uPy50eXBlID09PSAnb2ZmZXInO1xuXG4gICAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQuY2xpZW50T2ZmZXJEaXNhYmxlZCB8fFxuICAgICAgICAhcGVlckNvbm5lY3Rpb24uc3VwcG9ydHNTZXRDb25maWd1cmF0aW9uIHx8XG4gICAgICAgICFwZWVyQ29ubmVjdGlvbi5zdXBwb3J0c0dldENvbmZpZ3VyYXRpb24gfHxcbiAgICAgICAgIWlzQ2xpZW50T2ZmZXJGbG93XG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9sb2dnZXIuaW5mbygnUmVjb25uZWN0aW5nIHBlZXIgY29ubmVjdGlvbiBieSByZXN0YXJ0aW5nIElDRScpO1xuXG4gICAgICBjb25zdCBjdXJyZW50TG9jYWxEZXNjcmlwdGlvbiA9IHBlZXJDb25uZWN0aW9uLmN1cnJlbnRMb2NhbERlc2NyaXB0aW9uO1xuICAgICAgY29uc3QgaWdub3JlZCA9IHBlZXJDb25uZWN0aW9uLmNyZWF0ZU9mZmVyKHtpY2VSZXN0YXJ0OiB0cnVlfSkudGhlbihvZmZlciA9PiB7XG4gICAgICAgIHJldHVybiBwZWVyQ29ubmVjdGlvbi5zZXRMb2NhbERlc2NyaXB0aW9uKG9mZmVyKS50aGVuKCgpID0+IHtcbiAgICAgICAgICByZXR1cm4gcGVlckNvbm5lY3Rpb24uc2V0TG9jYWxEZXNjcmlwdGlvbihjdXJyZW50TG9jYWxEZXNjcmlwdGlvbik7XG4gICAgICAgIH0pO1xuICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHJlY29ubmVjdCBwZWVyIGNvbm5lY3Rpb24nLCBlKTtcbiAgICAgICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyA9IDA7XG4gICAgICAgICAgcmV0cnlDYWxsYmFjaygpO1xuICAgICAgICB9KTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdGYWlsZWQgdG8gcmVjb25uZWN0IHBlZXIgY29ubmVjdGlvbiBhZnRlciBbJXNdIGF0dGVtcHRzLCBwZXJmb3JtaW5nIGZ1bGwgcmVjb3ZlcnknLCB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyk7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMgPSAwO1xuICAgIHJldHJ5Q2FsbGJhY2soKTtcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBtYXBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1c1RvQ2hhbm5lbFN0YXR1cyhzdGF0dXM6IFNldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzKTogQ2hhbm5lbFN0YXRlIHtcbiAgICBzd2l0Y2ggKHN0YXR1cykge1xuICAgICAgY2FzZSAnb2snOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLlN0YXJ0aW5nO1xuICAgICAgY2FzZSAndW5hdXRob3JpemVkJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5VbmF1dGhvcml6ZWQ7XG4gICAgICBjYXNlICdub3QtZm91bmQnOlxuICAgICAgY2FzZSAnY2FwYWNpdHknOlxuICAgICAgY2FzZSAncmF0ZS1saW1pdGVkJzpcbiAgICAgIGNhc2UgJ3RpbWVvdXQnOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLlJlY292ZXJpbmc7XG4gICAgICBjYXNlICdmYWlsZWQnOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLkVycm9yO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUoc3RhdHVzKTtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQge0NodW5rZWRTdHJlYW1pbmd9IGZyb20gJy4vQ2h1bmtlZFN0cmVhbWluZyc7XG5pbXBvcnQge0NodW5rZWRTdHJlYW1pbmdPcHRpb25zLCBDaHVua2VkU3RyZWFtaW5nU3RhdGlzdGljc30gZnJvbSAnLi9TdHJlYW1UeXBlcyc7XG5pbXBvcnQge05ldHdvcmtTdGF0ZXN9IGZyb20gJy4vTmV0d29ya1N0YXRlcyc7XG5cbnR5cGUgU2hha2FPcHRpb25zID0ge1xuICBhYnI6IHtcbiAgICBkZWZhdWx0QmFuZHdpZHRoRXN0aW1hdGU6IG51bWJlcjtcbiAgfTtcbiAgbWFuaWZlc3Q6IHtcbiAgICByZXRyeVBhcmFtZXRlcnM6IHtcbiAgICAgIHRpbWVvdXQ6IG51bWJlcjtcbiAgICB9O1xuICB9O1xuICBzdHJlYW1pbmc6IHtcbiAgICBsaXZlU3luY1BhbmljVGhyZXNob2xkOiBudW1iZXI7XG4gICAgYnVmZmVyaW5nR29hbDogbnVtYmVyO1xuICAgIGJ1ZmZlckJlaGluZDogbnVtYmVyO1xuICAgIHJldHJ5UGFyYW1ldGVyczoge1xuICAgICAgdGltZW91dDogbnVtYmVyO1xuICAgICAgbWF4QXR0ZW1wdHM6IG51bWJlcjtcbiAgICAgIGJhY2tvZmZGYWN0b3I6IG51bWJlcjtcbiAgICB9O1xuICB9O1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBJU2hha2Ege1xuICBjb25maWd1cmU6IChvOiBTaGFrYU9wdGlvbnMpID0+IHZvaWQ7XG4gIGxvYWQ6ICh1cmk6IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPjtcbiAgZ2V0U3RhdHM6ICgpID0+IENodW5rZWRTdHJlYW1pbmdTdGF0aXN0aWNzO1xuICBkZXN0cm95OiAoKSA9PiB2b2lkO1xuICB1bmxvYWQ6ICgpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNoYWthUGxheWVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1NoYWthUGxheWVyJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3ZpZGVvRWxlbWVudDogSFRNTFZpZGVvRWxlbWVudDtcbiAgcHJpdmF0ZSByZWFkb25seSBfa2luZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdHJlYW1JZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9tYW5pZmVzdFVSSTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9vcHRpb25zOiBDaHVua2VkU3RyZWFtaW5nT3B0aW9ucztcbiAgcHJpdmF0ZSByZWFkb25seSBfbW9uaXRvcmVkU3RhdGlzdGljczoge1xuICAgIGVzdGltYXRlZEJhbmR3aWR0aDogbnVtYmVyO1xuICAgIHBsYXlUaW1lOiBudW1iZXI7XG4gIH07XG4gIHByaXZhdGUgX3BsYXllcjogSVNoYWthO1xuXG4gIGNvbnN0cnVjdG9yKHZpZGVvRWxlbWVudDogSFRNTFZpZGVvRWxlbWVudCwga2luZDogc3RyaW5nLCBzdHJlYW1JZDogc3RyaW5nLCBtYW5pZmVzdFVSSTogc3RyaW5nLCBvcHRpb25zOiBDaHVua2VkU3RyZWFtaW5nT3B0aW9ucykge1xuICAgIHRoaXMuX3ZpZGVvRWxlbWVudCA9IHZpZGVvRWxlbWVudDtcbiAgICB0aGlzLl9raW5kID0ga2luZDtcbiAgICB0aGlzLl9zdHJlYW1JZCA9IHN0cmVhbUlkO1xuICAgIHRoaXMuX21hbmlmZXN0VVJJID0gZW5jb2RlVVJJKG1hbmlmZXN0VVJJKS5yZXBsYWNlKC9bI10vZywgJyUyMycpO1xuICAgIHRoaXMuX29wdGlvbnMgPSBvcHRpb25zO1xuICAgIHRoaXMuX21vbml0b3JlZFN0YXRpc3RpY3MgPSB7XG4gICAgICBlc3RpbWF0ZWRCYW5kd2lkdGg6IDAsXG4gICAgICBwbGF5VGltZTogMFxuICAgIH07XG4gIH1cblxuICBzdGFydCgpOiB2b2lkIHtcbiAgICBpZiAoQ2h1bmtlZFN0cmVhbWluZy5zaGFrYSkge1xuICAgICAgY29uc3QgcGxheWVyT3B0aW9uczogU2hha2FPcHRpb25zID0ge1xuICAgICAgICBhYnI6IHtkZWZhdWx0QmFuZHdpZHRoRXN0aW1hdGU6IDIwMDAwMDB9LFxuICAgICAgICBtYW5pZmVzdDoge3JldHJ5UGFyYW1ldGVyczoge3RpbWVvdXQ6IDEwMDAwfX0sXG4gICAgICAgIHN0cmVhbWluZzoge1xuICAgICAgICAgIGxpdmVTeW5jUGFuaWNUaHJlc2hvbGQ6IDEsXG4gICAgICAgICAgYnVmZmVyaW5nR29hbDogNjAsXG4gICAgICAgICAgYnVmZmVyQmVoaW5kOiAzMCxcbiAgICAgICAgICByZXRyeVBhcmFtZXRlcnM6IHtcbiAgICAgICAgICAgIHRpbWVvdXQ6IDEwMDAwLFxuICAgICAgICAgICAgbWF4QXR0ZW1wdHM6IDEwLFxuICAgICAgICAgICAgYmFja29mZkZhY3RvcjogMS4xXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICB0aGlzLl9wbGF5ZXIgPSBuZXcgQ2h1bmtlZFN0cmVhbWluZy5zaGFrYS5QbGF5ZXIodGhpcy5fdmlkZW9FbGVtZW50KTtcbiAgICAgIHRoaXMubG9hZFBsYXllcihwbGF5ZXJPcHRpb25zKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIGdldFN0YXRzKCk6IENodW5rZWRTdHJlYW1pbmdTdGF0aXN0aWNzIHtcbiAgICBpZiAoIXRoaXMuX3BsYXllcikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgd2lkdGg6IDAsXG4gICAgICAgIGhlaWdodDogMCxcbiAgICAgICAgY3VycmVudFRpbWU6IDAsXG4gICAgICAgIGxhZzogMCxcbiAgICAgICAgbmV0d29ya1N0YXRlOiBOZXR3b3JrU3RhdGVzLk5ldHdvcmtOb1NvdXJjZVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0aXN0aWNzID0ge1xuICAgICAgLi4udGhpcy5fcGxheWVyLmdldFN0YXRzKCksXG4gICAgICBjdXJyZW50VGltZTogMCxcbiAgICAgIGxhZzogMFxuICAgIH07XG4gICAgY29uc3QgY3VycmVudFRpbWUgPSB0aGlzLl92aWRlb0VsZW1lbnRbJ2N1cnJlbnRUaW1lJ10gfHwgMDtcbiAgICBjb25zdCB0cnVlQ3VycmVudFRpbWUgPSAoRGF0ZS5ub3coKSAtIHRoaXMuX29wdGlvbnMub3JpZ2luU3RhcnRUaW1lKSAvIDEwMDA7XG4gICAgY29uc3QgbGFnID0gTWF0aC5tYXgoMC4wLCB0cnVlQ3VycmVudFRpbWUgLSBjdXJyZW50VGltZSk7XG5cbiAgICBpZiAodGhpcy5fdmlkZW9FbGVtZW50KSB7XG4gICAgICBzdGF0aXN0aWNzLmN1cnJlbnRUaW1lID0gY3VycmVudFRpbWU7XG4gICAgICBzdGF0aXN0aWNzLmxhZyA9IGxhZztcblxuICAgICAgaWYgKHRoaXMuX3ZpZGVvRWxlbWVudC5idWZmZXJlZCAmJiB0aGlzLl92aWRlb0VsZW1lbnQuYnVmZmVyZWQubGVuZ3RoKSB7XG4gICAgICAgIHN0YXRpc3RpY3MuZGF0YUJ1ZmZlcmVkID0gdGhpcy5fdmlkZW9FbGVtZW50LmJ1ZmZlcmVkLmVuZCgwKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc3RhdGlzdGljcy5lc3RpbWF0ZWRCYW5kd2lkdGggPiAwICYmIHRoaXMuX21vbml0b3JlZFN0YXRpc3RpY3MuZXN0aW1hdGVkQmFuZHdpZHRoIDwgc3RhdGlzdGljcy5lc3RpbWF0ZWRCYW5kd2lkdGgpIHtcbiAgICAgIHN0YXRpc3RpY3MubmV0d29ya1N0YXRlID0gTmV0d29ya1N0YXRlcy5OZXR3b3JrTG9hZGluZztcbiAgICB9IGVsc2UgaWYgKHN0YXRpc3RpY3MucGxheVRpbWUgPiAwICYmIHRoaXMuX21vbml0b3JlZFN0YXRpc3RpY3MucGxheVRpbWUgPCBzdGF0aXN0aWNzLnBsYXlUaW1lKSB7XG4gICAgICBzdGF0aXN0aWNzLm5ldHdvcmtTdGF0ZSA9IE5ldHdvcmtTdGF0ZXMuTmV0d29ya0lkbGU7XG4gICAgfSBlbHNlIGlmIChzdGF0aXN0aWNzLnZpZGVvKSB7XG4gICAgICBzdGF0aXN0aWNzLm5ldHdvcmtTdGF0ZSA9IE5ldHdvcmtTdGF0ZXMuTmV0d29ya0VtcHR5O1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0aXN0aWNzLm5ldHdvcmtTdGF0ZSA9IE5ldHdvcmtTdGF0ZXMuTmV0d29ya05vU291cmNlO1xuICAgIH1cblxuICAgIHRoaXMuX21vbml0b3JlZFN0YXRpc3RpY3MuZXN0aW1hdGVkQmFuZHdpZHRoID0gc3RhdGlzdGljcy5lc3RpbWF0ZWRCYW5kd2lkdGg7XG4gICAgdGhpcy5fbW9uaXRvcmVkU3RhdGlzdGljcy5wbGF5VGltZSA9IHN0YXRpc3RpY3MucGxheVRpbWU7XG5cbiAgICByZXR1cm4gc3RhdGlzdGljcztcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3BsYXllcikge1xuICAgICAgdGhpcy5fcGxheWVyLnVubG9hZCgpO1xuICAgICAgdGhpcy5fcGxheWVyLmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICB0aGlzLl9wbGF5ZXIgPSBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2FkUGxheWVyKHBsYXllckNvbmZpZzogU2hha2FPcHRpb25zKTogdm9pZCB7XG4gICAgdGhpcy5fcGxheWVyLmNvbmZpZ3VyZShwbGF5ZXJDb25maWcpO1xuXG4gICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX3BsYXllci5sb2FkKHRoaXMuX21hbmlmZXN0VVJJKS50aGVuKCgpID0+IHtcbiAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIERBU0ggbGl2ZSBzdHJlYW0gaGFzIGJlZW4gbG9hZGVkJywgdGhpcy5fc3RyZWFtSWQpO1xuXG4gICAgICBpZiAodGhpcy5fdmlkZW9FbGVtZW50LnBsYXkpIHtcbiAgICAgICAgdGhpcy5fdmlkZW9FbGVtZW50LnBsYXkoKTtcbiAgICAgIH1cbiAgICB9KS5jYXRjaChlID0+IHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignWyVzXSBFcnJvciB3aGlsZSBsb2FkaW5nIERBU0ggbGl2ZSBzdHJlYW0gWyVzXScsIHRoaXMuX3N0cmVhbUlkLCBlLmNvZGUsIGUpO1xuICAgIH0pO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0lTdHJlYW19IGZyb20gJy4vSVN0cmVhbSc7XG5pbXBvcnQgRWRnZUF1dGhQYXJzZXIgZnJvbSAnLi4vLi4vZWRnZUF1dGgvRWRnZUF1dGhQYXJzZXInO1xuaW1wb3J0IENodW5rZWRTdHJlYW0gZnJvbSAnLi9DaHVua2VkU3RyZWFtJztcbmltcG9ydCBSZWFsVGltZVN0cmVhbSBmcm9tICcuL1JlYWxUaW1lU3RyZWFtJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQgQ2h1bmtlZFN0cmVhbVBsYXliYWNrTW9kZSBmcm9tICcuL0NodW5rZWRTdHJlYW1QbGF5YmFja01vZGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdHJlYW1GYWN0b3J5IHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdTdHJlYW1pbmcnKTtcblxuICBzdGF0aWMgY3JlYXRlKHRva2VuOiBzdHJpbmcsIGNoYW5uZWxDb250ZXh0LCBwZWVyQ29ubmVjdGlvbkNvbnRleHQsIHN0cmVhbVRyYW5zZm9ybUNvbnRleHQsIGhhbmRsZVN0cmVhbUZhaWx1cmU6ICgpID0+IFByb21pc2U8dm9pZD4pOiBJU3RyZWFtIHtcbiAgICBjb25zdCB0b2tlbkNhcGFiaWxpdGllcyA9IEVkZ2VBdXRoUGFyc2VyLnBhcnNlVG9rZW4odG9rZW4pLmNhcGFiaWxpdGllcztcbiAgICBjb25zdCBoYXNTdHJlYW1pbmcgPSB0b2tlbkNhcGFiaWxpdGllcy5pbmNsdWRlcygnc3RyZWFtaW5nJyk7XG4gICAgY29uc3QgaGFzT25EZW1hbmQgPSB0b2tlbkNhcGFiaWxpdGllcy5pbmNsdWRlcygnb24tZGVtYW5kJyk7XG5cbiAgICBpZiAoaGFzU3RyZWFtaW5nIHx8IGhhc09uRGVtYW5kKSB7XG4gICAgICByZXR1cm4gbmV3IENodW5rZWRTdHJlYW0oY2hhbm5lbENvbnRleHQsICFoYXNPbkRlbWFuZCA/IENodW5rZWRTdHJlYW1QbGF5YmFja01vZGUuTGl2ZSA6IENodW5rZWRTdHJlYW1QbGF5YmFja01vZGUuT25kRGVtYW5kLCBoYW5kbGVTdHJlYW1GYWlsdXJlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFJlYWxUaW1lU3RyZWFtKGNoYW5uZWxDb250ZXh0LCBwZWVyQ29ubmVjdGlvbkNvbnRleHQsIHN0cmVhbVRyYW5zZm9ybUNvbnRleHQsIGhhbmRsZVN0cmVhbUZhaWx1cmUpO1xuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdTdHJlYW1GYWN0b3J5IGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCB7Q2h1bmtlZFN0cmVhbWluZ30gZnJvbSAnLi9DaHVua2VkU3RyZWFtaW5nJztcbmltcG9ydCB7Q2h1bmtlZFN0cmVhbWluZ09wdGlvbnMsIENodW5rZWRTdHJlYW1pbmdTdGF0aXN0aWNzfSBmcm9tICcuL1N0cmVhbVR5cGVzJztcbmltcG9ydCB7TmV0d29ya1N0YXRlc30gZnJvbSAnLi9OZXR3b3JrU3RhdGVzJztcblxuY29uc3QgYmFuZHdpZHRoVG9TdGFydEF0ID0gMzAwMDAwMDsgLy8gQ29ycmVzcG9uZHMgdG8gNzIwcCBpbiBtb3N0IHNldHVwc1xuY29uc3QgbWluVGltZUJlZm9yZU5leHRSZWxvYWQgPSAxNTAwMDtcblxudHlwZSBFdmVudExpc3RlbmVyRm9yV2ViUGxheWVyID0gKGV2dDogV2ViUGxheWVyRXZlbnQpID0+IHZvaWQ7XG50eXBlIFdlYlBsYXllckV2ZW50ID0ge1xuICBjb2RlOiBudW1iZXI7XG4gIHNldmVyaXR5OiBudW1iZXI7XG4gIGVycm9yOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIElXZWJQbGF5ZXIge1xuICBzdGFydDogKHVybDogc3RyaW5nKSA9PiB2b2lkO1xuICBhZGRFdmVudExpc3RlbmVyKG5hbWU6IHN0cmluZywgbGlzdGVuZXI6IEV2ZW50TGlzdGVuZXJGb3JXZWJQbGF5ZXIpOiB2b2lkO1xuICBkaXNwb3NlKCk6IHZvaWQ7XG4gIGVycm9yczoge1xuICAgIHNldmVyaXR5OiB7XG4gICAgICBSRUNPVkVSQUJMRTogbnVtYmVyO1xuICAgIH07XG4gIH07XG4gIGdldFN0YXRzKCk6IENodW5rZWRTdHJlYW1pbmdTdGF0aXN0aWNzO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBXZWJQbGF5ZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignV2ViUGxheWVyJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3ZpZGVvRWxlbWVudDogSFRNTFZpZGVvRWxlbWVudDtcbiAgcHJpdmF0ZSByZWFkb25seSBfa2luZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdHJlYW1JZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9tYW5pZmVzdFVSSTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9vcHRpb25zOiBDaHVua2VkU3RyZWFtaW5nT3B0aW9ucztcbiAgcHJpdmF0ZSBfcGxheWVyOiBJV2ViUGxheWVyO1xuICBwcml2YXRlIF9sYXN0UmVsb2FkVGltZTogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKHZpZGVvRWxlbWVudDogSFRNTFZpZGVvRWxlbWVudCwga2luZDogc3RyaW5nLCBzdHJlYW1JZDogc3RyaW5nLCBtYW5pZmVzdFVSSTogc3RyaW5nLCBvcHRpb25zOiBDaHVua2VkU3RyZWFtaW5nT3B0aW9ucykge1xuICAgIHRoaXMuX3ZpZGVvRWxlbWVudCA9IHZpZGVvRWxlbWVudDtcbiAgICB0aGlzLl9raW5kID0ga2luZDtcbiAgICB0aGlzLl9zdHJlYW1JZCA9IHN0cmVhbUlkO1xuICAgIHRoaXMuX21hbmlmZXN0VVJJID0gZW5jb2RlVVJJKG1hbmlmZXN0VVJJKS5yZXBsYWNlKC9bI10vZywgJyUyMycpO1xuICAgIHRoaXMuX29wdGlvbnMgPSBvcHRpb25zO1xuICB9XG5cbiAgc3RhcnQoKTogdm9pZCB7XG4gICAgaWYgKENodW5rZWRTdHJlYW1pbmcucGhlbml4V2ViUGxheWVyKSB7XG4gICAgICBjb25zdCBwbGF5ZXJPcHRpb25zID0ge1xuICAgICAgICAuLi50aGlzLl9vcHRpb25zLFxuICAgICAgICBiYW5kd2lkdGhUb1N0YXJ0QXRcbiAgICAgIH07XG5cbiAgICAgIHRoaXMuX3BsYXllciA9IG5ldyBDaHVua2VkU3RyZWFtaW5nLnBoZW5peFdlYlBsYXllci5XZWJQbGF5ZXIodGhpcy5fbG9nZ2VyLCB0aGlzLl92aWRlb0VsZW1lbnQsIHBsYXllck9wdGlvbnMpO1xuICAgICAgdGhpcy5fcGxheWVyLnN0YXJ0KHRoaXMuX21hbmlmZXN0VVJJKTtcblxuICAgICAgdGhpcy5fcGxheWVyLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgZXJyb3JPYmplY3QgPT4ge1xuICAgICAgICBpZiAodGhpcy5jYW5SZWxvYWQoKSAmJiBlcnJvck9iamVjdCAmJiAoZXJyb3JPYmplY3QuY29kZSA9PT0gMyB8fCBlcnJvck9iamVjdC5zZXZlcml0eSA9PT0gQ2h1bmtlZFN0cmVhbWluZy5waGVuaXhXZWJQbGF5ZXIuZXJyb3JzLnNldmVyaXR5LlJFQ09WRVJBQkxFKSkge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci53YXJuKCdSZWxvYWRpbmcgdW5oZWFsdGh5IHN0cmVhbSBhZnRlciBlcnJvciBldmVudCBbJWpdJywgZXJyb3JPYmplY3QpO1xuICAgICAgICAgIHRoaXMucmVsb2FkSWZBYmxlKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0Nhbm5vdCByZWxvYWQgd2l0aCBlcnJvciBbJWpdJywgZXJyb3JPYmplY3QpO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBpc1N1cHBvcnRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQ2h1bmtlZFN0cmVhbWluZy5waGVuaXhXZWJQbGF5ZXIgJiYgQ2h1bmtlZFN0cmVhbWluZy5waGVuaXhXZWJQbGF5ZXIuaXNTdXBwb3J0ZWQ7XG4gIH1cblxuICBnZXRTdGF0cygpOiBDaHVua2VkU3RyZWFtaW5nU3RhdGlzdGljcyB7XG4gICAgaWYgKCF0aGlzLl9wbGF5ZXIpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHdpZHRoOiAwLFxuICAgICAgICBoZWlnaHQ6IDAsXG4gICAgICAgIGN1cnJlbnRUaW1lOiAwLjAsXG4gICAgICAgIGxhZzogMC4wLFxuICAgICAgICBuZXR3b3JrU3RhdGU6IE5ldHdvcmtTdGF0ZXMuTmV0d29ya05vU291cmNlLFxuICAgICAgICBkYXRhQnVmZmVyZWQ6IDAuMFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0aXN0aWNzID0gdGhpcy5fcGxheWVyLmdldFN0YXRzKCk7XG4gICAgY29uc3QgY3VycmVudFRpbWUgPSBzdGF0aXN0aWNzLmN1cnJlbnRUaW1lIHx8IHRoaXMuX3ZpZGVvRWxlbWVudFsnY3VycmVudFRpbWUnXTtcbiAgICBjb25zdCB0cnVlQ3VycmVudFRpbWUgPSAoRGF0ZS5ub3coKSAtIHRoaXMuX29wdGlvbnMub3JpZ2luU3RhcnRUaW1lKSAvIDEwMDA7XG5cbiAgICBpZiAodGhpcy5fdmlkZW9FbGVtZW50LmJ1ZmZlcmVkPy5sZW5ndGgpIHtcbiAgICAgIHN0YXRpc3RpY3MuZGF0YUJ1ZmZlcmVkID0gdGhpcy5fdmlkZW9FbGVtZW50LmJ1ZmZlcmVkLmVuZCgwKTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdGlzdGljcy5pc05hdGl2ZSAmJiBzdGF0aXN0aWNzLmRlbGl2ZXJ5VHlwZSA9PT0gJ0hscycpIHtcbiAgICAgIHN0YXRpc3RpY3MuY3VycmVudFRpbWUgPSBjdXJyZW50VGltZSAtIHN0YXRpc3RpY3MubGFnO1xuICAgIH1cblxuICAgIGlmICghc3RhdGlzdGljcy5jdXJyZW50VGltZSkge1xuICAgICAgc3RhdGlzdGljcy5jdXJyZW50VGltZSA9IGN1cnJlbnRUaW1lO1xuICAgIH1cblxuICAgIGlmICghc3RhdGlzdGljcy5pc05hdGl2ZSkge1xuICAgICAgc3RhdGlzdGljcy5sYWcgPSBNYXRoLm1heCgwLjAsIHRydWVDdXJyZW50VGltZSAtIGN1cnJlbnRUaW1lKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fdmlkZW9FbGVtZW50LmJ1ZmZlcmVkPy5sZW5ndGgpIHtcbiAgICAgIHN0YXRpc3RpY3MubmV0d29ya1N0YXRlID0gTmV0d29ya1N0YXRlcy5OZXR3b3JrTG9hZGluZztcbiAgICB9IGVsc2UgaWYgKHN0YXRpc3RpY3MuY3VycmVudFRpbWUgPiAwKSB7XG4gICAgICBzdGF0aXN0aWNzLm5ldHdvcmtTdGF0ZSA9IE5ldHdvcmtTdGF0ZXMuTmV0d29ya0lkbGU7XG4gICAgfSBlbHNlIGlmIChzdGF0aXN0aWNzLnZpZGVvKSB7XG4gICAgICBzdGF0aXN0aWNzLm5ldHdvcmtTdGF0ZSA9IE5ldHdvcmtTdGF0ZXMuTmV0d29ya0VtcHR5O1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0aXN0aWNzLm5ldHdvcmtTdGF0ZSA9IE5ldHdvcmtTdGF0ZXMuTmV0d29ya05vU291cmNlO1xuICAgIH1cblxuICAgIHJldHVybiBzdGF0aXN0aWNzO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fcGxheWVyKSB7XG4gICAgICB0aGlzLl9wbGF5ZXIuZGlzcG9zZSgpO1xuICAgIH1cblxuICAgIHRoaXMuX3BsYXllciA9IG51bGw7XG4gIH1cblxuICBwcml2YXRlIGNhblJlbG9hZCgpOiBib29sZWFuIHtcbiAgICBjb25zdCBoYXNFbGFwc2VkTWluVGltZVNpbmNlTGFzdFJlbG9hZCA9ICF0aGlzLl9sYXN0UmVsb2FkVGltZSB8fCBEYXRlLm5vdygpIC0gdGhpcy5fbGFzdFJlbG9hZFRpbWUgPiBtaW5UaW1lQmVmb3JlTmV4dFJlbG9hZDtcblxuICAgIHJldHVybiB0aGlzLl92aWRlb0VsZW1lbnQgJiYgdGhpcy5fcGxheWVyICYmIHRoaXMuX3ZpZGVvRWxlbWVudC5idWZmZXJlZC5sZW5ndGggIT09IDAgJiYgaGFzRWxhcHNlZE1pblRpbWVTaW5jZUxhc3RSZWxvYWQ7XG4gIH1cblxuICBwcml2YXRlIHJlbG9hZElmQWJsZSgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY2FuUmVsb2FkKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9sb2dnZXIud2FybignWyVzXSBSZWxvYWRpbmcgdW5oZWFsdGh5IHN0cmVhbSB0aGF0IHdhcyBhY3RpdmUgZm9yIGF0IGxlYXN0IFslc10gc2Vjb25kcycsIHRoaXMuX3N0cmVhbUlkLCBtaW5UaW1lQmVmb3JlTmV4dFJlbG9hZCAvIDEwMDApO1xuXG4gICAgdGhpcy5fbGFzdFJlbG9hZFRpbWUgPSBEYXRlLm5vdygpO1xuXG4gICAgdGhpcy5yZWxvYWQoKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVsb2FkKCk6IHZvaWQge1xuICAgIHRoaXMuX3BsYXllci5kaXNwb3NlKCk7XG5cbiAgICB0aGlzLl9wbGF5ZXIgPSBudWxsO1xuXG4gICAgdGhpcy5zdGFydCgpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElFbmNvZGVkU3RyZWFtU2luazxUID0gUlRDRW5jb2RlZEF1ZGlvRnJhbWUgfCBSVENFbmNvZGVkVmlkZW9GcmFtZT4ge1xuICAgICh0cmFjazogTWVkaWFTdHJlYW1UcmFjaywgY2h1bms6IFQpOiBib29sZWFuIHwgUHJvbWlzZUxpa2U8Ym9vbGVhbj47XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVuY29kZWRTdHJlYW1TaW5rIHtcbiAgc3RhdGljIHZhbGlkYXRlRW5jb2RlZFN0cmVhbVNpbmsobW9kZTogJ2F1ZGlvJyB8ICd2aWRlbycsIGl0ZW06IElFbmNvZGVkU3RyZWFtU2luaykge1xuICAgIGlmICh0eXBlb2YgaXRlbSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsaWQ6IGZhbHNlLFxuICAgICAgICB2YWxpZGF0aW9uUmVzdWx0OiBgVW5leHBlY3RlZCAke21vZGV9IEVuY29kZWQgU3RyZWFtIFNpbmsgZnVuY3Rpb24gdHlwZS4gRm91bmQgWyR7dHlwZW9mIGl0ZW19XWBcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKGl0ZW0ubGVuZ3RoICE9PSAyKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB2YWxpZDogZmFsc2UsXG4gICAgICAgIHZhbGlkYXRpb25SZXN1bHQ6IGBVbmV4cGVjdGVkICR7bW9kZX0gRW5jb2RlZCBTdHJlYW0gU2luayBmdW5jdGlvbiBwYXJhbWV0ZXIgbGVuZ3RoLiBFeHBlY3RlZCAyLiBGb3VuZCBbJHtpdGVtLmxlbmd0aH1dYFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdmFsaWQ6IHRydWUsXG4gICAgICB2YWxpZGF0aW9uUmVzdWx0OiAnb2snXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignRW5jb2RlZFN0cmVhbVNpbmsgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgRGlzcG9zYWJsZSBmcm9tICcuLi8uLi9sYW5nL0Rpc3Bvc2FibGUnO1xuaW1wb3J0IERpc3Bvc2FibGVMaXN0IGZyb20gJy4uLy4uL2xhbmcvRGlzcG9zYWJsZUxpc3QnO1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uLy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuaW1wb3J0IHtJU3RyZWFtVHJhY2tUcmFuc2Zvcm19IGZyb20gJy4uL3RyYW5zZm9ybWF0aW9uL1N0cmVhbVRyYWNrVHJhbnNmb3JtJztcbmltcG9ydCB7SUVuY29kZWRTdHJlYW1TaW5rfSBmcm9tICcuLi90cmFuc2Zvcm1hdGlvbi9FbmNvZGVkU3RyZWFtU2luayc7XG5pbXBvcnQgRmVhdHVyZUVuYWJsZW1lbnQgZnJvbSAnLi4vLi4vZW52aXJvbm1lbnQvRmVhdHVyZUVuYWJsZW1lbnQnO1xuaW1wb3J0IFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIsIHtTdXJyb2dhdGVGcmFtZVR5cGUsIFNraXBGcmFtZX0gZnJvbSAnLi9TdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyJztcblxudHlwZSBNZWRpYVN0cmVhbVRyYWNrS2luZCA9ICd2aWRlbycgfCAnYXVkaW8nO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJbnNlcnRhYmxlU3RyZWFtcyB7XG4gIHN0YXRpYyBhcHBseUVuY29kZWRTdHJlYW1UcmFuc2Zvcm1hdGlvbihzdHJlYW06IE1lZGlhU3RyZWFtLCByZWNlaXZlcnM6IFJUQ1J0cFJlY2VpdmVyW10sIGVuY29kZWRWaWRlb1N0cmVhbVNpbms6IElFbmNvZGVkU3RyZWFtU2luazxSVENFbmNvZGVkVmlkZW9GcmFtZT4sIGVuY29kZWRBdWRpb1N0cmVhbVNpbms6IElFbmNvZGVkU3RyZWFtU2luazxSVENFbmNvZGVkQXVkaW9GcmFtZT4sIHZpZGVvQ29kZWM6IHN0cmluZywgYXVkaW9Db2RlYzogc3RyaW5nKToge2Rpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdH0ge1xuICAgIGNvbnN0IGRpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdCA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuXG4gICAgc3RyZWFtLmdldFRyYWNrcygpLmZvckVhY2godHJhY2sgPT4ge1xuICAgICAgY29uc3QgcmVjZWl2ZXIgPSByZWNlaXZlcnMuZmlsdGVyKHJlY2VpdmUgPT4gcmVjZWl2ZS50cmFjayA9PT0gdHJhY2spWzBdO1xuICAgICAgY29uc3Qga2luZDogTWVkaWFTdHJlYW1UcmFja0tpbmQgPSB0cmFjay5raW5kIGFzIE1lZGlhU3RyZWFtVHJhY2tLaW5kO1xuXG4gICAgICBzd2l0Y2ggKGtpbmQpIHtcbiAgICAgICAgY2FzZSAndmlkZW8nOiB7XG4gICAgICAgICAgaWYgKGVuY29kZWRWaWRlb1N0cmVhbVNpbmspIHtcbiAgICAgICAgICAgIGlmIChGZWF0dXJlRW5hYmxlbWVudC5pc1JUQ1J0cFNjcmlwdFRyYW5zZm9ybVN1cHBvcnRlZCkge1xuICAgICAgICAgICAgICBjb25zdCB3b3JrZXIgPSBuZXcgV29ya2VyKG5ldyBVUkwoJy4vV29ya2VyVHJhbnNmb3JtU3RyZWFtLnRzJywgaW1wb3J0Lm1ldGEudXJsKSwge3R5cGU6ICdtb2R1bGUnfSk7XG5cbiAgICAgICAgICAgICAgd29ya2VyLm9ubWVzc2FnZSA9IGFzeW5jIGV2ZW50ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIWF3YWl0IGVuY29kZWRWaWRlb1N0cmVhbVNpbmsodHJhY2ssIGV2ZW50LmRhdGEuY2h1bmspKSB7XG4gICAgICAgICAgICAgICAgICB3b3JrZXIucG9zdE1lc3NhZ2Uoe2ZvcmNlSW52YWxpZEZyYW1lOiB0cnVlfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgIHJlY2VpdmVyLnRyYW5zZm9ybSA9IG5ldyBSVENSdHBTY3JpcHRUcmFuc2Zvcm0od29ya2VyLCB7XG4gICAgICAgICAgICAgICAga2luZDogdHJhY2sua2luZCxcbiAgICAgICAgICAgICAgICBjb2RlYzogdmlkZW9Db2RlY1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgZGlzcG9zYWJsZXMuYWRkKG5ldyBEaXNwb3NhYmxlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB3b3JrZXIudGVybWluYXRlKCk7XG4gICAgICAgICAgICAgIH0pKTtcblxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgZW5jb2RlZFN0cmVhbVRyYW5zZm9ybUNhbGxiYWNrOiBUcmFuc2Zvcm1lclRyYW5zZm9ybUNhbGxiYWNrPFJUQ0VuY29kZWRWaWRlb0ZyYW1lLCBSVENFbmNvZGVkVmlkZW9GcmFtZT4gPSBhc3luYyhjaHVuaywgY29udHJvbGxlcikgPT4ge1xuICAgICAgICAgICAgICBpZiAoIWF3YWl0IGVuY29kZWRWaWRlb1N0cmVhbVNpbmsodHJhY2ssIGNodW5rKSkge1xuICAgICAgICAgICAgICAgIGxldCBzdXJyb2dhdGU6IFN1cnJvZ2F0ZUZyYW1lVHlwZTtcblxuICAgICAgICAgICAgICAgIGlmIChjaHVuay50eXBlID09PSAna2V5Jykge1xuICAgICAgICAgICAgICAgICAgc3Vycm9nYXRlID0gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5nZXRJbnZhbGlkU3Vycm9nYXRlVmlkZW9JRnJhbWUodmlkZW9Db2RlYyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHN1cnJvZ2F0ZSA9IFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuZ2V0SW52YWxpZFN1cnJvZ2F0ZVZpZGVvUEZyYW1lKHZpZGVvQ29kZWMpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChzdXJyb2dhdGUgPT09IFNraXBGcmFtZSkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNodW5rLmRhdGEgPSBzdXJyb2dhdGUgfHwgY2h1bmsuZGF0YTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoY2h1bmsudHlwZSA9PT0gJ2tleScpIHtcbiAgICAgICAgICAgICAgICAgIGNodW5rLmRhdGEgPSBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLmdldFN1cnJvZ2F0ZVZpZGVvSUZyYW1lUGVyQ29kZWModmlkZW9Db2RlYykgfHwgY2h1bmsuZGF0YTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgY2h1bmsuZGF0YSA9IFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuZ2V0U3Vycm9nYXRlVmlkZW9QRnJhbWVQZXJDb2RlYyh2aWRlb0NvZGVjKSB8fCBjaHVuay5kYXRhO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNvbnRyb2xsZXIuZW5xdWV1ZShjaHVuayk7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCB0cmFuc2Zvcm1lciA9IG5ldyBUcmFuc2Zvcm1TdHJlYW0oe3RyYW5zZm9ybTogZW5jb2RlZFN0cmVhbVRyYW5zZm9ybUNhbGxiYWNrfSk7XG4gICAgICAgICAgICBjb25zdCByZWNlaXZlclN0cmVhbXMgPSByZWNlaXZlci5jcmVhdGVFbmNvZGVkU3RyZWFtcygpO1xuICAgICAgICAgICAgY29uc3Qgc291cmNlID0gcmVjZWl2ZXJTdHJlYW1zLnJlYWRhYmxlO1xuICAgICAgICAgICAgY29uc3Qgc2luayA9IHJlY2VpdmVyU3RyZWFtcy53cml0YWJsZTtcblxuICAgICAgICAgICAgc291cmNlXG4gICAgICAgICAgICAgIC5waXBlVGhyb3VnaCh0cmFuc2Zvcm1lcilcbiAgICAgICAgICAgICAgLnBpcGVUbyhzaW5rKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgJ2F1ZGlvJzoge1xuICAgICAgICAgIGlmIChlbmNvZGVkQXVkaW9TdHJlYW1TaW5rKSB7XG4gICAgICAgICAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQuaXNSVENSdHBTY3JpcHRUcmFuc2Zvcm1TdXBwb3J0ZWQpIHtcbiAgICAgICAgICAgICAgY29uc3Qgd29ya2VyID0gbmV3IFdvcmtlcihuZXcgVVJMKCcuL1dvcmtlclRyYW5zZm9ybVN0cmVhbS50cycsIGltcG9ydC5tZXRhLnVybCksIHt0eXBlOiAnbW9kdWxlJ30pO1xuXG4gICAgICAgICAgICAgIHdvcmtlci5vbm1lc3NhZ2UgPSBhc3luYyBldmVudCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFhd2FpdCBlbmNvZGVkQXVkaW9TdHJlYW1TaW5rKHRyYWNrLCBldmVudC5kYXRhLmNodW5rKSkge1xuICAgICAgICAgICAgICAgICAgd29ya2VyLnBvc3RNZXNzYWdlKHtmb3JjZUludmFsaWRGcmFtZTogdHJ1ZX0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICByZWNlaXZlci50cmFuc2Zvcm0gPSBuZXcgUlRDUnRwU2NyaXB0VHJhbnNmb3JtKHdvcmtlciwge1xuICAgICAgICAgICAgICAgIGtpbmQ6IHRyYWNrLmtpbmQsXG4gICAgICAgICAgICAgICAgY29kZWM6IGF1ZGlvQ29kZWNcbiAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgY29uc3QgbWVkaWFTdHJlYW0gPSBuZXcgTWVkaWFTdHJlYW0oKTtcbiAgICAgICAgICAgICAgY29uc3QgYXVkaW9QdW1wZXIgPSBuZXcgQXVkaW8oKTtcblxuICAgICAgICAgICAgICBhdWRpb1B1bXBlci5zcmNPYmplY3QgPSBtZWRpYVN0cmVhbTtcbiAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChhdWRpb1B1bXBlcik7XG5cbiAgICAgICAgICAgICAgZGlzcG9zYWJsZXMuYWRkKG5ldyBEaXNwb3NhYmxlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB3b3JrZXIudGVybWluYXRlKCk7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChhdWRpb1B1bXBlcik7XG4gICAgICAgICAgICAgIH0pKTtcblxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgZW5jb2RlZFN0cmVhbVRyYW5zZm9ybUNhbGxiYWNrOiBUcmFuc2Zvcm1lclRyYW5zZm9ybUNhbGxiYWNrPFJUQ0VuY29kZWRBdWRpb0ZyYW1lLCBSVENFbmNvZGVkQXVkaW9GcmFtZT4gPSBhc3luYyhjaHVuaywgY29udHJvbGxlcikgPT4ge1xuICAgICAgICAgICAgICBpZiAoIWF3YWl0IGVuY29kZWRBdWRpb1N0cmVhbVNpbmsodHJhY2ssIGNodW5rKSkge1xuICAgICAgICAgICAgICAgIGNodW5rLmRhdGEgPSBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLmdldEludmFsaWRTdXJyb2dhdGVBdWRpb0RhdGEoKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjaHVuay5kYXRhID0gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5nZXRTdXJyb2dhdGVBdWRpb1NpbGVudFBlckNvZGVjKGF1ZGlvQ29kZWMpIHx8IGNodW5rLmRhdGE7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjb250cm9sbGVyLmVucXVldWUoY2h1bmspO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgdHJhbnNmb3JtZXIgPSBuZXcgVHJhbnNmb3JtU3RyZWFtKHt0cmFuc2Zvcm06IGVuY29kZWRTdHJlYW1UcmFuc2Zvcm1DYWxsYmFja30pO1xuICAgICAgICAgICAgY29uc3QgcmVjZWl2ZXJTdHJlYW1zID0gcmVjZWl2ZXIuY3JlYXRlRW5jb2RlZFN0cmVhbXMoKTtcbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZSA9IHJlY2VpdmVyU3RyZWFtcy5yZWFkYWJsZTtcbiAgICAgICAgICAgIGNvbnN0IHNpbmsgPSByZWNlaXZlclN0cmVhbXMud3JpdGFibGU7XG5cbiAgICAgICAgICAgIHNvdXJjZVxuICAgICAgICAgICAgICAucGlwZVRocm91Z2godHJhbnNmb3JtZXIpXG4gICAgICAgICAgICAgIC5waXBlVG8oc2luayk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGFzc2VydFVucmVhY2hhYmxlKGtpbmQpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHtkaXNwb3NhYmxlc307XG4gIH1cblxuICBzdGF0aWMgYXBwbHlJbnNlcnRhYmxlU3RyZWFtVHJhbnNmb3JtYXRpb24oc3RyZWFtOiBNZWRpYVN0cmVhbSwgdmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjazogSVN0cmVhbVRyYWNrVHJhbnNmb3JtPFZpZGVvRnJhbWU+LCBhdWRpb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrOiBJU3RyZWFtVHJhY2tUcmFuc2Zvcm08QXVkaW9EYXRhPik6IHt0cmFuc2Zvcm1lZFN0cmVhbTogTWVkaWFTdHJlYW07IGRpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdH0ge1xuICAgIGNvbnN0IHRyYW5zZm9ybWVkU3RyZWFtID0gbmV3IE1lZGlhU3RyZWFtKCk7XG4gICAgY29uc3QgZGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0ID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG5cbiAgICBzdHJlYW0uZ2V0VHJhY2tzKCkuZm9yRWFjaCh0cmFjayA9PiB7XG4gICAgICBjb25zdCBraW5kOiBNZWRpYVN0cmVhbVRyYWNrS2luZCA9IHRyYWNrLmtpbmQgYXMgTWVkaWFTdHJlYW1UcmFja0tpbmQ7XG5cbiAgICAgIHN3aXRjaCAoa2luZCkge1xuICAgICAgICBjYXNlICd2aWRlbyc6IHtcbiAgICAgICAgICBpZiAodmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjaykge1xuICAgICAgICAgICAgY29uc3QgaW5zZXJ0YWJsZVN0cmVhbVRyYW5zZm9ybUNhbGxiYWNrOiBUcmFuc2Zvcm1lclRyYW5zZm9ybUNhbGxiYWNrPFZpZGVvRnJhbWUsIFZpZGVvRnJhbWU+ID0gKGNodW5rLCBjb250cm9sbGVyKSA9PiB7XG4gICAgICAgICAgICAgIHZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2sodHJhY2ssIGNodW5rLCBjb250cm9sbGVyKTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IHZpZGVvVHJhY2sgPSB0cmFjayBhcyBNZWRpYVN0cmVhbVZpZGVvVHJhY2s7XG4gICAgICAgICAgICBjb25zdCB0cmFuc2Zvcm1lciA9IG5ldyBUcmFuc2Zvcm1TdHJlYW0oe3RyYW5zZm9ybTogaW5zZXJ0YWJsZVN0cmVhbVRyYW5zZm9ybUNhbGxiYWNrfSk7XG4gICAgICAgICAgICBjb25zdCBwcm9jZXNzb3IgPSBuZXcgTWVkaWFTdHJlYW1UcmFja1Byb2Nlc3Nvcih7dHJhY2s6IHZpZGVvVHJhY2t9KTtcbiAgICAgICAgICAgIGNvbnN0IGdlbmVyYXRvciA9IG5ldyBNZWRpYVN0cmVhbVRyYWNrR2VuZXJhdG9yKHtraW5kOiB2aWRlb1RyYWNrLmtpbmR9KTtcbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZSA9IHByb2Nlc3Nvci5yZWFkYWJsZTtcbiAgICAgICAgICAgIGNvbnN0IHNpbmsgPSBnZW5lcmF0b3Iud3JpdGFibGU7XG5cbiAgICAgICAgICAgIHNvdXJjZVxuICAgICAgICAgICAgICAucGlwZVRocm91Z2godHJhbnNmb3JtZXIpXG4gICAgICAgICAgICAgIC5waXBlVG8oc2luayk7XG5cbiAgICAgICAgICAgIHRyYW5zZm9ybWVkU3RyZWFtLmFkZFRyYWNrKGdlbmVyYXRvcik7XG4gICAgICAgICAgICBkaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4ge1xuICAgICAgICAgICAgICB0cmFuc2Zvcm1lZFN0cmVhbS5yZW1vdmVUcmFjayhnZW5lcmF0b3IpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0cmFuc2Zvcm1lZFN0cmVhbS5hZGRUcmFjayh0cmFjayk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlICdhdWRpbyc6IHtcbiAgICAgICAgICBpZiAoYXVkaW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjaykge1xuICAgICAgICAgICAgY29uc3QgaW5zZXJ0YWJsZVN0cmVhbVRyYW5zZm9ybUNhbGxiYWNrOiBUcmFuc2Zvcm1lclRyYW5zZm9ybUNhbGxiYWNrPEF1ZGlvRGF0YSwgQXVkaW9EYXRhPiA9IChjaHVuaywgY29udHJvbGxlcikgPT4ge1xuICAgICAgICAgICAgICBhdWRpb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrKHRyYWNrLCBjaHVuaywgY29udHJvbGxlcik7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCBhdWRpb1RyYWNrID0gdHJhY2sgYXMgTWVkaWFTdHJlYW1BdWRpb1RyYWNrO1xuICAgICAgICAgICAgY29uc3QgdHJhbnNmb3JtZXIgPSBuZXcgVHJhbnNmb3JtU3RyZWFtKHt0cmFuc2Zvcm06IGluc2VydGFibGVTdHJlYW1UcmFuc2Zvcm1DYWxsYmFja30pO1xuICAgICAgICAgICAgY29uc3QgcHJvY2Vzc29yID0gbmV3IE1lZGlhU3RyZWFtVHJhY2tQcm9jZXNzb3Ioe3RyYWNrOiBhdWRpb1RyYWNrfSk7XG4gICAgICAgICAgICBjb25zdCBnZW5lcmF0b3IgPSBuZXcgTWVkaWFTdHJlYW1UcmFja0dlbmVyYXRvcih7a2luZDogYXVkaW9UcmFjay5raW5kfSk7XG4gICAgICAgICAgICBjb25zdCBzb3VyY2UgPSBwcm9jZXNzb3IucmVhZGFibGU7XG4gICAgICAgICAgICBjb25zdCBzaW5rID0gZ2VuZXJhdG9yLndyaXRhYmxlO1xuXG4gICAgICAgICAgICBzb3VyY2VcbiAgICAgICAgICAgICAgLnBpcGVUaHJvdWdoKHRyYW5zZm9ybWVyKVxuICAgICAgICAgICAgICAucGlwZVRvKHNpbmspO1xuXG4gICAgICAgICAgICB0cmFuc2Zvcm1lZFN0cmVhbS5hZGRUcmFjayhnZW5lcmF0b3IpO1xuXG4gICAgICAgICAgICBjb25zdCBtZWRpYVN0cmVhbSA9IG5ldyBNZWRpYVN0cmVhbSgpO1xuICAgICAgICAgICAgY29uc3QgYXVkaW9QdW1wZXIgPSBuZXcgQXVkaW8oKTtcblxuICAgICAgICAgICAgbWVkaWFTdHJlYW0uYWRkVHJhY2sodHJhY2spO1xuICAgICAgICAgICAgYXVkaW9QdW1wZXIuc3JjT2JqZWN0ID0gbWVkaWFTdHJlYW07XG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGF1ZGlvUHVtcGVyKTtcbiAgICAgICAgICAgIGRpc3Bvc2FibGVzLmFkZChuZXcgRGlzcG9zYWJsZSgoKSA9PiB7XG4gICAgICAgICAgICAgIHRyYW5zZm9ybWVkU3RyZWFtLnJlbW92ZVRyYWNrKGdlbmVyYXRvcik7XG4gICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoYXVkaW9QdW1wZXIpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0cmFuc2Zvcm1lZFN0cmVhbS5hZGRUcmFjayh0cmFjayk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGFzc2VydFVucmVhY2hhYmxlKGtpbmQpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHRyYW5zZm9ybWVkU3RyZWFtLFxuICAgICAgZGlzcG9zYWJsZXNcbiAgICB9O1xuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnNlcnRhYmxlU3RyZWFtcyBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVN0cmVhbVRyYWNrVHJhbnNmb3JtPFQgPSBBdWRpb0RhdGEgfCBWaWRlb0ZyYW1lPiB7XG4gICAgKHRyYWNrOiBNZWRpYVN0cmVhbVRyYWNrLCBjaHVuazogVCwgY29udHJvbGxlcjogVHJhbnNmb3JtU3RyZWFtRGVmYXVsdENvbnRyb2xsZXI8VD4pOiB2b2lkIHwgUHJvbWlzZUxpa2U8dm9pZD47XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN0cmVhbVRyYWNrVHJhbnNmb3JtIHtcbiAgc3RhdGljIHZhbGlkYXRlTWVkaWFTdHJlYW1UcmFja1RyYW5zZm9ybShtb2RlOiAnYXVkaW8nIHwgJ3ZpZGVvJywgaXRlbTogSVN0cmVhbVRyYWNrVHJhbnNmb3JtKSB7XG4gICAgaWYgKHR5cGVvZiBpdGVtICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB2YWxpZDogZmFsc2UsXG4gICAgICAgIHZhbGlkYXRpb25SZXN1bHQ6IGBVbmV4cGVjdGVkICR7bW9kZX0gTWVkaWEgU3RyZWFtIFRyYWNrIHRyYW5zZm9ybSBmdW5jdGlvbiB0eXBlLiBGb3VuZCBbJHt0eXBlb2YgaXRlbX1dYFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAoaXRlbS5sZW5ndGggIT09IDMpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZhbGlkOiBmYWxzZSxcbiAgICAgICAgdmFsaWRhdGlvblJlc3VsdDogYFVuZXhwZWN0ZWQgJHttb2RlfSBNZWRpYSBTdHJlYW0gVHJhY2sgdHJhbnNmb3JtIGZ1bmN0aW9uIHBhcmFtZXRlciBsZW5ndGguIEV4cGVjdGVkIDMuIEZvdW5kIFske2l0ZW0ubGVuZ3RofV1gXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB2YWxpZDogdHJ1ZSxcbiAgICAgIHZhbGlkYXRpb25SZXN1bHQ6ICdvaydcbiAgICB9O1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBCcm93c2VyRGV0ZWN0b3IgZnJvbSAnLi4vLi4vZG9tL0Jyb3dzZXJEZXRlY3Rvcic7XG5cbmV4cG9ydCBjb25zdCBTa2lwRnJhbWUgPSBTeW1ib2woKTtcblxuZXhwb3J0IHR5cGUgU3Vycm9nYXRlRnJhbWVUeXBlID0gQXJyYXlCdWZmZXIgfCB1bmRlZmluZWQgfCB0eXBlb2YgU2tpcEZyYW1lO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyIHtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzU2FmYXJpID0gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnU2FmYXJpJztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzTW9iaWxlQ2hyb21lID0gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnQ2hyb21lJyAmJiBCcm93c2VyRGV0ZWN0b3IuaXNNb2JpbGUoKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzQW5kcm9pZENocm9tZSA9IEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0Nocm9tZScgJiYgQnJvd3NlckRldGVjdG9yLmlzQW5kcm9pZDtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX3NpbmdsZVplcm9CeXRlID0gbmV3IFVpbnQ4QXJyYXkoWzB4MDBdKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2R1bW15QXVkaW9TaWxlbnRQZXJDb2RlYyA9IHtPUFVTOiBuZXcgVWludDhBcnJheShbMHg2OCwgMHgwNywgMHhkOSwgMHhhYiwgMHhiYywgMHg3OSwgMHg4NywgMHhhYiwgMHg4ZSwgMHg0YSwgMHgxNCwgMHhmMywgMHhhNywgMHgxYywgMHhmMiwgMHg5YSwgMHg3YSwgMHg0NSwgMHhhNywgMHgyZCwgMHg0NCwgMHgyNSwgMHg3NCwgMHg0YywgMHhhZCwgMHgxNiwgMHhiMywgMHgwZSwgMHg1MSwgMHg1NywgMHhlYSwgMHhlNywgMHhhZCwgMHgyYSwgMHgzOCwgMHhjZSwgMHgzM10pfTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2R1bW15MngyVmlkZW9JRnJhbWVQZXJDb2RlYyA9IHtcbiAgICBIMjY0OiBuZXcgVWludDhBcnJheShbXG4gICAgICAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDA5LCAweGYwLCAvLyBBY2Nlc3MgdW5pdCBkZWxpbWl0ZXJcbiAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4NjcsIDB4ZjQsIDB4MDAsIDB4MGEsIDB4OTEsIDB4OWIsIDB4MmIsIDB4ZjEsIDB4ZjEsIDB4ZjgsIDB4MDgsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MTksIDB4MDcsIDB4ODksIDB4MTIsIDB4Y2IsIC8vIFNlcXVlbmNlIHBhcmFtZXRlciBzZXRcbiAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4NjgsIDB4ZWIsIDB4ZTMsIDB4YzQsIDB4NDgsIDB4NDQsIC8vIFBpY3R1cmUgcGFyYW10ZXIgc2V0XG4gICAgICAvKiAqLyAweDAwLCAweDAwLCAweDAxLCAweDY1LCAweDg4LCAweDgyLCAweDAwLCAweDNmLCAweDcwLCAweDIzLCAweDg2LCAweGU2LCAweGQxLCAweDgwLCAweDA5LCAweGFmLCAweDBhLCAweDQxLCAweDY2LCAweDZiLCAweDU0LCAweDQ2LCAweGZiLCAweDcxLCAweGQ5LCAweDdmLCAweGZmLCAweGZmLCAweGY5XSksIC8vIFNsaWNlIGxheWVyOiBpZHIgZGF0YVxuICAgIFZQODogbmV3IFVpbnQ4QXJyYXkoWzB4YjAsIDB4MDIsIDB4MDAsIDB4OWQsIDB4MDEsIDB4MmEsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MzksIDB4NmIsIDB4MDAsIDB4MjcsIDB4MWMsIDB4MjQsIDB4MGMsIDB4MmMsIDB4MmMsIDB4NDQsIDB4Y2MsIDB4MjQsIDB4NDEsIDB4YTgsIDB4MDAsIDB4MTMsIDB4YTcsIDB4YTMsIDB4N2EsIDB4NTAsIDB4MDAsIDB4ZmUsIDB4ZWIsIDB4ZGUsIDB4MmYsIDB4OGEsIDB4MWUsIDB4NmIsIDB4N2IsIDB4MDcsIDB4NzIsIDB4NjMsIDB4MDksIDB4YTQsIDB4OGUsIDB4YzBdKSxcbiAgICBWUDk6IG5ldyBVaW50OEFycmF5KFsweDgyLCAweDQ5LCAweDgzLCAweDQyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDc2LCAweDM4LCAweDI0LCAweDFjLCAweDE5LCAweGEwLCAweDAwLCAweDAwLCAweDIwLCAweDQwLCAweDAwLCAweDExLCAweGJmLCAweGRkLCAweDc3LCAweGZmLCAweDQwLCAweDdmLCAweGIxLCAweDAwXSlcbiAgfTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2R1bW15MngyVmlkZW9QRnJhbWVQZXJDb2RlYyA9IHtcbiAgICBIMjY0OiBuZXcgVWludDhBcnJheShbXG4gICAgICAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDA5LCAweGYwLCAvLyBBY2Nlc3MgdW5pdCBkZWxpbWl0ZXJcbiAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4NDEsIDB4OWEsIDB4NjgsIDB4NDksIDB4YTgsIDB4NDEsIDB4NjgsIDB4OTksIDB4NGMsIDB4MGYsIDB4ZmYsIDB4OTIsIDB4ODFdKSwgLy8gU2xpY2UgbGF5ZXI6IG5vbiBpZHIgZGF0YVxuICAgIFZQODogbmV3IFVpbnQ4QXJyYXkoWzB4MzEsIDB4MDMsIDB4MDAsIDB4ZTQsIDB4ZTAsIDB4YTgsIDB4OWIsIDB4MzcsIDB4YWYsIDB4MTAsIDB4NGYsIDB4NGYsIDB4YjEsIDB4MGEsIDB4MmYsIDB4ZTQsIDB4OTIsIDB4YzAsIDB4MWYsIDB4ZTcsIDB4NGYsIDB4NDYsIDB4ZmYsIDB4ZWUsIDB4NTEsIDB4YzEsIDB4NWQsIDB4MDAsIDB4ZmUsIDB4ZWIsIDB4ZGUsIDB4MmYsIDB4OGEsIDB4MWUsIDB4NmIsIDB4N2IsIDB4MDcsIDB4NzIsIDB4NjMsIDB4MDksIDB4YTQsIDB4OGUsIDB4YzBdKSxcbiAgICBWUDk6IG5ldyBVaW50OEFycmF5KFsweDg2LCAweDAwLCAweDQwLCAweDkyLCAweDljLCAweDI0LCAweDQ4LCAweDAwLCAweDAwLCAweDAzLCAweDcwLCAweDAwLCAweDAwLCAweDRiLCAweDQwXSlcbiAgfTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2R1bW15ODJ4ODJIMjY0ID0ge1xuICAgIElGcmFtZTogbmV3IFVpbnQ4QXJyYXkoW1xuICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg2NywgMHg0MiwgMHhjMCwgMHgwZCwgMHhkYSwgMHgxOCwgMHhkZSwgMHgyMiwgMHgyMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgwMywgMHhjOCwgMHhmMSwgMHg0MiwgMHhhYSwgLy8gU2VxdWVuY2UgcGFyYW1ldGVyIHNldFxuICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg2OCwgMHhjZSwgMHgwZiwgMHhjOCwgLy8gUGljdHVyZSBwYXJhbWV0ZXIgc2V0XG4gICAgICAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDA2LCAweDAzLCAuLi5uZXcgVWludDhBcnJheSg0MCkuZmlsbCgweGZmKSwgMHg1ZiwgLi4ubmV3IFVpbnQ4QXJyYXkoMTAyOTUpLmZpbGwoMHhmZiksIDB4ODAsIC8vIFN1cHBsZW1lbnRhbCBlbmhhbmNlbWVudCBpbmZvcm1hdGlvbiAoU0VJKVxuICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg2NSwgMHg4OCwgMHg4NCwgMHgwNSwgLi4ubmV3IFVpbnQ4QXJyYXkoMykuZmlsbCgweGZmKSwgMHgwZiwgMHg0NSwgMHgwMCwgMHgwMSwgMHg1NywgMHg5ZiwgMHgyNywgMHgyNywgMHgyNywgMHgyNywgMHgyNywgMHg1ZCwgMHg3NSwgMHhkNywgMHg1ZCwgMHg3NSwgMHhkNywgMHg1ZCwgMHg3NSwgMHhkNywgMHg1ZCwgMHg3NSwgMHhkNywgMHg1ZCwgMHg3NSwgMHhkNywgMHg1ZCwgMHg3NSwgMHhkNywgMHg1ZCwgMHg3NSwgMHhkNywgMHg1ZCwgMHg3OF0pLCAvLyBTbGljZSBsYXllcjogSWRyIGRhdGFcbiAgICBQRnJhbWU6IG5ldyBVaW50OEFycmF5KFtcbiAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDYsIDB4MDMsIC4uLm5ldyBVaW50OEFycmF5KDQwKS5maWxsKDB4ZmYpLCAweGE0LCAuLi5uZXcgVWludDhBcnJheSgxMDM2NCkuZmlsbCgweGZmKSwgMHg4MCwgLy8gU0VJXG4gICAgICAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDQxLCAweDlhLCAweDIwLCAweDE1LCAweGYwLCAweDRiXSkgLy8gU2xpY2UgbGF5ZXI6IG5vbiBpZHIgZGF0YVxuICB9O1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfZHVtbXk4Mng4MkgyNjRQRnJhbWVGcmFtZU51bWJlckluZGV4ID0gMTA0MTg7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9zdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyUmVzZXQgPSAxO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfdXNlVXBkYXRlU3Vycm9nYXRlODJ4ODJQRnJhbWVGcmFtZU51bWJlciA9IFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX2lzTW9iaWxlQ2hyb21lIHx8IFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX2lzU2FmYXJpO1xuICBwcml2YXRlIHN0YXRpYyBfc3Vycm9nYXRlODJ4ODJQRnJhbWVGcmFtZU51bWJlciA9IFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3N1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXJSZXNldDtcblxuICBzdGF0aWMgZ2V0U3Vycm9nYXRlQXVkaW9TaWxlbnRQZXJDb2RlYyhjb2RlYzogc3RyaW5nKTogQXJyYXlCdWZmZXIgfCB1bmRlZmluZWQge1xuICAgIHN3aXRjaCAoY29kZWMudG9VcHBlckNhc2UoKSkge1xuICAgICAgY2FzZSAnT1BVUyc6IHtcbiAgICAgICAgcmV0dXJuIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX2R1bW15QXVkaW9TaWxlbnRQZXJDb2RlYy5PUFVTLmJ1ZmZlcjtcbiAgICAgIH1cblxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBnZXRJbnZhbGlkU3Vycm9nYXRlQXVkaW9EYXRhKCk6IEFycmF5QnVmZmVyIHtcbiAgICByZXR1cm4gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fc2luZ2xlWmVyb0J5dGUuYnVmZmVyO1xuICB9XG5cbiAgc3RhdGljIGdldFN1cnJvZ2F0ZVZpZGVvSUZyYW1lUGVyQ29kZWMoY29kZWM6IHN0cmluZyk6IEFycmF5QnVmZmVyIHwgdW5kZWZpbmVkIHtcbiAgICBzd2l0Y2ggKGNvZGVjLnRvVXBwZXJDYXNlKCkpIHtcbiAgICAgIGNhc2UgJ0gyNjQnOiB7XG4gICAgICAgIGlmIChTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl91c2VVcGRhdGVTdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyKSB7XG4gICAgICAgICAgU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fc3Vycm9nYXRlODJ4ODJQRnJhbWVGcmFtZU51bWJlciA9IFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3N1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXJSZXNldDtcblxuICAgICAgICAgIHJldHVybiBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9kdW1teTgyeDgySDI2NC5JRnJhbWUuYnVmZmVyO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX2R1bW15MngyVmlkZW9JRnJhbWVQZXJDb2RlYy5IMjY0LmJ1ZmZlcjtcbiAgICAgIH1cblxuICAgICAgY2FzZSAnVlA4Jzoge1xuICAgICAgICByZXR1cm4gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fZHVtbXkyeDJWaWRlb0lGcmFtZVBlckNvZGVjLlZQOC5idWZmZXI7XG4gICAgICB9XG5cbiAgICAgIGNhc2UgJ1ZQOSc6IHtcbiAgICAgICAgcmV0dXJuIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX2R1bW15MngyVmlkZW9JRnJhbWVQZXJDb2RlYy5WUDkuYnVmZmVyO1xuICAgICAgfVxuXG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGdldEludmFsaWRTdXJyb2dhdGVWaWRlb0lGcmFtZShjb2RlYzogc3RyaW5nKTogU3Vycm9nYXRlRnJhbWVUeXBlIHtcbiAgICBpZiAoKGNvZGVjLnRvVXBwZXJDYXNlKCkgPT09ICdIMjY0JykgJiYgU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fdXNlVXBkYXRlU3Vycm9nYXRlODJ4ODJQRnJhbWVGcmFtZU51bWJlcikge1xuICAgICAgU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fc3Vycm9nYXRlODJ4ODJQRnJhbWVGcmFtZU51bWJlciA9IFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3N1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXJSZXNldDtcblxuICAgICAgaWYgKFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX2lzQW5kcm9pZENocm9tZSkge1xuICAgICAgICByZXR1cm4gU2tpcEZyYW1lO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9zaW5nbGVaZXJvQnl0ZS5idWZmZXI7XG4gIH1cblxuICBzdGF0aWMgZ2V0U3Vycm9nYXRlVmlkZW9QRnJhbWVQZXJDb2RlYyhjb2RlYzogc3RyaW5nKTogQXJyYXlCdWZmZXIgfCB1bmRlZmluZWQge1xuICAgIHN3aXRjaCAoY29kZWMudG9VcHBlckNhc2UoKSkge1xuICAgICAgY2FzZSAnSDI2NCc6IHtcbiAgICAgICAgaWYgKFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3VzZVVwZGF0ZVN1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXIpIHtcbiAgICAgICAgICBjb25zdCBidWZmZXIgPSBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLmdldFN1cnJvZ2F0ZTgyeDgyUEZyYW1lQW5kVXBkYXRlRnJhbWVOdW1iZXIoKTtcblxuICAgICAgICAgIHJldHVybiBidWZmZXI7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fZHVtbXkyeDJWaWRlb1BGcmFtZVBlckNvZGVjLkgyNjQuYnVmZmVyO1xuICAgICAgfVxuXG4gICAgICBjYXNlICdWUDgnOiB7XG4gICAgICAgIHJldHVybiBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9kdW1teTJ4MlZpZGVvUEZyYW1lUGVyQ29kZWMuVlA4LmJ1ZmZlcjtcbiAgICAgIH1cblxuICAgICAgY2FzZSAnVlA5Jzoge1xuICAgICAgICByZXR1cm4gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fZHVtbXkyeDJWaWRlb1BGcmFtZVBlckNvZGVjLlZQOS5idWZmZXI7XG4gICAgICB9XG5cbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzdGF0aWMgZ2V0SW52YWxpZFN1cnJvZ2F0ZVZpZGVvUEZyYW1lKGNvZGVjOiBzdHJpbmcpOiBTdXJyb2dhdGVGcmFtZVR5cGUge1xuICAgIGlmICgoY29kZWMudG9VcHBlckNhc2UoKSA9PT0gJ0gyNjQnKSAmJiBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl91c2VVcGRhdGVTdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyKSB7XG4gICAgICBjb25zdCBzYXZlZFN1cnJvZ2F0ZUZyYW1lTnVtYmVyID0gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fc3Vycm9nYXRlODJ4ODJQRnJhbWVGcmFtZU51bWJlcjtcbiAgICAgIGNvbnN0IGJ1ZmZlciA9IFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuZ2V0U3Vycm9nYXRlODJ4ODJQRnJhbWVBbmRVcGRhdGVGcmFtZU51bWJlcigpO1xuXG4gICAgICBpZiAoc2F2ZWRTdXJyb2dhdGVGcmFtZU51bWJlciA+IFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3N1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXJSZXNldCkge1xuICAgICAgICBpZiAoU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5faXNBbmRyb2lkQ2hyb21lKSB7XG4gICAgICAgICAgcmV0dXJuIFNraXBGcmFtZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9zaW5nbGVaZXJvQnl0ZS5idWZmZXI7XG4gICAgICB9XG5cbiAgICAgIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3N1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXIrKztcblxuICAgICAgcmV0dXJuIGJ1ZmZlcjtcbiAgICB9XG5cbiAgICByZXR1cm4gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fc2luZ2xlWmVyb0J5dGUuYnVmZmVyO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0U3Vycm9nYXRlODJ4ODJQRnJhbWVBbmRVcGRhdGVGcmFtZU51bWJlcigpOiBBcnJheUJ1ZmZlciB7XG4gICAgY29uc3QgYml0TWFzazEgPSAweDBlO1xuICAgIGNvbnN0IGJpdE1hc2syID0gMHgwMTtcbiAgICBjb25zdCBiaXRTaGlmdFJpZ2h0QnkxID0gMTtcbiAgICBjb25zdCBiaXRTaGlmdExlZnRCeTcgPSA3O1xuICAgIGNvbnN0IGJ5dGUxID0gKChTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9zdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyICYgYml0TWFzazEpID4+IGJpdFNoaWZ0UmlnaHRCeTEpO1xuICAgIGNvbnN0IGJ5dGUyID0gKChTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9zdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyICYgYml0TWFzazIpIDw8IGJpdFNoaWZ0TGVmdEJ5Nyk7XG4gICAgY29uc3QgY29weU9mRHVtbXlQRnJhbWVzID0gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fZHVtbXk4Mng4MkgyNjQuUEZyYW1lLnNsaWNlKCk7XG4gICAgY29uc3QgYnVmZmVyID0gY29weU9mRHVtbXlQRnJhbWVzLmJ1ZmZlcjtcbiAgICBjb25zdCBidWZmZXJJbmRleCA9IFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX2R1bW15ODJ4ODJIMjY0UEZyYW1lRnJhbWVOdW1iZXJJbmRleDtcblxuICAgIGJ1ZmZlcltidWZmZXJJbmRleF0gfD0gYnl0ZTE7XG4gICAgYnVmZmVyW2J1ZmZlckluZGV4ICsgMV0gfD0gYnl0ZTI7XG4gICAgU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fc3Vycm9nYXRlODJ4ODJQRnJhbWVGcmFtZU51bWJlcisrO1xuXG4gICAgcmV0dXJuIGJ1ZmZlcjtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyIGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuZGVjbGFyZSBjb25zdCBfX0JVSUxEX1ZFUlNJT05fXzogc3RyaW5nO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWZXJzaW9uTWFuYWdlciB7XG4gIHByaXZhdGUgc3RhdGljIF9kZWZhdWx0VmVyc2lvbiA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKTtcblxuICBzdGF0aWMgZ2V0IHNka1ZlcnNpb24oKTogc3RyaW5nIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIF9fQlVJTERfVkVSU0lPTl9fO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiB0aGlzLl9kZWZhdWx0VmVyc2lvbjtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBUZWxlbWV0cnlTZXJ2aWNlIGZyb20gJy4vVGVsZW1ldHJ5U2VydmljZSc7XG5pbXBvcnQgVGVsZW1ldHJ5Q29uZmlndXJhdGlvbiBmcm9tICcuL1RlbGVtZXRyeUNvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IHtJQXBwZW5kZXJ9IGZyb20gJy4uL2xvZ2dlci9JQXBwZW5kZXInO1xuaW1wb3J0IHtMb2dnaW5nTGV2ZWx9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZWxlbWV0cnlBcHBlbmRlciBpbXBsZW1lbnRzIElBcHBlbmRlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RlbGVtZXRyeVNlcnZpY2U6IFRlbGVtZXRyeVNlcnZpY2U7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RlbmFuY3k6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RocmVzaG9sZDogTG9nZ2luZ0xldmVsO1xuXG4gIGNvbnN0cnVjdG9yKHRlbGVtZXRyeUNvbmZpZ3VyYXRpb246IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24pIHtcbiAgICB0aGlzLl90ZW5hbmN5ID0gdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi50ZW5hbmN5O1xuICAgIHRoaXMuX3Nlc3Npb25JZCA9IHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24uc2Vzc2lvbklkO1xuICAgIHRoaXMuX3RocmVzaG9sZCA9IHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24udGhyZXNob2xkO1xuICAgIHRoaXMuX3RlbGVtZXRyeVNlcnZpY2UgPSBuZXcgVGVsZW1ldHJ5U2VydmljZSh0ZWxlbWV0cnlDb25maWd1cmF0aW9uKTtcbiAgfVxuXG4gIGxvZyhsb2dMZXZlbDogTG9nZ2luZ0xldmVsLCBtZXNzYWdlOiBzdHJpbmcsIGNhdGVnb3J5OiBzdHJpbmcsIGRhdGU6IERhdGUpOiB2b2lkIHtcbiAgICBpZiAobG9nTGV2ZWwgPCB0aGlzLl90aHJlc2hvbGQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl90ZWxlbWV0cnlTZXJ2aWNlLnB1c2gobG9nTGV2ZWwsIG1lc3NhZ2UsIGNhdGVnb3J5LCBkYXRlKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtMb2dnaW5nTGV2ZWx9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXInO1xuaW1wb3J0IExvZ2dlckRlZmF1bHRzIGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJEZWZhdWx0cyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24ge1xuICBwcml2YXRlIF91cmwgPSAnaHR0cHM6Ly90ZWxlbWV0cnkucGhlbml4cnRzLmNvbS90ZWxlbWV0cnkvbG9ncyc7XG4gIHByaXZhdGUgX3RlbmFuY3k6IHN0cmluZztcbiAgcHJpdmF0ZSBfc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHByaXZhdGUgX2Vudmlyb25tZW50OiBzdHJpbmc7XG4gIHByaXZhdGUgX3BhZ2VMb2FkVGltZTogbnVtYmVyO1xuICBwcml2YXRlIF90aHJlc2hvbGQgPSBMb2dnZXJEZWZhdWx0cy5kZWZhdWx0VGVsZW1ldHJ5TG9nZ2luZ0xldmVsO1xuXG4gIGdldCB1cmwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdXJsO1xuICB9XG5cbiAgc2V0IHVybCh1cmw6IHN0cmluZykge1xuICAgIGNvbnN0IHRlbGVtZXRyeVVybCA9IG5ldyBVUkwodXJsKTtcblxuICAgIHRlbGVtZXRyeVVybC5wYXRobmFtZSA9IHRlbGVtZXRyeVVybC5wYXRobmFtZSArICcvbG9ncyc7XG5cbiAgICB0aGlzLl91cmwgPSB0ZWxlbWV0cnlVcmwudG9TdHJpbmcoKTtcbiAgfVxuXG4gIGdldCBlbnZpcm9ubWVudCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9lbnZpcm9ubWVudDtcbiAgfVxuXG4gIHNldCBlbnZpcm9ubWVudChlbnZpcm9ubWVudDogc3RyaW5nKSB7XG4gICAgdGhpcy5fZW52aXJvbm1lbnQgPSBlbnZpcm9ubWVudDtcbiAgfVxuXG4gIGdldCB0ZW5hbmN5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3RlbmFuY3k7XG4gIH1cblxuICBzZXQgdGVuYW5jeSh0ZW5hbmN5OiBzdHJpbmcpIHtcbiAgICB0aGlzLl90ZW5hbmN5ID0gdGVuYW5jeTtcbiAgfVxuXG4gIGdldCBzZXNzaW9uSWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fc2Vzc2lvbklkO1xuICB9XG5cbiAgc2V0IHNlc3Npb25JZChzZXNzaW9uSWQ6IHN0cmluZykge1xuICAgIHRoaXMuX3Nlc3Npb25JZCA9IHNlc3Npb25JZDtcbiAgfVxuXG4gIGdldCBwYWdlTG9hZFRpbWUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fcGFnZUxvYWRUaW1lO1xuICB9XG5cbiAgc2V0IHBhZ2VMb2FkVGltZShwYWdlTG9hZFRpbWU6IG51bWJlcikge1xuICAgIHRoaXMuX3BhZ2VMb2FkVGltZSA9IHBhZ2VMb2FkVGltZTtcbiAgfVxuXG4gIGdldCB0aHJlc2hvbGQoKTogTG9nZ2luZ0xldmVsIHtcbiAgICByZXR1cm4gdGhpcy5fdGhyZXNob2xkO1xuICB9XG5cbiAgc2V0IHRocmVzaG9sZCh0aHJlc2hvbGQ6IExvZ2dpbmdMZXZlbCkge1xuICAgIHRoaXMuX3RocmVzaG9sZCA9IHRocmVzaG9sZDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtMb2dnaW5nTGV2ZWx9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXInO1xuaW1wb3J0IE51bWJlcnMgZnJvbSAnLi4vbGFuZy9OdW1iZXJzJztcbmltcG9ydCBWZXJzaW9uTWFuYWdlciBmcm9tICcuLi9zZGsvdmVyc2lvbi9WZXJzaW9uTWFuYWdlcic7XG5pbXBvcnQgVGVsZW1ldHJ5Q29uZmlndXJhdGlvbiBmcm9tICcuL1RlbGVtZXRyeUNvbmZpZ3VyYXRpb24nO1xuXG5jb25zdCByZXF1ZXN0U2l6ZUxpbWl0ID0gODE5MjtcblxuaW50ZXJmYWNlIElMb2dJdGVtIHtcbiAgdGltZXN0YW1wOiBzdHJpbmc7XG4gIHRlbmFuY3k6IHN0cmluZztcbiAgbGV2ZWw6IHN0cmluZztcbiAgY2F0ZWdvcnk6IHN0cmluZztcbiAgbWVzc2FnZTogc3RyaW5nO1xuICBzZXNzaW9uSWQ6IHN0cmluZztcbiAgdmVyc2lvbjogc3RyaW5nO1xuICBlbnZpcm9ubWVudDogc3RyaW5nO1xuICBmdWxsUXVhbGlmaWVkTmFtZTogc3RyaW5nO1xuICBydW50aW1lOiBudW1iZXI7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlbGVtZXRyeVNlcnZpY2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IF90ZWxlbWV0cnlDb25maWd1cmF0aW9uOiBUZWxlbWV0cnlDb25maWd1cmF0aW9uO1xuXG4gIHByaXZhdGUgX2xvZ3M6IEFycmF5PElMb2dJdGVtPiA9IFtdO1xuICBwcml2YXRlIF9pc1NlbmRpbmc6IGJvb2xlYW47XG4gIHByaXZhdGUgX2RvbWFpbiA9IGxvY2F0aW9uLmhvc3RuYW1lO1xuXG4gIGNvbnN0cnVjdG9yKHRlbGVtZXRyeUNvbmZpZ3VyYXRpb246IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24pIHtcbiAgICB0aGlzLl90ZWxlbWV0cnlDb25maWd1cmF0aW9uID0gdGVsZW1ldHJ5Q29uZmlndXJhdGlvbjtcbiAgfVxuXG4gIHB1c2gobG9nTGV2ZWw6IExvZ2dpbmdMZXZlbCwgbWVzc2FnZTogc3RyaW5nLCBjYXRlZ29yeTogc3RyaW5nLCB0aW1lc3RhbXA6IERhdGUpOiB2b2lkIHtcbiAgICBjb25zdCBydW50aW1lID0gKHRpbWVzdGFtcC52YWx1ZU9mKCkgLSB0aGlzLl90ZWxlbWV0cnlDb25maWd1cmF0aW9uLnBhZ2VMb2FkVGltZSkgLyAxMDAwO1xuICAgIGNvbnN0IGxvZ1JlY29yZCA9IHtcbiAgICAgIHRpbWVzdGFtcDogdGltZXN0YW1wLnRvSVNPU3RyaW5nKCksXG4gICAgICB0ZW5hbmN5OiB0aGlzLl90ZWxlbWV0cnlDb25maWd1cmF0aW9uLnRlbmFuY3ksXG4gICAgICBsZXZlbDogTG9nZ2luZ0xldmVsW2xvZ0xldmVsXSxcbiAgICAgIGNhdGVnb3J5LFxuICAgICAgbWVzc2FnZSxcbiAgICAgIHNlc3Npb25JZDogdGhpcy5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi5zZXNzaW9uSWQsXG4gICAgICB2ZXJzaW9uOiBWZXJzaW9uTWFuYWdlci5zZGtWZXJzaW9uLFxuICAgICAgZW52aXJvbm1lbnQ6IHRoaXMuX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb24uZW52aXJvbm1lbnQsXG4gICAgICBmdWxsUXVhbGlmaWVkTmFtZTogdGhpcy5fZG9tYWluLFxuICAgICAgcnVudGltZVxuICAgIH07XG5cbiAgICBpZiAobG9nTGV2ZWwgPCBMb2dnaW5nTGV2ZWwuRXJyb3IpIHtcbiAgICAgIHRoaXMuX2xvZ3MucHVzaChsb2dSZWNvcmQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9sb2dzLnVuc2hpZnQobG9nUmVjb3JkKTtcbiAgICB9XG5cbiAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5zZW5kTG9nc0lmQWJsZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzZW5kTG9ncyhsb2dNZXNzYWdlczogQXJyYXk8SUxvZ0l0ZW0+KTogUHJvbWlzZTxSZXNwb25zZSB8IHZvaWQ+IHtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuXG4gICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KHtyZWNvcmRzOiBsb2dNZXNzYWdlc30pKTtcblxuICAgIHJldHVybiBhd2FpdCBmZXRjaCh0aGlzLl90ZWxlbWV0cnlDb25maWd1cmF0aW9uLnVybCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5OiBmb3JtRGF0YVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzZW5kTG9nc0lmQWJsZSgpOiBQcm9taXNlPFJlc3BvbnNlIHwgdm9pZD4ge1xuICAgIGlmICh0aGlzLl9sb2dzLmxlbmd0aCA8PSAwIHx8IHRoaXMuX2lzU2VuZGluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBudW1iZXJPZkxvZ3NUb1NlbmQgPSAwO1xuICAgIGxldCBzaXplT2ZMb2dzVG9TZW5kID0gMDtcblxuICAgIHRoaXMuX2lzU2VuZGluZyA9IHRydWU7XG5cbiAgICBjb25zdCBnZXRJdGVtU2l6ZSA9IGl0ZW0gPT4gdHlwZW9mIGl0ZW0gPT09ICdudW1iZXInID8gTnVtYmVycy5jb3VudE51bWJlckxlbmd0aChpdGVtKSA6IGl0ZW0ubGVuZ3RoO1xuICAgIGNvbnN0IGdldExvZ1NpemUgPSAobG9nOiBJTG9nSXRlbSk6IG51bWJlciA9PiBPYmplY3QudmFsdWVzKGxvZylcbiAgICAgIC5yZWR1Y2UoKHN1bSwgaXRlbSkgPT4gc3VtICsgKGl0ZW0gPyBnZXRJdGVtU2l6ZShpdGVtKSA6IDApLCAwKTtcblxuICAgIHdoaWxlICh0aGlzLl9sb2dzLmxlbmd0aCA+IG51bWJlck9mTG9nc1RvU2VuZCAmJiBnZXRMb2dTaXplKHRoaXMuX2xvZ3NbbnVtYmVyT2ZMb2dzVG9TZW5kXSkgKyBzaXplT2ZMb2dzVG9TZW5kIDwgcmVxdWVzdFNpemVMaW1pdCkge1xuICAgICAgc2l6ZU9mTG9nc1RvU2VuZCArPSBnZXRMb2dTaXplKHRoaXMuX2xvZ3NbbnVtYmVyT2ZMb2dzVG9TZW5kXSk7XG4gICAgICBudW1iZXJPZkxvZ3NUb1NlbmQrKztcbiAgICB9XG5cbiAgICBpZiAoIW51bWJlck9mTG9nc1RvU2VuZCkge1xuICAgICAgdGhpcy5fbG9nc1tudW1iZXJPZkxvZ3NUb1NlbmRdLm1lc3NhZ2UgPSB0aGlzLl9sb2dzW251bWJlck9mTG9nc1RvU2VuZF0ubWVzc2FnZS5zdWJzdHJpbmcoMCxcbiAgICAgICAgZ2V0TG9nU2l6ZSh0aGlzLl9sb2dzW251bWJlck9mTG9nc1RvU2VuZF0pICsgKHJlcXVlc3RTaXplTGltaXQgLSBnZXRMb2dTaXplKHRoaXMuX2xvZ3NbbnVtYmVyT2ZMb2dzVG9TZW5kXSkpKTtcbiAgICAgIG51bWJlck9mTG9nc1RvU2VuZCA9IDE7XG4gICAgfVxuXG4gICAgY29uc3QgbG9nTWVzc2FnZXMgPSB0aGlzLl9sb2dzLnNsaWNlKDAsIG51bWJlck9mTG9nc1RvU2VuZCk7XG5cbiAgICB0aGlzLl9sb2dzID0gdGhpcy5fbG9ncy5zbGljZShudW1iZXJPZkxvZ3NUb1NlbmQpO1xuXG4gICAgcmV0dXJuIHRoaXMuc2VuZExvZ3MobG9nTWVzc2FnZXMpLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgdGhpcy5faXNTZW5kaW5nID0gZmFsc2U7XG5cbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLnNlbmRMb2dzSWZBYmxlKCk7XG5cbiAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9KS5jYXRjaCgoKSA9PiB7XG4gICAgICB0aGlzLl9pc1NlbmRpbmcgPSBmYWxzZTtcblxuICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuc2VuZExvZ3NJZkFibGUoKTtcbiAgICB9KTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEdXJhdGlvbnMge1xuICBwcml2YXRlIHJlYWRvbmx5IF9kdXJhdGlvbjogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKGR1cmF0aW9uID0gMCkge1xuICAgIHRoaXMuX2R1cmF0aW9uID0gZHVyYXRpb247XG4gIH1cblxuICB0b0lzb1N0cmluZygpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLl9kdXJhdGlvbiA9PT0gMCkge1xuICAgICAgcmV0dXJuICdQMFMnO1xuICAgIH1cblxuICAgIGNvbnN0IGlzTmVnYXRpdmUgPSB0aGlzLl9kdXJhdGlvbiA8IDA7XG4gICAgY29uc3QgZHVyYXRpb24gPSBpc05lZ2F0aXZlID8gTWF0aC5hYnModGhpcy5fZHVyYXRpb24pIDogdGhpcy5fZHVyYXRpb247XG4gICAgbGV0IG9mZnNldCA9IE1hdGguZmxvb3IoZHVyYXRpb24pO1xuICAgIGNvbnN0IG1pbGxpc2Vjb25kcyA9IG9mZnNldCAlIDEwMDA7XG5cbiAgICBvZmZzZXQgPSBNYXRoLmZsb29yKG9mZnNldCAvIDEwMDApO1xuXG4gICAgY29uc3Qgc2Vjb25kcyA9IG9mZnNldCAlIDYwO1xuXG4gICAgb2Zmc2V0ID0gTWF0aC5mbG9vcihvZmZzZXQgLyA2MCk7XG5cbiAgICBjb25zdCBtaW51dGVzID0gb2Zmc2V0ICUgNjA7XG5cbiAgICBvZmZzZXQgPSBNYXRoLmZsb29yKG9mZnNldCAvIDYwKTtcblxuICAgIGNvbnN0IGhvdXJzID0gb2Zmc2V0ICUgMjQ7XG4gICAgY29uc3QgcGFydHMgPSBbJ1BUJ107XG5cbiAgICBpZiAoaXNOZWdhdGl2ZSkge1xuICAgICAgcGFydHMudW5zaGlmdCgnLScpO1xuICAgIH1cblxuICAgIGlmIChob3Vycykge1xuICAgICAgcGFydHMucHVzaChob3VycyArICdIJyk7XG4gICAgfVxuXG4gICAgaWYgKG1pbnV0ZXMpIHtcbiAgICAgIHBhcnRzLnB1c2gobWludXRlcyArICdNJyk7XG4gICAgfVxuXG4gICAgaWYgKHNlY29uZHMgfHwgbWlsbGlzZWNvbmRzKSB7XG4gICAgICBwYXJ0cy5wdXNoKFN0cmluZyhzZWNvbmRzKSk7XG5cbiAgICAgIGlmIChtaWxsaXNlY29uZHMpIHtcbiAgICAgICAgcGFydHMucHVzaCgnLicgKyB0aGlzLnBhZFN0YXJ0KG1pbGxpc2Vjb25kcy50b1N0cmluZygpLCAzLCAnMCcpKTtcbiAgICAgIH1cblxuICAgICAgcGFydHMucHVzaCgnUycpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJ0cy5qb2luKCcnKTtcbiAgfVxuXG4gIHBhZFN0YXJ0KGl0ZW06IHN0cmluZywgdGFyZ2V0TGVuZ3RoOiBudW1iZXIsIHBhZFN0cmluZzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICB0YXJnZXRMZW5ndGggPSB0YXJnZXRMZW5ndGggPj4gMDtcbiAgICBwYWRTdHJpbmcgPSBTdHJpbmcoKHR5cGVvZiBwYWRTdHJpbmcgIT09ICd1bmRlZmluZWQnID8gcGFkU3RyaW5nIDogJyAnKSk7XG5cbiAgICBpZiAoaXRlbS5sZW5ndGggPiB0YXJnZXRMZW5ndGgpIHtcbiAgICAgIHJldHVybiBpdGVtO1xuICAgIH1cblxuICAgIHRhcmdldExlbmd0aCA9IHRhcmdldExlbmd0aCAtIGl0ZW0ubGVuZ3RoO1xuXG4gICAgaWYgKHRhcmdldExlbmd0aCA+IHBhZFN0cmluZy5sZW5ndGgpIHtcbiAgICAgIHBhZFN0cmluZyArPSBwYWRTdHJpbmcucmVwZWF0KHRhcmdldExlbmd0aCAvIHBhZFN0cmluZy5sZW5ndGgpO1xuICAgIH1cblxuICAgIHJldHVybiBwYWRTdHJpbmcuc2xpY2UoMCwgdGFyZ2V0TGVuZ3RoKSArIGl0ZW07XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuY29uc3QgZGVmYXVsdEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQgPSAyMDAwO1xuY29uc3QgZGVmYXVsdE1pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQgPSAxO1xuY29uc3QgZGVmYXVsdE1heEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQgPSAzMDAwMDA7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEV4cG9uZW50aWFsQmFja29mZiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2JhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQ6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfbWluQmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZDogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9tYXhCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgYmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZDogbnVtYmVyID0gZGVmYXVsdEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQsXG4gICAgbWluQmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZDogbnVtYmVyID0gZGVmYXVsdE1pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQsXG4gICAgbWF4QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZDogbnVtYmVyID0gZGVmYXVsdE1heEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmRcbiAgKSB7XG4gICAgdGhpcy5fYmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCA9IGJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQ7XG4gICAgdGhpcy5fbWluQmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCA9IG1pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQ7XG4gICAgdGhpcy5fbWF4QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCA9IG1heEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQ7XG4gIH1cblxuICBnZXRFeHBvbmVudGlhbEJhY2tvZmZJbnRlcnZhbEJ5RmFpbHVyZUNvdW50KGZhaWx1cmVDb3VudDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBjb25zdCBiYWNrb2ZmSW50ZXJ2YWxJblNlY29uZHMgPSB0aGlzLl9iYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kIC8gMTAwMDtcbiAgICBjb25zdCByYW5kb21pemF0aW9uID0gMC41ICsgKDAuNSAqIE1hdGgucmFuZG9tKCkpOyAvLyBbMC41LCAxKVxuICAgIGNvbnN0IGV4cG9uZW50aWFsQmFja29mZiA9IE1hdGgucG93KGJhY2tvZmZJbnRlcnZhbEluU2Vjb25kcywgZmFpbHVyZUNvdW50IC0gMik7IC8vICBbMS80IDEvMiAxIDIgNCA4IC4uLi5dXG4gICAgY29uc3QgZXhwb25lbnRpYWxCYWNrb2ZmV2l0aFJhbmRvbWl6YXRpb24gPSBNYXRoLmZsb29yKGV4cG9uZW50aWFsQmFja29mZikgKiByYW5kb21pemF0aW9uO1xuICAgIGNvbnN0IGV4cG9uZW50aWFsQmFja29mZldpdGhSYW5kb21pemF0aW9uSW5NaWxsaXNlY29uZCA9IE1hdGguY2VpbChNYXRoLm1heChleHBvbmVudGlhbEJhY2tvZmZXaXRoUmFuZG9taXphdGlvbiAqIDEwMDAsIHRoaXMuX21pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQpKTtcblxuICAgIHJldHVybiBNYXRoLm1pbihleHBvbmVudGlhbEJhY2tvZmZXaXRoUmFuZG9taXphdGlvbkluTWlsbGlzZWNvbmQsIHRoaXMuX21heEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgSUNvbXBhcmFibGUgZnJvbSAnLi4vbGFuZy9JQ29tcGFyYWJsZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERpbWVuc2lvbiBpbXBsZW1lbnRzIElDb21wYXJhYmxlPERpbWVuc2lvbj4ge1xuICByZWFkb25seSB3aWR0aDogbnVtYmVyO1xuICByZWFkb25seSBoZWlnaHQ6IG51bWJlcjtcblxuICBzdGF0aWMgZ2V0IGVtcHR5KCk6IERpbWVuc2lvbiB7XG4gICAgcmV0dXJuIG5ldyBEaW1lbnNpb24oMCwgMCk7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcih3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcikge1xuICAgIHRoaXMud2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodDtcbiAgfVxuXG4gIGVxdWFscyhvdGhlcjogRGltZW5zaW9uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIG90aGVyICYmIHRoaXMud2lkdGggPT09IG90aGVyLndpZHRoICYmIHRoaXMuaGVpZ2h0ID09PSBvdGhlci5oZWlnaHQ7XG4gIH1cblxuICB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHt0aGlzLndpZHRofXgke3RoaXMuaGVpZ2h0fWA7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7U3RyZWFtU2V0dXBMaXN0ZW5lcn0gZnJvbSAnLi4vZG9tL1N0cmVhbVNldHVwTGlzdGVuZXInO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCBOZXR3b3JrTW9uaXRvciBmcm9tICcuLi9kb20vTmV0d29ya01vbml0b3InO1xuaW1wb3J0IFNESyBmcm9tICcuLi9zZGsvU0RLJztcbmltcG9ydCBNZXRyaWNzVHlwZSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NUeXBlJztcbmltcG9ydCBEdXJhdGlvbnMgZnJvbSAnLi4vdGltZS9EdXJhdGlvbic7XG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5pbXBvcnQgRGlzcG9zYWJsZUxpc3QgZnJvbSAnLi4vbGFuZy9EaXNwb3NhYmxlTGlzdCc7XG5pbXBvcnQgTWV0cmljc1NlcnZpY2UgZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzU2VydmljZSc7XG5cbmludGVyZmFjZSBJTmV0d29ya1N0YXRpc3RpY3Mge1xuICBydHQ/OiBudW1iZXI7XG4gIGVmZmVjdGl2ZVR5cGU/OiBzdHJpbmc7XG4gIGRvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5PzogbnVtYmVyO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTZXNzaW9uVGVsZW1ldHJ5IGltcGxlbWVudHMgSURpc3Bvc2FibGUge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignU2Vzc2lvblRlbGVtZXRyeScpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9tZXRyaWNzU2VydmljZTogTWV0cmljc1NlcnZpY2U7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yID0gU0RLLmFwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yO1xuICBwcml2YXRlIHJlYWRvbmx5IF9uZXR3b3JrTW9uaXRvcjogTmV0d29ya01vbml0b3IgPSBuZXcgTmV0d29ya01vbml0b3IoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGFnZUxvYWRUaW1lOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdCA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICBwcml2YXRlIF9sYXN0TmV0d29ya1N0YXRpc3RpY3M6IElOZXR3b3JrU3RhdGlzdGljcyA9IHt9O1xuXG4gIGNvbnN0cnVjdG9yKHBhZ2VMb2FkVGltZTogbnVtYmVyLCBtZXRyaWNzU2VydmljZTogTWV0cmljc1NlcnZpY2UpIHtcbiAgICB0aGlzLl9wYWdlTG9hZFRpbWUgPSBwYWdlTG9hZFRpbWU7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuX25ldHdvcmtNb25pdG9yKTtcbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZSA9IG1ldHJpY3NTZXJ2aWNlO1xuXG4gICAgaWYgKCF0aGlzLl9uZXR3b3JrTW9uaXRvci5pc1N1cHBvcnRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLl9hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvci5pc0ZvcmVncm91bmQuc3Vic2NyaWJlKGlzRm9yZWdyb3VuZCA9PiB7XG4gICAgICB0aGlzLnJlY29yZEZvcmVncm91bmRDaGFuZ2UoaXNGb3JlZ3JvdW5kKTtcbiAgICB9KSk7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuX25ldHdvcmtNb25pdG9yLnJ0dC5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgdGhpcy5yZWNvcmROZXR3b3JrUlRUVXBkYXRlKHZhbHVlKTtcbiAgICB9KSk7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuX25ldHdvcmtNb25pdG9yLmVmZmVjdGl2ZVR5cGUuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgIHRoaXMucmVjb3JkTmV0d29ya1R5cGVDaGFuZ2VVcGRhdGUodmFsdWUpO1xuICAgIH0pKTtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQodGhpcy5fbmV0d29ya01vbml0b3IuZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgIHRoaXMucmVjb3JkTmV0d29ya0Rvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5VXBkYXRlKHZhbHVlKTtcbiAgICB9KSk7XG4gIH1cblxuICBsaXN0ZW5PblN0cmVhbVNldHVwKCk6IFN0cmVhbVNldHVwTGlzdGVuZXIge1xuICAgIHJldHVybiBuZXcgU3RyZWFtU2V0dXBMaXN0ZW5lcih0aGlzLl9wYWdlTG9hZFRpbWUpO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIHJlY29yZEZvcmVncm91bmRDaGFuZ2UoaXNGb3JlZ3JvdW5kOiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCB0aW1lU2luY2VMYXN0Q2hhbmdlID0gdGhpcy5fYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IuZ2V0VGltZVNpbmNlTGFzdENoYW5nZSgpO1xuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlOiBpc0ZvcmVncm91bmQgPyBNZXRyaWNzVHlwZS5BcHBsaWNhdGlvbkZvcmVncm91bmQgOiBNZXRyaWNzVHlwZS5BcHBsaWNhdGlvbkJhY2tncm91bmQsXG4gICAgICBydW50aW1lOiAobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge3VpbnQ2NDogdGltZVNpbmNlTGFzdENoYW5nZX1cbiAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ0FwcGxpY2F0aW9uIGhhcyBnb25lIGludG8gdGhlIFslc10gYWZ0ZXIgWyVzXSBtcycsXG4gICAgICBpc0ZvcmVncm91bmQgPyAnZm9yZWdyb3VuZCcgOiAnYmFja2dyb3VuZCcsXG4gICAgICBuZXcgRHVyYXRpb25zKHRpbWVTaW5jZUxhc3RDaGFuZ2UpLnRvSXNvU3RyaW5nKCksXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVjb3JkTmV0d29ya1JUVFVwZGF0ZShuZXdSVFQ6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc3Qgb2xkUnR0ID0gdGhpcy5fbGFzdE5ldHdvcmtTdGF0aXN0aWNzLnJ0dDtcblxuICAgIHRoaXMuX2xhc3ROZXR3b3JrU3RhdGlzdGljcy5ydHQgPSBuZXdSVFQ7XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLlJvdW5kVHJpcFRpbWUsXG4gICAgICBydW50aW1lOiAobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge3VpbnQ2NDogbmV3UlRUfSxcbiAgICAgIHByZXZpb3VzVmFsdWU6IG9sZFJ0dCA/IHt1aW50NjQ6IG9sZFJ0dH0gOiB1bmRlZmluZWQsXG4gICAgICByZXNvdXJjZTogJ25hdmlnYXRvcidcbiAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ1slc10gTmV0d29yayBSVFQgY2hhbmdlZCB0byBbJXNdIGZyb20gWyVzXScsXG4gICAgICBuZXcgRHVyYXRpb25zKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkudG9Jc29TdHJpbmcoKSxcbiAgICAgIG5ld1JUVCxcbiAgICAgIG9sZFJ0dFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHJlY29yZE5ldHdvcmtUeXBlQ2hhbmdlVXBkYXRlKG5ld05ldHdvcmtUeXBlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IG9sZE5ldHdvcmtUeXBlID0gdGhpcy5fbGFzdE5ldHdvcmtTdGF0aXN0aWNzLmVmZmVjdGl2ZVR5cGU7XG5cbiAgICB0aGlzLl9sYXN0TmV0d29ya1N0YXRpc3RpY3MuZWZmZWN0aXZlVHlwZSA9IG5ld05ldHdvcmtUeXBlO1xuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZS5OZXR3b3JrVHlwZSxcbiAgICAgIHJ1bnRpbWU6IChub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHZhbHVlOiB7c3RyaW5nOiBuZXdOZXR3b3JrVHlwZX0sXG4gICAgICBwcmV2aW91c1ZhbHVlOiBvbGROZXR3b3JrVHlwZSA/IHtzdHJpbmc6IG9sZE5ldHdvcmtUeXBlfSA6IHVuZGVmaW5lZFxuICAgIH0pO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAnWyVzXSBOZXR3b3JrIGVmZmVjdGl2ZSB0eXBlIGhhcyBjaGFuZ2VkIHRvIFslc10gZnJvbSBbJXNdJyxcbiAgICAgIG5ldyBEdXJhdGlvbnMobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKS50b0lzb1N0cmluZygpLFxuICAgICAgbmV3TmV0d29ya1R5cGUsXG4gICAgICBvbGROZXR3b3JrVHlwZVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHJlY29yZE5ldHdvcmtEb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eVVwZGF0ZShuZXdDYXBhY2l0eTogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBvbGRDYXBhY2l0eSA9IHRoaXMuX2xhc3ROZXR3b3JrU3RhdGlzdGljcy5kb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eTtcblxuICAgIHRoaXMuX2xhc3ROZXR3b3JrU3RhdGlzdGljcy5kb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eSA9IG5ld0NhcGFjaXR5O1xuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZS5Eb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eSxcbiAgICAgIHJ1bnRpbWU6IChub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHZhbHVlOiB7ZmxvYXQ6IG5ld0NhcGFjaXR5fSxcbiAgICAgIHByZXZpb3VzVmFsdWU6IG9sZENhcGFjaXR5ID8ge2Zsb2F0OiBvbGRDYXBhY2l0eX0gOiB1bmRlZmluZWRcbiAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ1slc10gTmV0d29yayBkb3dubGluayB0aHJvdWdocHV0IGNhcGFjaXR5IGNoYW5nZWQgdG8gWyVzXSBmcm9tIFslc10nLFxuICAgICAgbmV3IER1cmF0aW9ucyhub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpLnRvSXNvU3RyaW5nKCksXG4gICAgICBuZXdDYXBhY2l0eSxcbiAgICAgIG9sZENhcGFjaXR5XG4gICAgKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBEdXJhdGlvbnMgZnJvbSAnLi4vdGltZS9EdXJhdGlvbic7XG5pbXBvcnQgRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0Rpc3Bvc2FibGUnO1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuaW1wb3J0IE1ldHJpY3NUeXBlIGZyb20gJy4uL21ldHJpY3MvTWV0cmljc1R5cGUnO1xuaW1wb3J0IERpc3Bvc2FibGVMaXN0IGZyb20gJy4uL2xhbmcvRGlzcG9zYWJsZUxpc3QnO1xuaW1wb3J0IE1ldHJpY3NTZXJ2aWNlIGZyb20gJy4uL21ldHJpY3MvTWV0cmljc1NlcnZpY2UnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWaWRlb1RlbGVtZXRyeSBpbXBsZW1lbnRzIElEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGFnZUxvYWRUaW1lOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NoYW5uZWxTdGFydFRpbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1N0cmVhbVRlbGVtZXRyeScpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9kaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3QgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfc3RyZWFtSWQ6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfbWV0cmljc1NlcnZpY2U6IE1ldHJpY3NTZXJ2aWNlO1xuICBwcml2YXRlIF9saXN0ZW5Ub0ZpcnN0VGltZTogKCkgPT4gdm9pZDtcbiAgcHJpdmF0ZSBfbGlzdGVuRm9yU3RhbGw6ICgpID0+IHZvaWQ7XG4gIHByaXZhdGUgX2xpc3RlbkZvckNvbnRpbnVhdGlvbjogKGV2ZW50KSA9PiB2b2lkO1xuICBwcml2YXRlIF90aW1lVG9GaXJzdEZyYW1lOiBudW1iZXI7XG4gIHByaXZhdGUgX2NoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSBfc3RhcnRSZWNvcmRpbmdGaXJzdEZyYW1lOiBudW1iZXI7XG4gIHByaXZhdGUgX3ZpZGVvU3RhbGxlZDogbnVtYmVyO1xuICBwcml2YXRlIF9sYXN0UHJvZ3Jlc3M6IG51bWJlcjtcbiAgcHJpdmF0ZSBfdmlkZW9SZXNvbHV0aW9uOiBzdHJpbmc7XG4gIHByaXZhdGUgX2NsZWFyVGltZVRvRmlyc3RGcmFtZUxpc3RlbmVyOiBEaXNwb3NhYmxlO1xuICBwcml2YXRlIF9jbGVhclJlYnVmZmVyaW5nTGlzdGVuZXI6IERpc3Bvc2FibGU7XG5cbiAgY29uc3RydWN0b3Ioc3RyZWFtSWQ6IHN0cmluZywgcGFnZUxvYWRUaW1lOiBudW1iZXIsIGNoYW5uZWxTdGFydFRpbWU6IG51bWJlciwgbWV0cmljc1NlcnZpY2U6IE1ldHJpY3NTZXJ2aWNlKSB7XG4gICAgdGhpcy5fc3RyZWFtSWQgPSBzdHJlYW1JZDtcbiAgICB0aGlzLl9wYWdlTG9hZFRpbWUgPSBwYWdlTG9hZFRpbWU7XG4gICAgdGhpcy5fY2hhbm5lbFN0YXJ0VGltZSA9IGNoYW5uZWxTdGFydFRpbWU7XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZSA9IG1ldHJpY3NTZXJ2aWNlO1xuICB9XG5cbiAgc2V0dXBMaXN0ZW5lckZvclRpbWVUb0ZpcnN0VGltZSh2aWRlbzogSFRNTFZpZGVvRWxlbWVudCk6IHZvaWQge1xuICAgIHRoaXMuX3N0YXJ0UmVjb3JkaW5nRmlyc3RGcmFtZSA9IERhdGUubm93KCk7XG5cbiAgICB0aGlzLl9saXN0ZW5Ub0ZpcnN0VGltZSA9ICgpOiB2b2lkID0+IHRoaXMuY2FsbFRpbWVUb0ZpcnN0RnJhbWUoKTtcblxuICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWRlZGRhdGEnLCB0aGlzLl9saXN0ZW5Ub0ZpcnN0VGltZSk7XG4gICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcignbG9hZGVkbWV0YWRhdGEnLCB0aGlzLl9saXN0ZW5Ub0ZpcnN0VGltZSk7XG5cbiAgICB0aGlzLl9jbGVhclRpbWVUb0ZpcnN0RnJhbWVMaXN0ZW5lciA9IG5ldyBEaXNwb3NhYmxlKCgpID0+IHtcbiAgICAgIHZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2xvYWRlZGRhdGEnLCB0aGlzLl9saXN0ZW5Ub0ZpcnN0VGltZSk7XG4gICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkZWRtZXRhZGF0YScsIHRoaXMuX2xpc3RlblRvRmlyc3RUaW1lKTtcbiAgICB9KTtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQodGhpcy5fY2xlYXJUaW1lVG9GaXJzdEZyYW1lTGlzdGVuZXIpO1xuICB9XG5cbiAgc2V0dXBMaXN0ZW5lckZvclJlYnVmZmVyaW5nKHZpZGVvOiBIVE1MVmlkZW9FbGVtZW50KTogdm9pZCB7XG4gICAgdGhpcy5fbGlzdGVuRm9yU3RhbGwgPSAoKTogdm9pZCA9PiB0aGlzLm9uU3RhbGwoKTtcblxuICAgIHRoaXMuX2xpc3RlbkZvckNvbnRpbnVhdGlvbiA9IChldmVudCk6IHZvaWQgPT4gdGhpcy5vbkNvbnRpbnVhdGlvbihldmVudCwgdmlkZW8pO1xuXG4gICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcignc3RhbGxlZCcsIHRoaXMuX2xpc3RlbkZvclN0YWxsKTtcbiAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdwYXVzZScsIHRoaXMuX2xpc3RlbkZvclN0YWxsKTtcbiAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdzdXNwZW5kJywgdGhpcy5fbGlzdGVuRm9yU3RhbGwpO1xuICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ3BsYXknLCB0aGlzLl9saXN0ZW5Gb3JDb250aW51YXRpb24pO1xuICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ3BsYXlpbmcnLCB0aGlzLl9saXN0ZW5Gb3JDb250aW51YXRpb24pO1xuICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgdGhpcy5fbGlzdGVuRm9yQ29udGludWF0aW9uKTtcbiAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCd0aW1ldXBkYXRlJywgdGhpcy5fbGlzdGVuRm9yQ29udGludWF0aW9uKTtcblxuICAgIHRoaXMuX2NsZWFyUmVidWZmZXJpbmdMaXN0ZW5lciA9IG5ldyBEaXNwb3NhYmxlKCgpID0+IHtcbiAgICAgIHZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3N0YWxsZWQnLCB0aGlzLl9saXN0ZW5Gb3JTdGFsbCk7XG4gICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCdwYXVzZScsIHRoaXMuX2xpc3RlbkZvclN0YWxsKTtcbiAgICAgIHZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3N1c3BlbmQnLCB0aGlzLl9saXN0ZW5Gb3JTdGFsbCk7XG4gICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCdwbGF5JywgdGhpcy5fbGlzdGVuRm9yQ29udGludWF0aW9uKTtcbiAgICAgIHZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BsYXlpbmcnLCB0aGlzLl9saXN0ZW5Gb3JDb250aW51YXRpb24pO1xuICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCB0aGlzLl9saXN0ZW5Gb3JDb250aW51YXRpb24pO1xuICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigndGltZXVwZGF0ZScsIHRoaXMuX2xpc3RlbkZvckNvbnRpbnVhdGlvbik7XG4gICAgfSk7XG5cbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQodGhpcy5fY2xlYXJSZWJ1ZmZlcmluZ0xpc3RlbmVyKTtcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgZHVyYXRpb25TaW5jZVBhZ2VMb2FkKCk6IHN0cmluZyB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblxuICAgIHJldHVybiBuZXcgRHVyYXRpb25zKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkudG9Jc29TdHJpbmcoKTtcbiAgfVxuXG4gIHByaXZhdGUgY2FsbFRpbWVUb0ZpcnN0RnJhbWUoKTogdm9pZCB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblxuICAgIHRoaXMucHVzaFRpbWVUb0ZpcnN0RnJhbWUobm93KTtcbiAgICB0aGlzLnB1c2hDaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lKG5vdyk7XG5cbiAgICB0aGlzLl9jbGVhclRpbWVUb0ZpcnN0RnJhbWVMaXN0ZW5lci5kaXNwb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIHB1c2hUaW1lVG9GaXJzdEZyYW1lKG5vdyk6IHZvaWQge1xuICAgIHRoaXMuX3RpbWVUb0ZpcnN0RnJhbWUgPSBub3cgLSB0aGlzLl9zdGFydFJlY29yZGluZ0ZpcnN0RnJhbWU7XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLlRpbWVUb0ZpcnN0RnJhbWUsXG4gICAgICBydW50aW1lOiAobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge3VpbnQ2NDogdGhpcy5fdGltZVRvRmlyc3RGcmFtZX0sXG4gICAgICBzdHJlYW1JZDogdGhpcy5fc3RyZWFtSWRcbiAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ1slc10gWyVzXSBGaXJzdCBmcmFtZSBbJXNdJyxcbiAgICAgIHRoaXMuZHVyYXRpb25TaW5jZVBhZ2VMb2FkLFxuICAgICAgdGhpcy5fc3RyZWFtSWQsXG4gICAgICBuZXcgRHVyYXRpb25zKHRoaXMuX3RpbWVUb0ZpcnN0RnJhbWUpLnRvSXNvU3RyaW5nKClcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBwdXNoQ2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZShub3cpOiB2b2lkIHtcbiAgICB0aGlzLl9jaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lID0gbm93IC0gdGhpcy5fY2hhbm5lbFN0YXJ0VGltZTtcblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZTogTWV0cmljc1R5cGUuQ2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZSxcbiAgICAgIHJ1bnRpbWU6IChub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHZhbHVlOiB7dWludDY0OiB0aGlzLl9jaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lfSxcbiAgICAgIHN0cmVhbUlkOiB0aGlzLl9zdHJlYW1JZFxuICAgIH0pO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAnWyVzXSBbJXNdIENoYW5uZWwgY3JlYXRpb24gdG8gZmlyc3QgZnJhbWUgWyVzXScsXG4gICAgICB0aGlzLmR1cmF0aW9uU2luY2VQYWdlTG9hZCxcbiAgICAgIHRoaXMuX3N0cmVhbUlkLFxuICAgICAgbmV3IER1cmF0aW9ucyh0aGlzLl9jaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lKS50b0lzb1N0cmluZygpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgb25TdGFsbCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fdmlkZW9TdGFsbGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZS5TdGFsbGVkLFxuICAgICAgcnVudGltZTogKERhdGUubm93KCkgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHN0cmVhbUlkOiB0aGlzLl9zdHJlYW1JZFxuICAgIH0pO1xuXG4gICAgdGhpcy5fdmlkZW9TdGFsbGVkID0gRGF0ZS5ub3coKTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ1slc10gWyVzXSBbYnVmZmVyaW5nXSBTdHJlYW0gaGFzIHN0YWxsZWQnLFxuICAgICAgdGhpcy5kdXJhdGlvblNpbmNlUGFnZUxvYWQsXG4gICAgICB0aGlzLl9zdHJlYW1JZFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIG9uQ29udGludWF0aW9uKGV2ZW50LCB2aWRlbyk6IHZvaWQge1xuICAgIGlmICghdmlkZW8uYnVmZmVyZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBidWZmZXJMZW5ndGggPSB2aWRlby5idWZmZXJlZC5sZW5ndGg7XG4gICAgY29uc3QgaGFzTm90UHJvZ3Jlc3NlZFNpbmNlTGFzdFByb2dyZXNzRXZlbnQgPSBldmVudC50eXBlID09PSAncGxheWluZydcbiAgICB8fCBidWZmZXJMZW5ndGggPiAwID8gKGV2ZW50LnR5cGUgPT09ICdwcm9ncmVzcydcbiAgICAgIHx8IGV2ZW50LnR5cGUgPT09ICd0aW1ldXBkYXRlJylcbiAgICAgICYmIHZpZGVvLmJ1ZmZlcmVkLmVuZChidWZmZXJMZW5ndGggLSAxKSA9PT0gdGhpcy5fbGFzdFByb2dyZXNzIDogdHJ1ZTtcblxuICAgIGlmICghdGhpcy5fdmlkZW9TdGFsbGVkIHx8IGhhc05vdFByb2dyZXNzZWRTaW5jZUxhc3RQcm9ncmVzc0V2ZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09ICdwcm9ncmVzcycpIHtcbiAgICAgIHRoaXMuX2xhc3RQcm9ncmVzcyA9IHZpZGVvLmJ1ZmZlcmVkLmVuZChidWZmZXJMZW5ndGggLSAxKTtcbiAgICB9XG5cbiAgICBjb25zdCB0aW1lU2luY2VTdG9wID0gRGF0ZS5ub3coKSAtIHRoaXMuX3ZpZGVvU3RhbGxlZDtcblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZTogTWV0cmljc1R5cGUuQnVmZmVyaW5nLFxuICAgICAgcnVudGltZTogKERhdGUubm93KCkgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHZhbHVlOiB7dWludDY0OiB0aW1lU2luY2VTdG9wfSxcbiAgICAgIHN0cmVhbUlkOiB0aGlzLl9zdHJlYW1JZFxuICAgIH0pO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAnWyVzXSBbJXNdIFtidWZmZXJpbmddIFN0cmVhbSBoYXMgcmVjb3ZlcmVkIGZyb20gc3RhbGwgYWZ0ZXIgWyVzXScsXG4gICAgICB0aGlzLmR1cmF0aW9uU2luY2VQYWdlTG9hZCxcbiAgICAgIHRoaXMuX3N0cmVhbUlkLFxuICAgICAgbmV3IER1cmF0aW9ucyh0aW1lU2luY2VTdG9wKS50b0lzb1N0cmluZygpXG4gICAgKTtcbiAgICB0aGlzLl92aWRlb1N0YWxsZWQgPSBudWxsO1xuICB9XG5cbiAgb25WaWRlb1Jlc29sdXRpb25DaGFuZ2VzKG5ld1Jlc29sdXRpb246IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZTogTWV0cmljc1R5cGUuUmVzb2x1dGlvbkNoYW5nZWQsXG4gICAgICBydW50aW1lOiAoRGF0ZS5ub3coKSAtIHRoaXMuX3BhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgdmFsdWU6IHtzdHJpbmc6IG5ld1Jlc29sdXRpb259LFxuICAgICAgcHJldmlvdXNWYWx1ZTogdGhpcy5fdmlkZW9SZXNvbHV0aW9uID8ge3N0cmluZzogdGhpcy5fdmlkZW9SZXNvbHV0aW9ufSA6IHVuZGVmaW5lZCxcbiAgICAgIHN0cmVhbUlkOiB0aGlzLl9zdHJlYW1JZFxuICAgIH0pO1xuXG4gICAgdGhpcy5fdmlkZW9SZXNvbHV0aW9uID0gbmV3UmVzb2x1dGlvbjtcbiAgfVxufSIsImZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIHtcbiAgKG51bGwgPT0gYSB8fCBhID4gci5sZW5ndGgpICYmIChhID0gci5sZW5ndGgpO1xuICBmb3IgKHZhciBlID0gMCwgbiA9IEFycmF5KGEpOyBlIDwgYTsgZSsrKSBuW2VdID0gcltlXTtcbiAgcmV0dXJuIG47XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9hcnJheUxpa2VUb0FycmF5LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKHIpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkocikpIHJldHVybiByO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfYXJyYXlXaXRoSG9sZXMsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgYXJyYXlMaWtlVG9BcnJheSA9IHJlcXVpcmUoXCIuL2FycmF5TGlrZVRvQXJyYXkuanNcIik7XG5mdW5jdGlvbiBfYXJyYXlXaXRob3V0SG9sZXMocikge1xuICBpZiAoQXJyYXkuaXNBcnJheShyKSkgcmV0dXJuIGFycmF5TGlrZVRvQXJyYXkocik7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9hcnJheVdpdGhvdXRIb2xlcywgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsImZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoZSkge1xuICBpZiAodm9pZCAwID09PSBlKSB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7XG4gIHJldHVybiBlO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfYXNzZXJ0VGhpc0luaXRpYWxpemVkLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gYXN5bmNHZW5lcmF0b3JTdGVwKG4sIHQsIGUsIHIsIG8sIGEsIGMpIHtcbiAgdHJ5IHtcbiAgICB2YXIgaSA9IG5bYV0oYyksXG4gICAgICB1ID0gaS52YWx1ZTtcbiAgfSBjYXRjaCAobikge1xuICAgIHJldHVybiB2b2lkIGUobik7XG4gIH1cbiAgaS5kb25lID8gdCh1KSA6IFByb21pc2UucmVzb2x2ZSh1KS50aGVuKHIsIG8pO1xufVxuZnVuY3Rpb24gX2FzeW5jVG9HZW5lcmF0b3Iobikge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciB0ID0gdGhpcyxcbiAgICAgIGUgPSBhcmd1bWVudHM7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyLCBvKSB7XG4gICAgICB2YXIgYSA9IG4uYXBwbHkodCwgZSk7XG4gICAgICBmdW5jdGlvbiBfbmV4dChuKSB7XG4gICAgICAgIGFzeW5jR2VuZXJhdG9yU3RlcChhLCByLCBvLCBfbmV4dCwgX3Rocm93LCBcIm5leHRcIiwgbik7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBfdGhyb3cobikge1xuICAgICAgICBhc3luY0dlbmVyYXRvclN0ZXAoYSwgciwgbywgX25leHQsIF90aHJvdywgXCJ0aHJvd1wiLCBuKTtcbiAgICAgIH1cbiAgICAgIF9uZXh0KHZvaWQgMCk7XG4gICAgfSk7XG4gIH07XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9hc3luY1RvR2VuZXJhdG9yLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGEsIG4pIHtcbiAgaWYgKCEoYSBpbnN0YW5jZW9mIG4pKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfY2xhc3NDYWxsQ2hlY2ssIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoXCIuL3RvUHJvcGVydHlLZXkuanNcIik7XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyhlLCByKSB7XG4gIGZvciAodmFyIHQgPSAwOyB0IDwgci5sZW5ndGg7IHQrKykge1xuICAgIHZhciBvID0gclt0XTtcbiAgICBvLmVudW1lcmFibGUgPSBvLmVudW1lcmFibGUgfHwgITEsIG8uY29uZmlndXJhYmxlID0gITAsIFwidmFsdWVcIiBpbiBvICYmIChvLndyaXRhYmxlID0gITApLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgdG9Qcm9wZXJ0eUtleShvLmtleSksIG8pO1xuICB9XG59XG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoZSwgciwgdCkge1xuICByZXR1cm4gciAmJiBfZGVmaW5lUHJvcGVydGllcyhlLnByb3RvdHlwZSwgciksIHQgJiYgX2RlZmluZVByb3BlcnRpZXMoZSwgdCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBcInByb3RvdHlwZVwiLCB7XG4gICAgd3JpdGFibGU6ICExXG4gIH0pLCBlO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfY3JlYXRlQ2xhc3MsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoXCIuL3RvUHJvcGVydHlLZXkuanNcIik7XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkge1xuICByZXR1cm4gKHIgPSB0b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHtcbiAgICB2YWx1ZTogdCxcbiAgICBlbnVtZXJhYmxlOiAhMCxcbiAgICBjb25maWd1cmFibGU6ICEwLFxuICAgIHdyaXRhYmxlOiAhMFxuICB9KSA6IGVbcl0gPSB0LCBlO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfZGVmaW5lUHJvcGVydHksIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YodCkge1xuICByZXR1cm4gbW9kdWxlLmV4cG9ydHMgPSBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQpIHtcbiAgICByZXR1cm4gdC5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKHQpO1xuICB9LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHMsIF9nZXRQcm90b3R5cGVPZih0KTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX2dldFByb3RvdHlwZU9mLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwidmFyIHNldFByb3RvdHlwZU9mID0gcmVxdWlyZShcIi4vc2V0UHJvdG90eXBlT2YuanNcIik7XG5mdW5jdGlvbiBfaW5oZXJpdHModCwgZSkge1xuICBpZiAoXCJmdW5jdGlvblwiICE9IHR5cGVvZiBlICYmIG51bGwgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTtcbiAgdC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGUgJiYgZS5wcm90b3R5cGUsIHtcbiAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgdmFsdWU6IHQsXG4gICAgICB3cml0YWJsZTogITAsXG4gICAgICBjb25maWd1cmFibGU6ICEwXG4gICAgfVxuICB9KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIFwicHJvdG90eXBlXCIsIHtcbiAgICB3cml0YWJsZTogITFcbiAgfSksIGUgJiYgc2V0UHJvdG90eXBlT2YodCwgZSk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9pbmhlcml0cywgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsImZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXkocikge1xuICBpZiAoXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgU3ltYm9sICYmIG51bGwgIT0gcltTeW1ib2wuaXRlcmF0b3JdIHx8IG51bGwgIT0gcltcIkBAaXRlcmF0b3JcIl0pIHJldHVybiBBcnJheS5mcm9tKHIpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfaXRlcmFibGVUb0FycmF5LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGwpIHtcbiAgdmFyIHQgPSBudWxsID09IHIgPyBudWxsIDogXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgU3ltYm9sICYmIHJbU3ltYm9sLml0ZXJhdG9yXSB8fCByW1wiQEBpdGVyYXRvclwiXTtcbiAgaWYgKG51bGwgIT0gdCkge1xuICAgIHZhciBlLFxuICAgICAgbixcbiAgICAgIGksXG4gICAgICB1LFxuICAgICAgYSA9IFtdLFxuICAgICAgZiA9ICEwLFxuICAgICAgbyA9ICExO1xuICAgIHRyeSB7XG4gICAgICBpZiAoaSA9ICh0ID0gdC5jYWxsKHIpKS5uZXh0LCAwID09PSBsKSB7XG4gICAgICAgIGlmIChPYmplY3QodCkgIT09IHQpIHJldHVybjtcbiAgICAgICAgZiA9ICExO1xuICAgICAgfSBlbHNlIGZvciAoOyAhKGYgPSAoZSA9IGkuY2FsbCh0KSkuZG9uZSkgJiYgKGEucHVzaChlLnZhbHVlKSwgYS5sZW5ndGggIT09IGwpOyBmID0gITApO1xuICAgIH0gY2F0Y2ggKHIpIHtcbiAgICAgIG8gPSAhMCwgbiA9IHI7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICghZiAmJiBudWxsICE9IHRbXCJyZXR1cm5cIl0gJiYgKHUgPSB0W1wicmV0dXJuXCJdKCksIE9iamVjdCh1KSAhPT0gdSkpIHJldHVybjtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlmIChvKSB0aHJvdyBuO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYTtcbiAgfVxufVxubW9kdWxlLmV4cG9ydHMgPSBfaXRlcmFibGVUb0FycmF5TGltaXQsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJmdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfbm9uSXRlcmFibGVSZXN0LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX25vbkl0ZXJhYmxlU3ByZWFkKCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX25vbkl0ZXJhYmxlU3ByZWFkLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwidmFyIF90eXBlb2YgPSByZXF1aXJlKFwiLi90eXBlb2YuanNcIilbXCJkZWZhdWx0XCJdO1xudmFyIGFzc2VydFRoaXNJbml0aWFsaXplZCA9IHJlcXVpcmUoXCIuL2Fzc2VydFRoaXNJbml0aWFsaXplZC5qc1wiKTtcbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIGUpIHtcbiAgaWYgKGUgJiYgKFwib2JqZWN0XCIgPT0gX3R5cGVvZihlKSB8fCBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGUpKSByZXR1cm4gZTtcbiAgaWYgKHZvaWQgMCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpO1xuICByZXR1cm4gYXNzZXJ0VGhpc0luaXRpYWxpemVkKHQpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsInZhciBfdHlwZW9mID0gcmVxdWlyZShcIi4vdHlwZW9mLmpzXCIpW1wiZGVmYXVsdFwiXTtcbmZ1bmN0aW9uIF9yZWdlbmVyYXRvclJ1bnRpbWUoKSB7XG4gIFwidXNlIHN0cmljdFwiOyAvKiEgcmVnZW5lcmF0b3ItcnVudGltZSAtLSBDb3B5cmlnaHQgKGMpIDIwMTQtcHJlc2VudCwgRmFjZWJvb2ssIEluYy4gLS0gbGljZW5zZSAoTUlUKTogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlZ2VuZXJhdG9yL2Jsb2IvbWFpbi9MSUNFTlNFICovXG4gIG1vZHVsZS5leHBvcnRzID0gX3JlZ2VuZXJhdG9yUnVudGltZSA9IGZ1bmN0aW9uIF9yZWdlbmVyYXRvclJ1bnRpbWUoKSB7XG4gICAgcmV0dXJuIGU7XG4gIH0sIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0cztcbiAgdmFyIHQsXG4gICAgZSA9IHt9LFxuICAgIHIgPSBPYmplY3QucHJvdG90eXBlLFxuICAgIG4gPSByLmhhc093blByb3BlcnR5LFxuICAgIG8gPSBPYmplY3QuZGVmaW5lUHJvcGVydHkgfHwgZnVuY3Rpb24gKHQsIGUsIHIpIHtcbiAgICAgIHRbZV0gPSByLnZhbHVlO1xuICAgIH0sXG4gICAgaSA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sID8gU3ltYm9sIDoge30sXG4gICAgYSA9IGkuaXRlcmF0b3IgfHwgXCJAQGl0ZXJhdG9yXCIsXG4gICAgYyA9IGkuYXN5bmNJdGVyYXRvciB8fCBcIkBAYXN5bmNJdGVyYXRvclwiLFxuICAgIHUgPSBpLnRvU3RyaW5nVGFnIHx8IFwiQEB0b1N0cmluZ1RhZ1wiO1xuICBmdW5jdGlvbiBkZWZpbmUodCwgZSwgcikge1xuICAgIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodCwgZSwge1xuICAgICAgdmFsdWU6IHIsXG4gICAgICBlbnVtZXJhYmxlOiAhMCxcbiAgICAgIGNvbmZpZ3VyYWJsZTogITAsXG4gICAgICB3cml0YWJsZTogITBcbiAgICB9KSwgdFtlXTtcbiAgfVxuICB0cnkge1xuICAgIGRlZmluZSh7fSwgXCJcIik7XG4gIH0gY2F0Y2ggKHQpIHtcbiAgICBkZWZpbmUgPSBmdW5jdGlvbiBkZWZpbmUodCwgZSwgcikge1xuICAgICAgcmV0dXJuIHRbZV0gPSByO1xuICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gd3JhcCh0LCBlLCByLCBuKSB7XG4gICAgdmFyIGkgPSBlICYmIGUucHJvdG90eXBlIGluc3RhbmNlb2YgR2VuZXJhdG9yID8gZSA6IEdlbmVyYXRvcixcbiAgICAgIGEgPSBPYmplY3QuY3JlYXRlKGkucHJvdG90eXBlKSxcbiAgICAgIGMgPSBuZXcgQ29udGV4dChuIHx8IFtdKTtcbiAgICByZXR1cm4gbyhhLCBcIl9pbnZva2VcIiwge1xuICAgICAgdmFsdWU6IG1ha2VJbnZva2VNZXRob2QodCwgciwgYylcbiAgICB9KSwgYTtcbiAgfVxuICBmdW5jdGlvbiB0cnlDYXRjaCh0LCBlLCByKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFwibm9ybWFsXCIsXG4gICAgICAgIGFyZzogdC5jYWxsKGUsIHIpXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKHQpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFwidGhyb3dcIixcbiAgICAgICAgYXJnOiB0XG4gICAgICB9O1xuICAgIH1cbiAgfVxuICBlLndyYXAgPSB3cmFwO1xuICB2YXIgaCA9IFwic3VzcGVuZGVkU3RhcnRcIixcbiAgICBsID0gXCJzdXNwZW5kZWRZaWVsZFwiLFxuICAgIGYgPSBcImV4ZWN1dGluZ1wiLFxuICAgIHMgPSBcImNvbXBsZXRlZFwiLFxuICAgIHkgPSB7fTtcbiAgZnVuY3Rpb24gR2VuZXJhdG9yKCkge31cbiAgZnVuY3Rpb24gR2VuZXJhdG9yRnVuY3Rpb24oKSB7fVxuICBmdW5jdGlvbiBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSgpIHt9XG4gIHZhciBwID0ge307XG4gIGRlZmluZShwLCBhLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0pO1xuICB2YXIgZCA9IE9iamVjdC5nZXRQcm90b3R5cGVPZixcbiAgICB2ID0gZCAmJiBkKGQodmFsdWVzKFtdKSkpO1xuICB2ICYmIHYgIT09IHIgJiYgbi5jYWxsKHYsIGEpICYmIChwID0gdik7XG4gIHZhciBnID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUucHJvdG90eXBlID0gR2VuZXJhdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUocCk7XG4gIGZ1bmN0aW9uIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyh0KSB7XG4gICAgW1wibmV4dFwiLCBcInRocm93XCIsIFwicmV0dXJuXCJdLmZvckVhY2goZnVuY3Rpb24gKGUpIHtcbiAgICAgIGRlZmluZSh0LCBlLCBmdW5jdGlvbiAodCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faW52b2tlKGUsIHQpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbiAgZnVuY3Rpb24gQXN5bmNJdGVyYXRvcih0LCBlKSB7XG4gICAgZnVuY3Rpb24gaW52b2tlKHIsIG8sIGksIGEpIHtcbiAgICAgIHZhciBjID0gdHJ5Q2F0Y2godFtyXSwgdCwgbyk7XG4gICAgICBpZiAoXCJ0aHJvd1wiICE9PSBjLnR5cGUpIHtcbiAgICAgICAgdmFyIHUgPSBjLmFyZyxcbiAgICAgICAgICBoID0gdS52YWx1ZTtcbiAgICAgICAgcmV0dXJuIGggJiYgXCJvYmplY3RcIiA9PSBfdHlwZW9mKGgpICYmIG4uY2FsbChoLCBcIl9fYXdhaXRcIikgPyBlLnJlc29sdmUoaC5fX2F3YWl0KS50aGVuKGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgaW52b2tlKFwibmV4dFwiLCB0LCBpLCBhKTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICBpbnZva2UoXCJ0aHJvd1wiLCB0LCBpLCBhKTtcbiAgICAgICAgfSkgOiBlLnJlc29sdmUoaCkudGhlbihmdW5jdGlvbiAodCkge1xuICAgICAgICAgIHUudmFsdWUgPSB0LCBpKHUpO1xuICAgICAgICB9LCBmdW5jdGlvbiAodCkge1xuICAgICAgICAgIHJldHVybiBpbnZva2UoXCJ0aHJvd1wiLCB0LCBpLCBhKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBhKGMuYXJnKTtcbiAgICB9XG4gICAgdmFyIHI7XG4gICAgbyh0aGlzLCBcIl9pbnZva2VcIiwge1xuICAgICAgdmFsdWU6IGZ1bmN0aW9uIHZhbHVlKHQsIG4pIHtcbiAgICAgICAgZnVuY3Rpb24gY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcoKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBlKGZ1bmN0aW9uIChlLCByKSB7XG4gICAgICAgICAgICBpbnZva2UodCwgbiwgZSwgcik7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHIgPSByID8gci50aGVuKGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnLCBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZykgOiBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZygpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIGZ1bmN0aW9uIG1ha2VJbnZva2VNZXRob2QoZSwgciwgbikge1xuICAgIHZhciBvID0gaDtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGksIGEpIHtcbiAgICAgIGlmIChvID09PSBmKSB0aHJvdyBFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IHJ1bm5pbmdcIik7XG4gICAgICBpZiAobyA9PT0gcykge1xuICAgICAgICBpZiAoXCJ0aHJvd1wiID09PSBpKSB0aHJvdyBhO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHZhbHVlOiB0LFxuICAgICAgICAgIGRvbmU6ICEwXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBmb3IgKG4ubWV0aG9kID0gaSwgbi5hcmcgPSBhOzspIHtcbiAgICAgICAgdmFyIGMgPSBuLmRlbGVnYXRlO1xuICAgICAgICBpZiAoYykge1xuICAgICAgICAgIHZhciB1ID0gbWF5YmVJbnZva2VEZWxlZ2F0ZShjLCBuKTtcbiAgICAgICAgICBpZiAodSkge1xuICAgICAgICAgICAgaWYgKHUgPT09IHkpIGNvbnRpbnVlO1xuICAgICAgICAgICAgcmV0dXJuIHU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChcIm5leHRcIiA9PT0gbi5tZXRob2QpIG4uc2VudCA9IG4uX3NlbnQgPSBuLmFyZztlbHNlIGlmIChcInRocm93XCIgPT09IG4ubWV0aG9kKSB7XG4gICAgICAgICAgaWYgKG8gPT09IGgpIHRocm93IG8gPSBzLCBuLmFyZztcbiAgICAgICAgICBuLmRpc3BhdGNoRXhjZXB0aW9uKG4uYXJnKTtcbiAgICAgICAgfSBlbHNlIFwicmV0dXJuXCIgPT09IG4ubWV0aG9kICYmIG4uYWJydXB0KFwicmV0dXJuXCIsIG4uYXJnKTtcbiAgICAgICAgbyA9IGY7XG4gICAgICAgIHZhciBwID0gdHJ5Q2F0Y2goZSwgciwgbik7XG4gICAgICAgIGlmIChcIm5vcm1hbFwiID09PSBwLnR5cGUpIHtcbiAgICAgICAgICBpZiAobyA9IG4uZG9uZSA/IHMgOiBsLCBwLmFyZyA9PT0geSkgY29udGludWU7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHZhbHVlOiBwLmFyZyxcbiAgICAgICAgICAgIGRvbmU6IG4uZG9uZVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgXCJ0aHJvd1wiID09PSBwLnR5cGUgJiYgKG8gPSBzLCBuLm1ldGhvZCA9IFwidGhyb3dcIiwgbi5hcmcgPSBwLmFyZyk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuICBmdW5jdGlvbiBtYXliZUludm9rZURlbGVnYXRlKGUsIHIpIHtcbiAgICB2YXIgbiA9IHIubWV0aG9kLFxuICAgICAgbyA9IGUuaXRlcmF0b3Jbbl07XG4gICAgaWYgKG8gPT09IHQpIHJldHVybiByLmRlbGVnYXRlID0gbnVsbCwgXCJ0aHJvd1wiID09PSBuICYmIGUuaXRlcmF0b3JbXCJyZXR1cm5cIl0gJiYgKHIubWV0aG9kID0gXCJyZXR1cm5cIiwgci5hcmcgPSB0LCBtYXliZUludm9rZURlbGVnYXRlKGUsIHIpLCBcInRocm93XCIgPT09IHIubWV0aG9kKSB8fCBcInJldHVyblwiICE9PSBuICYmIChyLm1ldGhvZCA9IFwidGhyb3dcIiwgci5hcmcgPSBuZXcgVHlwZUVycm9yKFwiVGhlIGl0ZXJhdG9yIGRvZXMgbm90IHByb3ZpZGUgYSAnXCIgKyBuICsgXCInIG1ldGhvZFwiKSksIHk7XG4gICAgdmFyIGkgPSB0cnlDYXRjaChvLCBlLml0ZXJhdG9yLCByLmFyZyk7XG4gICAgaWYgKFwidGhyb3dcIiA9PT0gaS50eXBlKSByZXR1cm4gci5tZXRob2QgPSBcInRocm93XCIsIHIuYXJnID0gaS5hcmcsIHIuZGVsZWdhdGUgPSBudWxsLCB5O1xuICAgIHZhciBhID0gaS5hcmc7XG4gICAgcmV0dXJuIGEgPyBhLmRvbmUgPyAocltlLnJlc3VsdE5hbWVdID0gYS52YWx1ZSwgci5uZXh0ID0gZS5uZXh0TG9jLCBcInJldHVyblwiICE9PSByLm1ldGhvZCAmJiAoci5tZXRob2QgPSBcIm5leHRcIiwgci5hcmcgPSB0KSwgci5kZWxlZ2F0ZSA9IG51bGwsIHkpIDogYSA6IChyLm1ldGhvZCA9IFwidGhyb3dcIiwgci5hcmcgPSBuZXcgVHlwZUVycm9yKFwiaXRlcmF0b3IgcmVzdWx0IGlzIG5vdCBhbiBvYmplY3RcIiksIHIuZGVsZWdhdGUgPSBudWxsLCB5KTtcbiAgfVxuICBmdW5jdGlvbiBwdXNoVHJ5RW50cnkodCkge1xuICAgIHZhciBlID0ge1xuICAgICAgdHJ5TG9jOiB0WzBdXG4gICAgfTtcbiAgICAxIGluIHQgJiYgKGUuY2F0Y2hMb2MgPSB0WzFdKSwgMiBpbiB0ICYmIChlLmZpbmFsbHlMb2MgPSB0WzJdLCBlLmFmdGVyTG9jID0gdFszXSksIHRoaXMudHJ5RW50cmllcy5wdXNoKGUpO1xuICB9XG4gIGZ1bmN0aW9uIHJlc2V0VHJ5RW50cnkodCkge1xuICAgIHZhciBlID0gdC5jb21wbGV0aW9uIHx8IHt9O1xuICAgIGUudHlwZSA9IFwibm9ybWFsXCIsIGRlbGV0ZSBlLmFyZywgdC5jb21wbGV0aW9uID0gZTtcbiAgfVxuICBmdW5jdGlvbiBDb250ZXh0KHQpIHtcbiAgICB0aGlzLnRyeUVudHJpZXMgPSBbe1xuICAgICAgdHJ5TG9jOiBcInJvb3RcIlxuICAgIH1dLCB0LmZvckVhY2gocHVzaFRyeUVudHJ5LCB0aGlzKSwgdGhpcy5yZXNldCghMCk7XG4gIH1cbiAgZnVuY3Rpb24gdmFsdWVzKGUpIHtcbiAgICBpZiAoZSB8fCBcIlwiID09PSBlKSB7XG4gICAgICB2YXIgciA9IGVbYV07XG4gICAgICBpZiAocikgcmV0dXJuIHIuY2FsbChlKTtcbiAgICAgIGlmIChcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGUubmV4dCkgcmV0dXJuIGU7XG4gICAgICBpZiAoIWlzTmFOKGUubGVuZ3RoKSkge1xuICAgICAgICB2YXIgbyA9IC0xLFxuICAgICAgICAgIGkgPSBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgICAgZm9yICg7ICsrbyA8IGUubGVuZ3RoOykgaWYgKG4uY2FsbChlLCBvKSkgcmV0dXJuIG5leHQudmFsdWUgPSBlW29dLCBuZXh0LmRvbmUgPSAhMSwgbmV4dDtcbiAgICAgICAgICAgIHJldHVybiBuZXh0LnZhbHVlID0gdCwgbmV4dC5kb25lID0gITAsIG5leHQ7XG4gICAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGkubmV4dCA9IGk7XG4gICAgICB9XG4gICAgfVxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoX3R5cGVvZihlKSArIFwiIGlzIG5vdCBpdGVyYWJsZVwiKTtcbiAgfVxuICByZXR1cm4gR2VuZXJhdG9yRnVuY3Rpb24ucHJvdG90eXBlID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUsIG8oZywgXCJjb25zdHJ1Y3RvclwiLCB7XG4gICAgdmFsdWU6IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLFxuICAgIGNvbmZpZ3VyYWJsZTogITBcbiAgfSksIG8oR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUsIFwiY29uc3RydWN0b3JcIiwge1xuICAgIHZhbHVlOiBHZW5lcmF0b3JGdW5jdGlvbixcbiAgICBjb25maWd1cmFibGU6ICEwXG4gIH0pLCBHZW5lcmF0b3JGdW5jdGlvbi5kaXNwbGF5TmFtZSA9IGRlZmluZShHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSwgdSwgXCJHZW5lcmF0b3JGdW5jdGlvblwiKSwgZS5pc0dlbmVyYXRvckZ1bmN0aW9uID0gZnVuY3Rpb24gKHQpIHtcbiAgICB2YXIgZSA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgdCAmJiB0LmNvbnN0cnVjdG9yO1xuICAgIHJldHVybiAhIWUgJiYgKGUgPT09IEdlbmVyYXRvckZ1bmN0aW9uIHx8IFwiR2VuZXJhdG9yRnVuY3Rpb25cIiA9PT0gKGUuZGlzcGxheU5hbWUgfHwgZS5uYW1lKSk7XG4gIH0sIGUubWFyayA9IGZ1bmN0aW9uICh0KSB7XG4gICAgcmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZih0LCBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSkgOiAodC5fX3Byb3RvX18gPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSwgZGVmaW5lKHQsIHUsIFwiR2VuZXJhdG9yRnVuY3Rpb25cIikpLCB0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoZyksIHQ7XG4gIH0sIGUuYXdyYXAgPSBmdW5jdGlvbiAodCkge1xuICAgIHJldHVybiB7XG4gICAgICBfX2F3YWl0OiB0XG4gICAgfTtcbiAgfSwgZGVmaW5lSXRlcmF0b3JNZXRob2RzKEFzeW5jSXRlcmF0b3IucHJvdG90eXBlKSwgZGVmaW5lKEFzeW5jSXRlcmF0b3IucHJvdG90eXBlLCBjLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0pLCBlLkFzeW5jSXRlcmF0b3IgPSBBc3luY0l0ZXJhdG9yLCBlLmFzeW5jID0gZnVuY3Rpb24gKHQsIHIsIG4sIG8sIGkpIHtcbiAgICB2b2lkIDAgPT09IGkgJiYgKGkgPSBQcm9taXNlKTtcbiAgICB2YXIgYSA9IG5ldyBBc3luY0l0ZXJhdG9yKHdyYXAodCwgciwgbiwgbyksIGkpO1xuICAgIHJldHVybiBlLmlzR2VuZXJhdG9yRnVuY3Rpb24ocikgPyBhIDogYS5uZXh0KCkudGhlbihmdW5jdGlvbiAodCkge1xuICAgICAgcmV0dXJuIHQuZG9uZSA/IHQudmFsdWUgOiBhLm5leHQoKTtcbiAgICB9KTtcbiAgfSwgZGVmaW5lSXRlcmF0b3JNZXRob2RzKGcpLCBkZWZpbmUoZywgdSwgXCJHZW5lcmF0b3JcIiksIGRlZmluZShnLCBhLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0pLCBkZWZpbmUoZywgXCJ0b1N0cmluZ1wiLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIFwiW29iamVjdCBHZW5lcmF0b3JdXCI7XG4gIH0pLCBlLmtleXMgPSBmdW5jdGlvbiAodCkge1xuICAgIHZhciBlID0gT2JqZWN0KHQpLFxuICAgICAgciA9IFtdO1xuICAgIGZvciAodmFyIG4gaW4gZSkgci5wdXNoKG4pO1xuICAgIHJldHVybiByLnJldmVyc2UoKSwgZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgIGZvciAoOyByLmxlbmd0aDspIHtcbiAgICAgICAgdmFyIHQgPSByLnBvcCgpO1xuICAgICAgICBpZiAodCBpbiBlKSByZXR1cm4gbmV4dC52YWx1ZSA9IHQsIG5leHQuZG9uZSA9ICExLCBuZXh0O1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5leHQuZG9uZSA9ICEwLCBuZXh0O1xuICAgIH07XG4gIH0sIGUudmFsdWVzID0gdmFsdWVzLCBDb250ZXh0LnByb3RvdHlwZSA9IHtcbiAgICBjb25zdHJ1Y3RvcjogQ29udGV4dCxcbiAgICByZXNldDogZnVuY3Rpb24gcmVzZXQoZSkge1xuICAgICAgaWYgKHRoaXMucHJldiA9IDAsIHRoaXMubmV4dCA9IDAsIHRoaXMuc2VudCA9IHRoaXMuX3NlbnQgPSB0LCB0aGlzLmRvbmUgPSAhMSwgdGhpcy5kZWxlZ2F0ZSA9IG51bGwsIHRoaXMubWV0aG9kID0gXCJuZXh0XCIsIHRoaXMuYXJnID0gdCwgdGhpcy50cnlFbnRyaWVzLmZvckVhY2gocmVzZXRUcnlFbnRyeSksICFlKSBmb3IgKHZhciByIGluIHRoaXMpIFwidFwiID09PSByLmNoYXJBdCgwKSAmJiBuLmNhbGwodGhpcywgcikgJiYgIWlzTmFOKCtyLnNsaWNlKDEpKSAmJiAodGhpc1tyXSA9IHQpO1xuICAgIH0sXG4gICAgc3RvcDogZnVuY3Rpb24gc3RvcCgpIHtcbiAgICAgIHRoaXMuZG9uZSA9ICEwO1xuICAgICAgdmFyIHQgPSB0aGlzLnRyeUVudHJpZXNbMF0uY29tcGxldGlvbjtcbiAgICAgIGlmIChcInRocm93XCIgPT09IHQudHlwZSkgdGhyb3cgdC5hcmc7XG4gICAgICByZXR1cm4gdGhpcy5ydmFsO1xuICAgIH0sXG4gICAgZGlzcGF0Y2hFeGNlcHRpb246IGZ1bmN0aW9uIGRpc3BhdGNoRXhjZXB0aW9uKGUpIHtcbiAgICAgIGlmICh0aGlzLmRvbmUpIHRocm93IGU7XG4gICAgICB2YXIgciA9IHRoaXM7XG4gICAgICBmdW5jdGlvbiBoYW5kbGUobiwgbykge1xuICAgICAgICByZXR1cm4gYS50eXBlID0gXCJ0aHJvd1wiLCBhLmFyZyA9IGUsIHIubmV4dCA9IG4sIG8gJiYgKHIubWV0aG9kID0gXCJuZXh0XCIsIHIuYXJnID0gdCksICEhbztcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIG8gPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgbyA+PSAwOyAtLW8pIHtcbiAgICAgICAgdmFyIGkgPSB0aGlzLnRyeUVudHJpZXNbb10sXG4gICAgICAgICAgYSA9IGkuY29tcGxldGlvbjtcbiAgICAgICAgaWYgKFwicm9vdFwiID09PSBpLnRyeUxvYykgcmV0dXJuIGhhbmRsZShcImVuZFwiKTtcbiAgICAgICAgaWYgKGkudHJ5TG9jIDw9IHRoaXMucHJldikge1xuICAgICAgICAgIHZhciBjID0gbi5jYWxsKGksIFwiY2F0Y2hMb2NcIiksXG4gICAgICAgICAgICB1ID0gbi5jYWxsKGksIFwiZmluYWxseUxvY1wiKTtcbiAgICAgICAgICBpZiAoYyAmJiB1KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgaS5jYXRjaExvYykgcmV0dXJuIGhhbmRsZShpLmNhdGNoTG9jLCAhMCk7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgaS5maW5hbGx5TG9jKSByZXR1cm4gaGFuZGxlKGkuZmluYWxseUxvYyk7XG4gICAgICAgICAgfSBlbHNlIGlmIChjKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgaS5jYXRjaExvYykgcmV0dXJuIGhhbmRsZShpLmNhdGNoTG9jLCAhMCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghdSkgdGhyb3cgRXJyb3IoXCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseVwiKTtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBpLmZpbmFsbHlMb2MpIHJldHVybiBoYW5kbGUoaS5maW5hbGx5TG9jKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIGFicnVwdDogZnVuY3Rpb24gYWJydXB0KHQsIGUpIHtcbiAgICAgIGZvciAodmFyIHIgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgciA+PSAwOyAtLXIpIHtcbiAgICAgICAgdmFyIG8gPSB0aGlzLnRyeUVudHJpZXNbcl07XG4gICAgICAgIGlmIChvLnRyeUxvYyA8PSB0aGlzLnByZXYgJiYgbi5jYWxsKG8sIFwiZmluYWxseUxvY1wiKSAmJiB0aGlzLnByZXYgPCBvLmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICB2YXIgaSA9IG87XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGkgJiYgKFwiYnJlYWtcIiA9PT0gdCB8fCBcImNvbnRpbnVlXCIgPT09IHQpICYmIGkudHJ5TG9jIDw9IGUgJiYgZSA8PSBpLmZpbmFsbHlMb2MgJiYgKGkgPSBudWxsKTtcbiAgICAgIHZhciBhID0gaSA/IGkuY29tcGxldGlvbiA6IHt9O1xuICAgICAgcmV0dXJuIGEudHlwZSA9IHQsIGEuYXJnID0gZSwgaSA/ICh0aGlzLm1ldGhvZCA9IFwibmV4dFwiLCB0aGlzLm5leHQgPSBpLmZpbmFsbHlMb2MsIHkpIDogdGhpcy5jb21wbGV0ZShhKTtcbiAgICB9LFxuICAgIGNvbXBsZXRlOiBmdW5jdGlvbiBjb21wbGV0ZSh0LCBlKSB7XG4gICAgICBpZiAoXCJ0aHJvd1wiID09PSB0LnR5cGUpIHRocm93IHQuYXJnO1xuICAgICAgcmV0dXJuIFwiYnJlYWtcIiA9PT0gdC50eXBlIHx8IFwiY29udGludWVcIiA9PT0gdC50eXBlID8gdGhpcy5uZXh0ID0gdC5hcmcgOiBcInJldHVyblwiID09PSB0LnR5cGUgPyAodGhpcy5ydmFsID0gdGhpcy5hcmcgPSB0LmFyZywgdGhpcy5tZXRob2QgPSBcInJldHVyblwiLCB0aGlzLm5leHQgPSBcImVuZFwiKSA6IFwibm9ybWFsXCIgPT09IHQudHlwZSAmJiBlICYmICh0aGlzLm5leHQgPSBlKSwgeTtcbiAgICB9LFxuICAgIGZpbmlzaDogZnVuY3Rpb24gZmluaXNoKHQpIHtcbiAgICAgIGZvciAodmFyIGUgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgZSA+PSAwOyAtLWUpIHtcbiAgICAgICAgdmFyIHIgPSB0aGlzLnRyeUVudHJpZXNbZV07XG4gICAgICAgIGlmIChyLmZpbmFsbHlMb2MgPT09IHQpIHJldHVybiB0aGlzLmNvbXBsZXRlKHIuY29tcGxldGlvbiwgci5hZnRlckxvYyksIHJlc2V0VHJ5RW50cnkociksIHk7XG4gICAgICB9XG4gICAgfSxcbiAgICBcImNhdGNoXCI6IGZ1bmN0aW9uIF9jYXRjaCh0KSB7XG4gICAgICBmb3IgKHZhciBlID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGUgPj0gMDsgLS1lKSB7XG4gICAgICAgIHZhciByID0gdGhpcy50cnlFbnRyaWVzW2VdO1xuICAgICAgICBpZiAoci50cnlMb2MgPT09IHQpIHtcbiAgICAgICAgICB2YXIgbiA9IHIuY29tcGxldGlvbjtcbiAgICAgICAgICBpZiAoXCJ0aHJvd1wiID09PSBuLnR5cGUpIHtcbiAgICAgICAgICAgIHZhciBvID0gbi5hcmc7XG4gICAgICAgICAgICByZXNldFRyeUVudHJ5KHIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhyb3cgRXJyb3IoXCJpbGxlZ2FsIGNhdGNoIGF0dGVtcHRcIik7XG4gICAgfSxcbiAgICBkZWxlZ2F0ZVlpZWxkOiBmdW5jdGlvbiBkZWxlZ2F0ZVlpZWxkKGUsIHIsIG4pIHtcbiAgICAgIHJldHVybiB0aGlzLmRlbGVnYXRlID0ge1xuICAgICAgICBpdGVyYXRvcjogdmFsdWVzKGUpLFxuICAgICAgICByZXN1bHROYW1lOiByLFxuICAgICAgICBuZXh0TG9jOiBuXG4gICAgICB9LCBcIm5leHRcIiA9PT0gdGhpcy5tZXRob2QgJiYgKHRoaXMuYXJnID0gdCksIHk7XG4gICAgfVxuICB9LCBlO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfcmVnZW5lcmF0b3JSdW50aW1lLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKHQsIGUpIHtcbiAgcmV0dXJuIG1vZHVsZS5leHBvcnRzID0gX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0LCBlKSB7XG4gICAgcmV0dXJuIHQuX19wcm90b19fID0gZSwgdDtcbiAgfSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzLCBfc2V0UHJvdG90eXBlT2YodCwgZSk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9zZXRQcm90b3R5cGVPZiwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsInZhciBhcnJheVdpdGhIb2xlcyA9IHJlcXVpcmUoXCIuL2FycmF5V2l0aEhvbGVzLmpzXCIpO1xudmFyIGl0ZXJhYmxlVG9BcnJheUxpbWl0ID0gcmVxdWlyZShcIi4vaXRlcmFibGVUb0FycmF5TGltaXQuanNcIik7XG52YXIgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkgPSByZXF1aXJlKFwiLi91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheS5qc1wiKTtcbnZhciBub25JdGVyYWJsZVJlc3QgPSByZXF1aXJlKFwiLi9ub25JdGVyYWJsZVJlc3QuanNcIik7XG5mdW5jdGlvbiBfc2xpY2VkVG9BcnJheShyLCBlKSB7XG4gIHJldHVybiBhcnJheVdpdGhIb2xlcyhyKSB8fCBpdGVyYWJsZVRvQXJyYXlMaW1pdChyLCBlKSB8fCB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBlKSB8fCBub25JdGVyYWJsZVJlc3QoKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX3NsaWNlZFRvQXJyYXksIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgYXJyYXlXaXRob3V0SG9sZXMgPSByZXF1aXJlKFwiLi9hcnJheVdpdGhvdXRIb2xlcy5qc1wiKTtcbnZhciBpdGVyYWJsZVRvQXJyYXkgPSByZXF1aXJlKFwiLi9pdGVyYWJsZVRvQXJyYXkuanNcIik7XG52YXIgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkgPSByZXF1aXJlKFwiLi91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheS5qc1wiKTtcbnZhciBub25JdGVyYWJsZVNwcmVhZCA9IHJlcXVpcmUoXCIuL25vbkl0ZXJhYmxlU3ByZWFkLmpzXCIpO1xuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KHIpIHtcbiAgcmV0dXJuIGFycmF5V2l0aG91dEhvbGVzKHIpIHx8IGl0ZXJhYmxlVG9BcnJheShyKSB8fCB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyKSB8fCBub25JdGVyYWJsZVNwcmVhZCgpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfdG9Db25zdW1hYmxlQXJyYXksIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgX3R5cGVvZiA9IHJlcXVpcmUoXCIuL3R5cGVvZi5qc1wiKVtcImRlZmF1bHRcIl07XG5mdW5jdGlvbiB0b1ByaW1pdGl2ZSh0LCByKSB7XG4gIGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0O1xuICB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTtcbiAgaWYgKHZvaWQgMCAhPT0gZSkge1xuICAgIHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpO1xuICAgIGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpO1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTtcbiAgfVxuICByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpO1xufVxubW9kdWxlLmV4cG9ydHMgPSB0b1ByaW1pdGl2ZSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsInZhciBfdHlwZW9mID0gcmVxdWlyZShcIi4vdHlwZW9mLmpzXCIpW1wiZGVmYXVsdFwiXTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoXCIuL3RvUHJpbWl0aXZlLmpzXCIpO1xuZnVuY3Rpb24gdG9Qcm9wZXJ0eUtleSh0KSB7XG4gIHZhciBpID0gdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7XG4gIHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7XG59XG5tb2R1bGUuZXhwb3J0cyA9IHRvUHJvcGVydHlLZXksIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJmdW5jdGlvbiBfdHlwZW9mKG8pIHtcbiAgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiO1xuXG4gIHJldHVybiBtb2R1bGUuZXhwb3J0cyA9IF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykge1xuICAgIHJldHVybiB0eXBlb2YgbztcbiAgfSA6IGZ1bmN0aW9uIChvKSB7XG4gICAgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87XG4gIH0sIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0cywgX3R5cGVvZihvKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX3R5cGVvZiwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsInZhciBhcnJheUxpa2VUb0FycmF5ID0gcmVxdWlyZShcIi4vYXJyYXlMaWtlVG9BcnJheS5qc1wiKTtcbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBhKSB7XG4gIGlmIChyKSB7XG4gICAgaWYgKFwic3RyaW5nXCIgPT0gdHlwZW9mIHIpIHJldHVybiBhcnJheUxpa2VUb0FycmF5KHIsIGEpO1xuICAgIHZhciB0ID0ge30udG9TdHJpbmcuY2FsbChyKS5zbGljZSg4LCAtMSk7XG4gICAgcmV0dXJuIFwiT2JqZWN0XCIgPT09IHQgJiYgci5jb25zdHJ1Y3RvciAmJiAodCA9IHIuY29uc3RydWN0b3IubmFtZSksIFwiTWFwXCIgPT09IHQgfHwgXCJTZXRcIiA9PT0gdCA/IEFycmF5LmZyb20ocikgOiBcIkFyZ3VtZW50c1wiID09PSB0IHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpID8gYXJyYXlMaWtlVG9BcnJheShyLCBhKSA6IHZvaWQgMDtcbiAgfVxufVxubW9kdWxlLmV4cG9ydHMgPSBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXksIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCIvLyBUT0RPKEJhYmVsIDgpOiBSZW1vdmUgdGhpcyBmaWxlLlxuXG52YXIgcnVudGltZSA9IHJlcXVpcmUoXCIuLi9oZWxwZXJzL3JlZ2VuZXJhdG9yUnVudGltZVwiKSgpO1xubW9kdWxlLmV4cG9ydHMgPSBydW50aW1lO1xuXG4vLyBDb3BpZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVnZW5lcmF0b3IvYmxvYi9tYWluL3BhY2thZ2VzL3J1bnRpbWUvcnVudGltZS5qcyNMNzM2PVxudHJ5IHtcbiAgcmVnZW5lcmF0b3JSdW50aW1lID0gcnVudGltZTtcbn0gY2F0Y2ggKGFjY2lkZW50YWxTdHJpY3RNb2RlKSB7XG4gIGlmICh0eXBlb2YgZ2xvYmFsVGhpcyA9PT0gXCJvYmplY3RcIikge1xuICAgIGdsb2JhbFRoaXMucmVnZW5lcmF0b3JSdW50aW1lID0gcnVudGltZTtcbiAgfSBlbHNlIHtcbiAgICBGdW5jdGlvbihcInJcIiwgXCJyZWdlbmVyYXRvclJ1bnRpbWUgPSByXCIpKHJ1bnRpbWUpO1xuICB9XG59XG4iLCIvLyBUaGUgbW9kdWxlIGNhY2hlXG52YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG5cbi8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG5mdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuXHR2YXIgY2FjaGVkTW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXTtcblx0aWYgKGNhY2hlZE1vZHVsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGNhY2hlZE1vZHVsZS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdC8vIG5vIG1vZHVsZS5pZCBuZWVkZWRcblx0XHQvLyBubyBtb2R1bGUubG9hZGVkIG5lZWRlZFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdKG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG5cdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG5cdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbn1cblxuLy8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbl9fd2VicGFja19yZXF1aXJlX18ubSA9IF9fd2VicGFja19tb2R1bGVzX187XG5cbiIsIi8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSAobW9kdWxlKSA9PiB7XG5cdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuXHRcdCgpID0+IChtb2R1bGVbJ2RlZmF1bHQnXSkgOlxuXHRcdCgpID0+IChtb2R1bGUpO1xuXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCB7IGE6IGdldHRlciB9KTtcblx0cmV0dXJuIGdldHRlcjtcbn07IiwiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gKGV4cG9ydHMsIGRlZmluaXRpb24pID0+IHtcblx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcblx0XHR9XG5cdH1cbn07IiwiLy8gVGhpcyBmdW5jdGlvbiBhbGxvdyB0byByZWZlcmVuY2UgYXN5bmMgY2h1bmtzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLnUgPSAoY2h1bmtJZCkgPT4ge1xuXHQvLyByZXR1cm4gdXJsIGZvciBmaWxlbmFtZXMgYmFzZWQgb24gdGVtcGxhdGVcblx0cmV0dXJuIFwiXCIgKyBjaHVua0lkICsgXCIuanNcIjtcbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5vID0gKG9iaiwgcHJvcCkgPT4gKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApKSIsIi8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uciA9IChleHBvcnRzKSA9PiB7XG5cdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuXHR9XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG59OyIsIl9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5iID0gZG9jdW1lbnQuYmFzZVVSSSB8fCBzZWxmLmxvY2F0aW9uLmhyZWY7XG5cbi8vIG9iamVjdCB0byBzdG9yZSBsb2FkZWQgYW5kIGxvYWRpbmcgY2h1bmtzXG4vLyB1bmRlZmluZWQgPSBjaHVuayBub3QgbG9hZGVkLCBudWxsID0gY2h1bmsgcHJlbG9hZGVkL3ByZWZldGNoZWRcbi8vIFtyZXNvbHZlLCByZWplY3QsIFByb21pc2VdID0gY2h1bmsgbG9hZGluZywgMCA9IGNodW5rIGxvYWRlZFxudmFyIGluc3RhbGxlZENodW5rcyA9IHtcblx0XCJmdWxsXCI6IDBcbn07XG5cbi8vIG5vIGNodW5rIG9uIGRlbWFuZCBsb2FkaW5nXG5cbi8vIG5vIHByZWZldGNoaW5nXG5cbi8vIG5vIHByZWxvYWRlZFxuXG4vLyBubyBITVJcblxuLy8gbm8gSE1SIG1hbmlmZXN0XG5cbi8vIG5vIG9uIGNodW5rcyBsb2FkZWRcblxuLy8gbm8ganNvbnAgZnVuY3Rpb24iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IFNESyBmcm9tICcuLi9TREsnO1xuaW1wb3J0IENoYW5uZWxzIGZyb20gJy4uL2NoYW5uZWxzL0NoYW5uZWxzJztcbmltcG9ydCBDaGFubmVsU3RhdGUgZnJvbSAnLi4vY2hhbm5lbHMvQ2hhbm5lbFN0YXRlJztcbmltcG9ydCBQdWJsaXNoZXJzIGZyb20gJy4uL3B1Ymxpc2gvUHVibGlzaGVycyc7XG5pbXBvcnQgUHVibGlzaGVyU3RhdGUgZnJvbSAnLi4vcHVibGlzaC9QdWJsaXNoZXJTdGF0ZSc7XG5cbmV4cG9ydCB7XG4gIFNESyxcbiAgQ2hhbm5lbHMsXG4gIENoYW5uZWxTdGF0ZSxcbiAgUHVibGlzaGVycyxcbiAgUHVibGlzaGVyU3RhdGVcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgU0RLLFxuICBDaGFubmVscyxcbiAgQ2hhbm5lbFN0YXRlLFxuICBQdWJsaXNoZXJzLFxuICBQdWJsaXNoZXJTdGF0ZVxufTsiXSwibmFtZXMiOlsiRGlzcG9zYWJsZSIsIlN1YmplY3QiLCJSZWFkT25seVN1YmplY3QiLCJEaXNwb3NhYmxlTGlzdCIsImRlZmF1bHREb2N1bWVudEZvY3VzSW50ZXJ2YWxUaW1lb3V0IiwiQXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IiLCJfY2xhc3NDYWxsQ2hlY2siLCJfZGVmaW5lUHJvcGVydHkiLCJEYXRlIiwibm93IiwiX2lzRm9yZWdyb3VuZCIsIl9yZWFkT25seUlzRm9yZWdyb3VuZCIsImRldGVjdFRhYkZvY3VzQ2hhbmdlIiwiX2NyZWF0ZUNsYXNzIiwia2V5IiwiZ2V0IiwidmFsdWUiLCJnZXRUaW1lU2luY2VMYXN0Q2hhbmdlIiwiX3RpbWVPZkxhc3RUYWJGb2N1c0NoYW5nZSIsImRpc3Bvc2UiLCJfZGlzcG9zYWJsZXMiLCJfdGhpcyIsImhpZGRlbiIsInZpc2liaWxpdHlDaGFuZ2UiLCJkb2N1bWVudCIsIl90eXBlb2YiLCJtc0hpZGRlbiIsIndlYmtpdEhpZGRlbiIsImhhbmRsZVZpc2liaWxpdHlDaGFuZ2UiLCJpc0ZvcmVncm91bmQiLCJzZXRGb2N1c1N0YXRlIiwiYWRkRXZlbnRMaXN0ZW5lciIsImFkZCIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJsaXN0ZW5Gb3JEb2N1bWVudEZvY3VzIiwiY2FsbCIsIl90aGlzMiIsIl9kb2N1bWVudEZvY3VzSW50ZXJ2YWwiLCJ3aW5kb3ciLCJzZXRJbnRlcnZhbCIsImhhc0ZvY3VzIiwiY2xlYXJJbnRlcnZhbCIsImRlZmF1bHQiLCJCcm93c2VyRGV0ZWN0b3IiLCJfYnJvd3Nlck5hbWVBbmRWZXJzaW9uIiwiX2Jyb3dzZXJOYW1lIiwiX2Jyb3dzZXJNYWpvclZlcnNpb24iLCJfaXNBbmRyb2lkIiwiX2lzQ2hyb21lNjkiLCJfaXNDaHJvbWU3MCIsIl9pc0Nocm9tZTcxIiwiX2lzQ2hyb21lNzIiLCJfaXNDaHJvbWU3NCIsIl9pc0Nocm9tZTc1IiwiX2lzQ2hyb21lNzYiLCJfaXNDaHJvbWU3NyIsImlzTW9iaWxlIiwiX2lzTW9iaWxlIiwicGFyc2VCcm93c2VyTmFtZUFuZFZlcnNpb24iLCJuYXZpZ2F0b3IiLCJ1c2VyQWdlbnQiLCJicm93c2VyTmFtZUFuZFZlcnNpb24iLCJtYXRjaCIsIl9icm93c2VyTmFtZUFuZFZlcnNpb25SZWdleCIsInBhcnNlQnJvd3Nlck5hbWVBbmRWZXJzaW9uRm9ySUUiLCJwYXJzZUJyb3dzZXJOYW1lIiwiYnJvd3Nlck5hbWVMaXN0Iiwic3BsaXQiLCJwYXJzZUJyb3dzZXJNYWpvclZlcnNpb24iLCJicm93c2VyVmVyc2lvbkxpc3QiLCJmdWxsVmVyc2lvbiIsIk51bWJlciIsIm1zaWUiLCJpbmRleE9mIiwiY29uY2F0IiwicGFyc2VJbnQiLCJzdWJzdHJpbmciLCJ0cmlkZW50IiwidmVyc2lvbiIsIl9Ccm93c2VyRGV0ZWN0b3IiLCJ0ZXN0IiwiX25hdmlnYXRvciIsIl9uYXZpZ2F0b3IyIiwiaW5jbHVkZXMiLCJUZWxlbWV0cnlEZWZhdWx0IiwiVGVsZW1ldHJ5TGV2ZWxNYXBwaW5nIiwiTG9nZ2luZ0xldmVsTWFwcGluZyIsIkxvZ2dlckRlZmF1bHRzIiwiQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlciIsImdldFN0cmluZ1ZhbHVlIiwibmFtZSIsInJlYWRDb25maWd1cmF0aW9uUGFyYW1ldGVyVmFsdWUiLCJyZWFkQ29uZmlndXJhdGlvblBhcmFtZXRlclVSSVZhbHVlIiwiZGVmYXVsdFN0cmluZ1ZhbHVlIiwiZ2V0Qm9vbGVhblZhbHVlIiwidmFsdWVGcm9tVXJpIiwiZGVmYXVsdEJvb2xlYW5WYWx1ZSIsImNvbnZlcnRUZWxlbWV0cnlMZXZlbFRvVGVsZW1ldHJ5TGV2ZWxUeXBlIiwiZGVmYXVsdFRlbGVtZXRyeUxldmVsIiwiY29udmVydExvZ2dpbmdMZXZlbFRvTG9nZ2luZ0xldmVsVHlwZSIsImRlZmF1bHRMb2dnaW5nTGV2ZWwiLCJkZWZhdWx0Q29uc29sZUxvZ2dpbmdMZXZlbCIsImRlZmF1bHRUZWxlbWV0cnlMb2dnaW5nTGV2ZWwiLCJtZXRhVmFsdWUiLCJxdWVyeVNlbGVjdG9yIiwiZ2V0QXR0cmlidXRlIiwidmFsdWVVUklQYXJhbWV0ZXJOYW1lIiwiVVJMU2VhcmNoUGFyYW1zIiwibG9jYXRpb24iLCJzZWFyY2giLCJ1bmRlZmluZWQiLCJGZWF0dXJlRW5hYmxlbWVudCIsIkdhcmJhZ2VDb2xsZWN0b3JNYW5hZ2VyIiwiRXJyb3IiLCJmb3JjZUdhcmJhZ2VDb2xsZWN0aW9uIiwiaXNGb3JjZUNocm9tZUdhcmJhZ2VDb2xsZWN0aW9uU3VwcG9ydGVkIiwiZm9yY2VDaHJvbWVHYXJiYWdlQ29sbGVjdGlvbiIsImlzUXVldWVNaWNyb3Rhc2tTdXBwb3J0ZWQiLCJxdWV1ZU1pY3JvdGFzayIsIm92ZXJsb2FkTWVtb3J5VG9JbnZva2VHYXJiYWdlQ29sbGVjdGlvbiIsInNldFRpbWVvdXQiLCJpbWciLCJjcmVhdGVFbGVtZW50Iiwic3JjIiwiVVJMIiwiY3JlYXRlT2JqZWN0VVJMIiwiQmxvYiIsIkFycmF5QnVmZmVyIiwib25lcnJvciIsInJldm9rZU9iamVjdFVSTCIsIk5ldHdvcmtNb25pdG9yIiwiaXNTdXBwb3J0ZWQiLCJzZXR1cE5ldHdvcmtDaGFuZ2VMaXN0ZW5lcnMiLCJ1cGRhdGVTdGF0aXN0aWNzIiwiX2lzU3VwcG9ydGVkIiwiX3J0dCIsIl9lZmZlY3RpdmVUeXBlIiwiX2Rvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5IiwiZ2V0RG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkiLCJkb3dubGluayIsImRvd25saW5rTWF4IiwiZ2V0RWZmZWN0aXZlVHlwZSIsImVmZmVjdGl2ZVR5cGUiLCJ0eXBlIiwiZ2V0Um91bmRUcmlwVGltZSIsInJ0dCIsImxpc3RlbmVyIiwiTWV0cmljc1R5cGUiLCJNZXRyaWNUeXBlIiwiRHVyYXRpb25zIiwiU0RLIiwiTG9nZ2VyRmFjdG9yeSIsIlN0cmVhbVNldHVwTGlzdGVuZXIiLCJwYWdlTG9hZFRpbWUiLCJnZXRMb2dnZXIiLCJtZXRyaWNzU2VydmljZSIsIl9zdGFydFRpbWUiLCJfcGFnZUxvYWRUaW1lIiwic3VjY2VzcyIsInN0cmVhbUlkIiwicmVjb3JkU3RyZWFtTWV0cmljIiwiU2V0dXBDb21wbGV0ZWQiLCJmYWlsIiwiU2V0dXBGYWlsZWQiLCJtZXRyaWNUeXBlIiwiX21ldHJpY1N1Ym1pdHRlZCIsInNldHVwVGltZSIsIm1ldHJpY05hbWUiLCJnZXROYW1lIiwicHVzaCIsInJ1bnRpbWUiLCJ1aW50NjQiLCJfbG9nZ2VyIiwiaW5mbyIsInRvSXNvU3RyaW5nIiwiRWRnZVRva2VuIiwiZWRnZUF1dGhUb2tlblByZWZpeCIsIkVkZ2VBdXRoUGFyc2VyIiwicGFyc2VUb2tlbiIsInRva2VuIiwiaXNFbmNvZGVkRWRnZVRva2VuVmFsaWQiLCJlcnJvciIsImRlY29kZWRUb2tlbiIsImF0b2IiLCJzdWJzdHIiLCJsZW5ndGgiLCJlZGdlVG9rZW4iLCJKU09OIiwicGFyc2UiLCJlIiwic3RhcnRzV2l0aCIsIl9lZGdlVG9rZW4kdG9rZW4iLCJfZWRnZVRva2VuJHRva2VuMiIsIl9hcHBsaWNhdGlvbklkIiwiYXBwbGljYXRpb25JZCIsIl90b2tlbiIsInVyaSIsImNhcGFiaWxpdGllcyIsIkJ1aWxkRmVhdHVyZXMiLCJfc2VuZExvY2FsQ2FuZGlkYXRlcyIsIl9zZW5kTG9ncyIsIl9zZW5kTWV0cmljcyIsIl9sb2dUb0NvbnNvbGUiLCJhcHBseUZlYXR1cmVzIiwiZmVhdHVyZXMiLCJfX0ZFQVRVUkVTX18iLCJzZW5kTG9jYWxDYW5kaWRhdGVzIiwic2VuZExvZ3MiLCJzZW5kTWV0cmljcyIsImxvZ1RvQ29uc29sZSIsImlzQ2hyb21lNzQiLCJpc0Nocm9tZTc1IiwiaXNDaHJvbWU3NiIsImlzQ2hyb21lNzciLCJpc0Nocm9tZTY5IiwiaXNDaHJvbWU3MCIsImlzQ2hyb21lNzEiLCJpc0Nocm9tZTcyIiwiYnJvd3Nlck5hbWUiLCJicm93c2VyTWFqb3JWZXJzaW9uIiwiX2RvY3VtZW50IiwiTWVkaWFTdHJlYW1UcmFja1Byb2Nlc3NvciIsIk1lZGlhU3RyZWFtVHJhY2tHZW5lcmF0b3IiLCJSVENSdHBSZWNlaXZlciIsInByb3RvdHlwZSIsImNyZWF0ZUVuY29kZWRTdHJlYW1zIiwiUlRDUnRwU2NyaXB0VHJhbnNmb3JtIiwiUGFyYW1ldGVycyIsIl9kaXNjb3ZlcnlQYXJhbWV0ZXJzIiwiYXBwbHlQYXJhbWV0ZXJzIiwicGFyYW1ldGVycyIsIl9fUEFSQU1FVEVSU19fIiwiZGlzY292ZXJ5IiwiaW50ZW50aW9ucyIsImRpc3Bvc2FibGUiLCJfZGlzcG9zZWQiLCJfZGlzcG9zYWJsZSIsIl9saXN0IiwiZm9yRWFjaCIsInRvU3RyaW5nIiwibWF4RGlnaXRzSW5GbG9hdEFmdGVyRG90IiwiTnVtYmVycyIsImNvdW50TnVtYmVyTGVuZ3RoIiwiaW5jcmVtZW50Rm9yTmVnYXRpdmVWYWx1ZSIsIm51bWJlciIsImNvdW50RGlnaXRzQmVmb3JlRGVjaW1hbCIsIk1hdGgiLCJmbG9vciIsImNvdW50RGlnaXRzQWZ0ZXJEZWNpbWFsIiwiZml4Um91bmRpbmciLCJwcmVjaXNpb24iLCJwb3dlciIsInBvdyIsInJvdW5kIiwiZGlnaXRzQmVmb3JlRGVjaW1hbCIsIm9yaWdpbmFsVmFsdWUiLCJtb2RpZmllZFZhbHVlIiwiY291bnQiLCJTdHJpbmdzIiwicmFuZG9tIiwicmFuZG9tMTNDaGFyYWN0ZXJzIiwibG9vcHMiLCJjZWlsIiwiQXJyYXkiLCJmaWxsIiwicmVkdWNlIiwic3RyaW5nIiwiZnVuYyIsImFzc2VydFVucmVhY2hhYmxlIiwieCIsIkFwcGVuZGVycyIsIl9hcHBlbmRlcnMiLCJhcHBlbmRlciIsInJlbW92ZSIsIml0ZW1zIiwiaXRlbSIsIkxvZ2dpbmdMZXZlbCIsIkNvbnNvbGVBcHBlbmRlciIsInRocmVzaG9sZCIsIl90aHJlc2hvbGQiLCJsb2ciLCJsb2dMZXZlbCIsIm1lc3NhZ2UiLCJjYXRlZ29yeSIsImRhdGUiLCJmdWxsTWVzc2FnZSIsInRvSVNPU3RyaW5nIiwiV2FybiIsImNvbnNvbGUiLCJMb2dnZXIiLCJhcHBlbmRlcnMiLCJfY2F0ZWdvcnkiLCJ0cmFjZSIsIlRyYWNlIiwiX2xlbiIsImFyZ3VtZW50cyIsImFyZ3MiLCJfa2V5IiwiZGVidWciLCJEZWJ1ZyIsIl9sZW4yIiwiX2tleTIiLCJJbmZvIiwiX2xlbjMiLCJfa2V5MyIsIndhcm4iLCJfbGVuNCIsIl9rZXk0IiwiX2xlbjUiLCJfa2V5NSIsImZhdGFsIiwiRmF0YWwiLCJfbGVuNiIsIl9rZXk2IiwibGV2ZWwiLCJyZXBsYWNlUGxhY2Vob2xkZXJzIiwicmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZyIsImluZGV4IiwicmVwbGFjZUFyZ3VtZW50Iiwic3BsaWNlIiwic3RyaW5naWZ5IiwiYWNjdW11bGF0b3IiLCJjdXJyZW50VmFsdWUiLCJhcnJheSIsImVycm9yU3RhY2tBbHNvSGFzRXJyb3JNZXNzYWdlIiwic3RhY2siLCJhcmciLCJjYWNoZSIsIk9iamVjdCIsImFyZ3VtZW50IiwiZGF0YSIsInRvU3RyaW5nU3RyIiwiTG9nZ2luZ1RocmVzaG9sZCIsIlRlbGVtZXRyeUFwcGVuZGVyIiwiVGVsZW1ldHJ5Q29uZmlndXJhdGlvbiIsIl90ZWxlbWV0cnlDb25maWd1cmF0aW9uIiwibG9nZ2VyIiwiX2xvZ2dlcnMiLCJhcHBseUxvZ2dlckNvbmZpZ0Zyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uIiwiYXBwbHlMb2dnaW5nTGV2ZWwiLCJhcHBseUFwcGVuZGVyTG9nZ2luZ0xldmVsIiwiYXBwbHlDb25zb2xlTG9nZ2VyIiwiYmluZCIsImFwcGx5VGVsZW1ldHJ5TG9nZ2VyIiwicGFyYW1ldGVyVmFsdWUiLCJfY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlciIsInNldFRocmVzaG9sZCIsImFwcGx5QXBwZW5kZXIiLCJsb2dnaW5nTGV2ZWwiLCJPZmYiLCJBbGwiLCJjb252ZXJ0TG9nZ2luZ0xldmVsVHlwZVRvTG9nZ2luZ0xldmVsIiwibG9nZ2luZ0xldmVsVHlwZSIsIlRlbGVtZXRyeUxldmVsIiwibWV0cmljcyIsIl9tZXRyaWNzIiwiZ2V0VGVsZW1ldHJ5TGV2ZWwiLCJUaW1lVG9GaXJzdEZyYW1lIiwiRXNzZW50aWFsIiwiQ2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZSIsIlN0YWxsZWQiLCJCdWZmZXJpbmciLCJSb3VuZFRyaXBUaW1lIiwiRG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkiLCJOZXR3b3JrVHlwZSIsIlJlc29sdXRpb25DaGFuZ2VkIiwiQXBwbGljYXRpb25Gb3JlZ3JvdW5kIiwiQXBwbGljYXRpb25CYWNrZ3JvdW5kIiwiTWV0cmljc0NvbmZpZ3VyYXRpb24iLCJfdXJsIiwic2V0IiwidXJsIiwibWV0cmljc1VybCIsInBhdGhuYW1lIiwiX2Vudmlyb25tZW50IiwiZW52aXJvbm1lbnQiLCJfdGVuYW5jeSIsInRlbmFuY3kiLCJfc2Vzc2lvbklkIiwic2Vzc2lvbklkIiwiTWV0cmljc1NlcnZpY2UiLCJUZWxlbWV0cnlVcmwiLCJFbnZpcm9ubWVudCIsIk1ldHJpY3NGYWN0b3J5IiwiZ2V0TWV0cmljc1NlcnZpY2UiLCJtZXRyaWNzU2VydmljZXMiLCJfbWV0cmljc1NlcnZpY2VzIiwibWV0cmljc0NvbmZpZ3VyYXRpb24iLCJjbGllbnRTZXNzaW9uSWQiLCJnZXRUZWxlbWV0cnlVcmwiLCJnZXRFbnZpcm9ubWVudEZyb21VcmwiLCJjb252ZXJ0VGVsZW1ldHJ5TGV2ZWxUeXBlVG9UZWxlbWV0cnlMZXZlbCIsInRlbGVtZXRyeUxldmVsIiwic2V0VGVsZW1ldHJ5TGV2ZWwiLCJ2YWx1ZXMiLCJFeHBvbmVudGlhbEJhY2tvZmYiLCJWZXJzaW9uTWFuYWdlciIsInJlcXVlc3RTaXplTGltaXQiLCJtYXhCdWZmZXJlZFJlY29yZHMiLCJob3N0bmFtZSIsIl9tZXRyaWNzQ29uZmlndXJhdGlvbiIsIl9leHBvbmVudGlhbEJhY2tvZmYiLCJtZXRyaWMiLCJwcmV2aW91c1ZhbHVlIiwicmVzb3VyY2UiLCJraW5kIiwibWV0cmljUmVjb3JkIiwidGltZXN0YW1wIiwiZnVsbFF1YWxpZmllZE5hbWUiLCJfZG9tYWluIiwic2RrVmVyc2lvbiIsImlnbm9yZWQiLCJzZW5kTWV0cmljc0lmQWJsZSIsIl9hc3luY1RvR2VuZXJhdG9yIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsIm1hcmsiLCJfY2FsbGVlIiwibWV0cmljc01lc3NhZ2VzIiwiZm9ybURhdGEiLCJ3cmFwIiwiX2NhbGxlZSQiLCJfY29udGV4dCIsInByZXYiLCJuZXh0IiwiRm9ybURhdGEiLCJhcHBlbmQiLCJyZWNvcmRzIiwiZmV0Y2giLCJtZXRob2QiLCJib2R5IiwiYWJydXB0Iiwic2VudCIsInN0b3AiLCJfeCIsImFwcGx5IiwiX3NlbmRNZXRyaWNzSWZBYmxlIiwiX2NhbGxlZTIiLCJfY2FsbGVlMiQiLCJfY29udGV4dDIiLCJfaXNTZW5kaW5nIiwic2xpY2UiLCJ0aGVuIiwicmVzcG9uc2UiLCJpc1Jlc3BvbnNlU3RhdHVzQ29kZVJldHJ5YWJsZSIsIl9mYWlsdXJlQ291bnQiLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJnZXRFeHBvbmVudGlhbEJhY2tvZmZJbnRlcnZhbEJ5RmFpbHVyZUNvdW50IiwiY2F0Y2giLCJfcmVmIiwic3RhdHVzIiwidGVsZW1ldHJ5TGV2ZWxUeXBlIiwiUHJvbWlzZUhhbmRsZXIiLCJQcm9taXNlIiwiY2FsbGJhY2siLCJUeXBlRXJyb3IiLCJfc3RhdGUiLCJfaGFuZGxlZCIsIl92YWx1ZSIsIl9kZWZlcnJlZHMiLCJkb1Jlc29sdmUiLCJkb25lIiwicHJvbWlzZVJlc29sdmUiLCJyZWFzb24iLCJwcm9taXNlUmVqZWN0IiwibmV3VmFsdWUiLCJwcm9taXNlIiwiZmluYWxlIiwiX2ltbWVkaWF0ZSIsIl91bmhhbmRsZWRSZWplY3Rpb24iLCJpIiwibGVuIiwiaGFuZGxlIiwiZGVmZXJyZWQiLCJvbkZ1bGZpbGxlZCIsIm9uUmVqZWN0ZWQiLCJyZXN1bHQiLCJhbGwiLCJhcnIiLCJyZXNvbHZlIiwicmVqZWN0IiwiaXNBcnJheSIsInJlbWFpbmluZyIsIm1hbmFnZVJlc3BvbnNlIiwiY29uc3RydWN0b3IiLCJfIiwicmFjZSIsIlZhbmlsbGFQZWVyQ29ubmVjdGlvbkZhY3RvcnkiLCJQZWVyQ29ubmVjdGlvblNlcnZpY2UiLCJfcGVlckNvbm5lY3Rpb25GYWN0b3J5IiwiaW5pdGlhdGVJbml0aWFsUHJlY2FjaGluZyIsImlzUHJlY2FjaGluZ0VuYWJsZWQiLCJwcmVjYWNoZUNyZWF0ZVBlZXJDb25uZWN0aW9uT2ZmZXIiLCJfcHJlY2FjaGVDcmVhdGVQZWVyQ29ubmVjdGlvbk9mZmVyIiwiX2NhY2hlZCIsImRpcmVjdGlvbiIsInBlZXJDb25uZWN0aW9uIiwiY3JlYXRlUGVlckNvbm5lY3Rpb25PZmZlciIsIl9jcmVhdGVQZWVyQ29ubmVjdGlvbk9mZmVyIiwiX2NhbGxlZTMiLCJlbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXMiLCJjb25maWd1cmF0aW9uIiwiX2FyZ3MzIiwiX2NhbGxlZTMkIiwiX2NvbnRleHQzIiwiaXNFbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXNTdXBwb3J0ZWQiLCJjcmVhdGVQZWVyQ29ubmVjdGlvbiIsInN1cHBvcnRzQWRkVHJhbnNjZWl2ZXIiLCJ2aWRlb1RyYW5zY2VpdmVyIiwiYXVkaW9UcmFuc2NlaXZlciIsIm9wdGlvbnMiLCJhZGRUcmFuc2NlaXZlciIsInQwIiwidDEiLCJ0MiIsImNyZWF0ZU9mZmVyIiwidDMiLCJsb2NhbE9mZmVyIiwib2ZmZXJUb1JlY2VpdmVBdWRpbyIsIm9mZmVyVG9SZWNlaXZlVmlkZW8iLCJ0NCIsInQ1IiwiUnRjQ29uZmlndXJhdGlvbk1hbmFnZXIiLCJ0cnVuY2F0ZUljZVNlcnZlcnMiLCJpY2VTZXJ2ZXJzIiwidXJscyIsInVzZXJuYW1lIiwiY3JlZGVudGlhbCIsIlNkcFBhcnNlciIsInVwZGF0ZVN0YXRpc3RpY1RpbWVvdXQiLCJSdGNDb25uZWN0aW9uTW9uaXRvciIsIm1lZGlhU3RyZWFtIiwiZXN0aW1hdGVkUm91bmRUcmlwVGltZSIsIl9wZWVyQ29ubmVjdGlvbiIsIl9lc3RpbWF0ZWRSb3VuZFRyaXBUaW1lIiwiX3RyYWNrc1RvTW9uaXRvciIsImdldFRyYWNrcyIsIm1hcCIsInRyYWNrIiwiZ2V0Q3VycmVudE9mZmVyRGlzYWJsZWQiLCJwYXJzZWRTRFAiLCJjdXJyZW50UmVtb3RlRGVzY3JpcHRpb24iLCJzZHAiLCJfZXN0aW1hdGVkQXVkaW9Db2RlYyIsImF1ZGlvQ29kZWMiLCJfZXN0aW1hdGVkVmlkZW9Db2RlYyIsInZpZGVvQ29kZWMiLCJ1cGRhdGVTdGF0aXN0aWMiLCJfcnRjU3RhdGlzdGljIiwiX2lzTW9uaXRvclJ1bm5pbmciLCJfdXBkYXRlVGltZW91dCIsImNsZWFyVGltZW91dCIsIl91cGRhdGVTdGF0aXN0aWMiLCJfaWdub3JlZCIsImdldEtpbmRGb3JTYWZhcmkxMSIsImdldFN0YXRzUHJvbWlzZUJhc2VkRGlzYWJsZWQiLCJ1cGRhdGVTdGF0aXN0aWNMZWdhY3kiLCJpZCIsImdldFN0YXRzIiwic3RhdHMiLCJydGNTdGF0aXN0aWNzIiwicm91bmRUcmlwVGltZSIsImxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcCIsInJlcG9ydCIsImN1cnJlbnRSb3VuZFRyaXBUaW1lIiwibWVkaWFUeXBlIiwiY29kZWMiLCJjb2RlY0lkIiwibWltZVR5cGUiLCJfdGhpcyRfcnRjU3RhdGlzdGljJHYiLCJfdGhpcyRfcnRjU3RhdGlzdGljJHYyIiwiX3RoaXMkX3J0Y1N0YXRpc3RpYyR2MyIsIl90aGlzJF9ydGNTdGF0aXN0aWMkdjQiLCJfdGhpcyRfcnRjU3RhdGlzdGljJHY1IiwiYnl0ZXMiLCJieXRlc1JlY2VpdmVkIiwicHJldmlvdXNCeXRlc1JlY2VpdmVkIiwiYnl0ZXNEZWx0YSIsInRpbWVEZWx0YSIsImJpdHJhdGUiLCJzc3JjIiwicGFja2V0c0xvc3QiLCJwYWNrZXRzUmVjZWl2ZWQiLCJnZXRDb2RlY0J5VHlwZSIsInZpZGVvIiwiZnJhbWVzRGVjb2RlZCIsImZwcyIsIl91cGRhdGVTdGF0aXN0aWNMZWdhY3kiLCJnZXRTdGF0c0xlZ2FjeSIsIm5hbWVzIiwic3RhdCIsIlJ0Y1B1Ymxpc2hNb25pdG9yIiwicGFyc2VkTG9jYWxEZXNjcmlwdGlvbiIsImN1cnJlbnRMb2NhbERlc2NyaXB0aW9uIiwicGFyc2VkUmVtb3RlRGVzY3JpcHRpb24iLCJfYXZhaWxhYmxlVHJhY2tzIiwiYXVkaW8iLCJpc0F1ZGlvVHJhY2tFbmFibGVkIiwiaXNWaWRlb1RyYWNrRW5hYmxlZCIsImxhc3RQYWNrZXRTZW50VGltZXN0YW1wIiwiYnl0ZXNTZW50IiwicHJldmlvdXNCeXRlc1NlbnQiLCJwYWNrZXRzU2VudCIsInJldHJhbnNtaXR0ZWRCeXRlc1NlbnQiLCJmaXJDb3VudCIsImZyYW1lSGVpZ2h0IiwiZnJhbWVXaWR0aCIsImZyYW1lc0VuY29kZWQiLCJmcmFtZXNTZW50IiwiaGVhZGVyQnl0ZXNTZW50IiwiaHVnZUZyYW1lc1NlbnQiLCJwbGlDb3VudCIsInFwU3VtIiwidG90YWxFbmNvZGVUaW1lIiwidG90YWxFbmNvZGVkQnl0ZXNUYXJnZXQiLCJfc2RwIiwic2RwU3BsaXRCeUxpbmVzIiwic2RwU3BsaXRCeVRyYWNrcyIsIl9hdWRpb0NvZGVjIiwiYXBwbHlDb2RlYyIsIl92aWRlb0NvZGVjIiwiX2lzQXVkaW9UcmFja0VuYWJsZWQiLCJpc1RyYWNrQnlUeXBlRW5hYmxlZCIsIl9pc1ZpZGVvVHJhY2tFbmFibGVkIiwic2RwU2VjdGlvbkZvclR5cGUiLCJmaW5kIiwic2RwVHJhY2siLCJ1c2VkQ29kZWNMaW5lIiwic2RwTGluZSIsInVzZWRDb2RlYyIsImNvZGVjTmFtZSIsIlZhbmlsbGFQZWVyQ29ubmVjdGlvbiIsIndlYmtpdFJUQ1BlZXJDb25uZWN0aW9uRW5hYmxlZCIsIndlYmtpdFJUQ1BlZXJDb25uZWN0aW9uIiwiUlRDUGVlckNvbm5lY3Rpb24iLCJjb25uZWN0aW9uU3RhdGUiLCJpY2VDb25uZWN0aW9uU3RhdGUiLCJnZXRDb25maWd1cmF0aW9uIiwic2V0Q29uZmlndXJhdGlvbiIsImFkZFRyYW5jZWl2ZXJEaXNhYmxlZCIsIl9jcmVhdGVPZmZlciIsInByb21pc2VCYXNlZFBDTWV0aG9kc0Rpc2FibGVkIiwiX2NyZWF0ZUFuc3dlciIsImNyZWF0ZUFuc3dlciIsIl94MiIsIl9zZXRMb2NhbERlc2NyaXB0aW9uIiwiZGVzY3JpcHRpb24iLCJzZXRMb2NhbERlc2NyaXB0aW9uIiwiUlRDU2Vzc2lvbkRlc2NyaXB0aW9uIiwiX3gzIiwiX3NldFJlbW90ZURlc2NyaXB0aW9uIiwiX2NhbGxlZTQiLCJfZGVzY3JpcHRpb24kc2RwIiwiaGFzQ3J5cHRvIiwiX2NhbGxlZTQkIiwiX2NvbnRleHQ0Iiwic2V0UmVtb3RlRGVzY3JpcHRpb24iLCJfeDQiLCJnZXRTZW5kZXJzIiwiZ2V0UmVjZWl2ZXJzIiwic2VsZWN0b3IiLCJfdGhpczMiLCJhZGRTdHJlYW0iLCJfdGhpczQiLCJhZGRUcmFjayIsIm9udHJhY2siLCJoYW5kbGVyIiwib25pY2VjYW5kaWRhdGUiLCJvbmNvbm5lY3Rpb25zdGF0ZWNoYW5nZSIsIm9uaWNlY29ubmVjdGlvbnN0YXRlY2hhbmdlIiwiY2xvc2UiLCJfY3JlYXRlUGVlckNvbm5lY3Rpb24iLCJzdWJqZWN0IiwiX3N1YmplY3QiLCJzdWJzY3JpYmUiLCJEaXNwb3NhYmxlTGlzdGVuZXIiLCJfRGlzcG9zYWJsZSIsImxpc3RlbmVycyIsIl9jYWxsU3VwZXIiLCJpZHgiLCJfaW5oZXJpdHMiLCJfbGlzdGVuZXJzIiwiY2hhbmdlZCIsImNvbXBhcmFibGUiLCJlcXVhbHMiLCJiYXNlVVJMIiwib3JpZ2luIiwiRGlzY292ZXJ5VXJpIiwiX2NsaWVudFNlc3Npb25JZCIsIl9sb2FkZWRUaW1lc3RhbXAiLCJfcmVhZE9ubHlJbml0aWFsaXplZCIsIl9yZWFkT25seURpc2NvdmVyeVVyaSIsIl9yZWFkT25seVBlZXJDb25uZWN0aW9uRmFjdG9yeSIsIl9hdXRvbWF0aWNhbGx5UmV0cnlPbkZhaWx1cmUiLCJfYXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uIiwiX2F1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW0iLCJfYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmUiLCJfZm9yY2VHYXJiYWdlQ29sbGVjdGlvbk9uUmVzdGFydCIsIl9za2lwR2FyYmFnZUNvbGxlY3Rpb25Pbk1vYmlsZURldmljZXMiLCJfd2ViUGxheWVyTG9hZGVyIiwiX3NoYWthUGxheWVyTG9hZGVyIiwiX2hsc0pzTG9hZGVyIiwiX21ldHJpY3NTZXJ2aWNlIiwiX2FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yIiwiX3RlbGVtZXRyeVVybCIsIl9tYXhpbWFsTnVtYmVyT2ZQZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzIiwicmV0cmllc0Ftb3VudCIsIl90ZWxlbWV0cnlMZXZlbCIsImFwcGx5VGVsZW1ldHJ5Q29uZmlndXJhdGlvbiIsInRlbGVtZXRyeUNvbmZpZ3VyYXRpb24iLCJpZ25vcmVkRW52aXJvbm1lbnQiLCJpZ25vcmVkRGlzY292ZXJ5VXJpIiwidGVsZW1ldHJ5VXJsIiwidGVsZW1ldHJ5QXBwZW5kZXIiLCJpZ25vcmVkVGVuYW5jeSIsImFwcGx5TWV0cmljc0NvbmZpZ3VyYXRpb24iLCJpZ25vcmVkVGVsZW1ldHJ5TGV2ZWwiLCJhcHBseUF1dG9tYXRpY2FsbHlSZXRyeU9uRmFpbHVyZUZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uIiwiYXBwbHlBdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb25Gcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbiIsImFwcGx5Rm9yY2VHYXJiYWdlQ29sbGVjdGlvbk9uUmVzdGFydEZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uIiwiYXBwbHlTa2lwR2FyYmFnZUNvbGxlY3Rpb25Pbk1vYmlsZURldmljZXNGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbiIsImFwcGx5RGlzY292ZXJ5VXJpRGVmYXVsdEZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uIiwiZGlzY292ZXJ5VXJpIiwiY2hhbm5lbFRva2VuIiwidXJpVmFsdWUiLCJiYXNlVVJJVmFsdWUiLCJpbml0IiwiX2luaXRpYWxpemVkIiwicGVlckNvbm5lY3Rpb25GYWN0b3J5IiwiY29uc29sZUxvZ2dpbmdMZXZlbCIsImNvbnNvbGVBcHBlbmRlciIsImF1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW0iLCJhdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZSIsIndlYlBsYXllckxvYWRlciIsInNoYWthUGxheWVyTG9hZGVyIiwiaGxzSnNMb2FkZXIiLCJfU0RLIiwic2VnbWVudHMiLCJwcm90b2NvbCIsInVuc2hpZnQiLCJlbmRzV2l0aCIsImpvaW4iLCJCaXRyYXRlU3RhdGUiLCJCaXRyYXRlTW9kZSIsIkRpbWVuc2lvbiIsIkNoYW5uZWxTdGF0ZSIsIlZpZGVvVGVsZW1ldHJ5IiwiU2Vzc2lvblRlbGVtZXRyeSIsIlRva2VuQ29udGV4dCIsIkNoYW5uZWxDb250ZXh0IiwiRW5jb2RlZFN0cmVhbVNpbmsiLCJTdHJlYW1UcmFja1RyYW5zZm9ybSIsIlN0cmVhbVRyYW5zZm9ybUNvbnRleHQiLCJQZWVyQ29ubmVjdGlvbkNvbnRleHQiLCJTdGF0ZUNvbnRleHQiLCJTdHJlYW1GYWN0b3J5IiwiRGlzY292ZXJ5IiwiZGVmYXVsdFN0cmVhbVRlcm1pbmF0aW9uUmVhc29uIiwiZmFpbHVyZUNvdW50Q2xlYW5VcEludGVydmFsSW5NaWxsaXNlY29uZHMiLCJzdGFuZGJ5UG9sbGluZ0ludGVydmFsSW5NaWxsaXNlY29uZHMiLCJDaGFubmVsIiwidmlkZW9FbGVtZW50IiwiY2hhbm5lbENvbnRleHRPcHRpb25zIiwidGFyZ2V0TGFnIiwic3RyZWFtVHJhbnNmb3JtQ29udGV4dE9wdGlvbnMiLCJoYXNJbnNlcnRhYmxlU3RyZWFtcyIsImhhc0VuY29kZWRJbnNlcnRhYmxlU3RyZWFtcyIsInZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2siLCJhdWRpb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrIiwiZW5jb2RlZFZpZGVvU3RyZWFtU2luayIsImVuY29kZWRBdWRpb1N0cmVhbVNpbmsiLCJfdG9rZW5Db250ZXh0IiwiX2NoYW5uZWxDb250ZXh0IiwiX3BlZXJDb25uZWN0aW9uQ29udGV4dCIsIl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0IiwiX3N0YXRlQ29udGV4dCIsIl9jaGFubmVsU3RhcnRUaW1lIiwiX3JlYWRPbmx5VmlkZW9FbGVtZW50IiwiX3JlYWRPbmx5VG9rZW4iLCJfcmVhZE9ubHlQZWVyQ29ubmVjdGlvbiIsIl9yZWFkT25seVN0YXRlIiwic3RhdGUiLCJfcmVhZE9ubHlBdXRvTXV0ZWQiLCJhdXRvTXV0ZWQiLCJfcmVhZE9ubHlBdXRvUGF1c2VkIiwiYXV0b1BhdXNlZCIsIl9yZWFkT25seVRva2VuRXhwaXJpbmciLCJ0b2tlbkV4cGlyaW5nIiwiX3JlYWRPbmx5QXV0aG9yaXplZCIsImF1dGhvcml6ZWQiLCJfcmVhZE9ubHlPbmxpbmUiLCJvbmxpbmUiLCJfcmVhZE9ubHlMb2FkaW5nIiwibG9hZGluZyIsIl9yZWFkT25seVBsYXlpbmciLCJwbGF5aW5nIiwiX3JlYWRPbmx5U3RhbmRieSIsInN0YW5kYnkiLCJfcmVhZE9ubHlTdG9wcGVkIiwic3RvcHBlZCIsIl9yZWFkT25seVRhcmdldExhZyIsIl9yZWFkT25seUxhZyIsImxhZyIsIl9yZWFkT25seUJpdHJhdGVMaW1pdCIsImJpdHJhdGVMaW1pdCIsIl9yZWFkT25seVJlc29sdXRpb24iLCJyZXNvbHV0aW9uIiwiX3JlYWRPbmx5RmFpbHVyZUNvdW50IiwiZmFpbHVyZUNvdW50IiwiX3JlYWRPbmx5RW5kUG9pbnQiLCJlbmRQb2ludCIsIl9yZWFkT25seVN0cmVhbSIsInN0cmVhbSIsIl9yZWFkT25seVJ0Y1N0YXRpc3RpY3MiLCJfcmVhZE9ubHlNZWRpYVN0cmVhbSIsIl9zZXNzaW9uVGVsZW1ldHJ5IiwiY2hhbm5lbERpc3Bvc2FibGVzIiwiX3ZpZGVvTWV0YURhdGFDaGFuZ2VkSGFuZGxlciIsImhhbmRsZVZpZGVvTWV0YURhdGFDaGFuZ2VkIiwicmVuZGVyZXJEaXNwb3NhYmxlcyIsInZpZGVvVGVsZW1ldHJ5IiwiZGF0YXNldCIsInNldHVwTGlzdGVuZXJGb3JUaW1lVG9GaXJzdFRpbWUiLCJzZXR1cExpc3RlbmVyRm9yUmVidWZmZXJpbmciLCJTdG9wcGVkIiwicmVzdGFydEFmdGVyU3RvcCIsImNsZWFyRmFpbHVyZUNvdW50VGltZW91dCIsIlBsYXlpbmciLCJvblZpZGVvUmVzb2x1dGlvbkNoYW5nZXMiLCJlbGFwc2VkSW5NaWxsaXNlY29uZHMiLCJjaGFubmVsSW5pdGlhbGl6YXRpb24iLCJnZXRUaW1lIiwibGltaXRCaXRyYXRlIiwiS2VlcCIsIk5vcm1hbCIsImRlc3Ryb3lTdHJlYW1PblVubW91bnQiLCJzdGFydCIsInBhdXNlIiwic3JjT2JqZWN0Iiwid2lkdGgiLCJ2aWRlb1dpZHRoIiwiaGVpZ2h0IiwidmlkZW9IZWlnaHQiLCJlbXB0eSIsImRpc3Bvc2FibGVzIiwic2V0Qml0cmF0ZUxpbWl0IiwiY2xlYXJCaXRyYXRlTGltaXQiLCJiaXRyYXRlSW5CaXRzUGVyU2Vjb25kIiwiUmVzZXQiLCJ1cGRhdGVUYXJnZXRMYWciLCJfc3RvcCIsImlzU3RhcnRpbmciLCJwcm9jZXNzU3RvcCIsImNsZWFuVXBSZXNvdXJjZXMiLCJfcmVzdW1lIiwicGxheU1lZGlhU3RyZWFtSW5WaWRlb0VsZW1lbnQiLCJyZXN1bWUiLCJtdXRlIiwibXV0ZWQiLCJ1bm11dGUiLCJfZGlzcG9zZSIsImlzRGlzcG9zZWQiLCJnZXRVcmkiLCJfc3RhcnQiLCJwcm9jZXNzU3RhcnQiLCJfcHJvY2Vzc1N0YXJ0IiwiX2NhbGxlZTUiLCJfdGhpczUiLCJsaXN0ZW5PblN0cmVhbVNldHVwIiwiX1N0cmVhbVRyYWNrVHJhbnNmb3JtIiwidmFsaWQiLCJ2YWxpZGF0aW9uUmVzdWx0IiwiX1N0cmVhbVRyYWNrVHJhbnNmb3JtMiIsIl92YWxpZCIsIl92YWxpZGF0aW9uUmVzdWx0IiwiX0VuY29kZWRTdHJlYW1TaW5rJHZhIiwiX3ZhbGlkMiIsIl92YWxpZGF0aW9uUmVzdWx0MiIsIl9FbmNvZGVkU3RyZWFtU2luayR2YTIiLCJfdmFsaWQzIiwiX3ZhbGlkYXRpb25SZXN1bHQzIiwiaGFzVHJhbnNmb3JtU3RyZWFtQ2FsbGJhY2siLCJoYXNFbmNvZGVkU3RyZWFtU2luayIsImhhbmRsZVN0cmVhbUZhaWx1cmVDYWxsYmFjayIsInN0cmVhbVBsYXllciIsIl9jYWxsZWU1JCIsIl9jb250ZXh0NSIsIlVuYXV0aG9yaXplZCIsInZhbGlkYXRlTWVkaWFTdHJlYW1UcmFja1RyYW5zZm9ybSIsIkNvbmZpZ3VyYXRpb25FcnJvciIsInZhbGlkYXRlRW5jb2RlZFN0cmVhbVNpbmsiLCJpc0luc2VydGFibGVTdHJlYW1zU3VwcG9ydGVkIiwiVW5zdXBwb3J0ZWRGZWF0dXJlIiwiaXNSVENSdHBTY3JpcHRUcmFuc2Zvcm1TdXBwb3J0ZWQiLCJTdGFydGluZyIsIlJlY292ZXJpbmciLCJjbGVhckNhY2hlZENsb3Nlc3RFbmRwb2ludCIsImhhbmRsZVN0cmVhbUZhaWx1cmUiLCJjcmVhdGUiLCJDbGllbnRTdGFydEVycm9yIiwiZmluYWxseSIsImF1dG9tYXRpY1JldHJ5T25GYWlsdXJlIiwidGltZW91dElkIiwiZ2V0UmV0cnlJbnRlcnZhbCIsIl9yZXN0YXJ0QWZ0ZXJTdG9wIiwiX2NhbGxlZTYiLCJfY2FsbGVlNiQiLCJfY29udGV4dDYiLCJfcGxheSIsIl9jYWxsZWU3IiwiX2NhbGxlZTckIiwiX2NvbnRleHQ3IiwicGxheSIsIlN0YW5kQnkiLCJPZmZsaW5lIiwiR2VvUmVzdHJpY3RlZCIsIkdlb0Jsb2NrZWQiLCJQYXVzZWQiLCJSZWNvbm5lY3RpbmciLCJUcmFuc2llbnRDb25maWd1cmF0aW9uRXJyb3IiLCJDb25uZWN0aW9uRXJyb3IiLCJfaGFuZGxlU3RyZWFtRmFpbHVyZSIsIl9jYWxsZWU4IiwiX2NhbGxlZTgkIiwiX2NvbnRleHQ4IiwiX3RoaXM2IiwiZm9yY2VHYXJiYWdlQ29sbGVjdGlvbk9uUmVzdGFydCIsInNraXBHYXJiYWdlQ29sbGVjdGlvbk9uTW9iaWxlRGV2aWNlcyIsImRlc3Ryb3lTdHJlYW0iLCJfcmVmMiIsInBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMiLCJfcGxheU1lZGlhU3RyZWFtSW5WaWRlb0VsZW1lbnQiLCJfY2FsbGVlOSIsIl90aGlzNyIsInBsYXlQcm9taXNlIiwiX2NhbGxlZTkkIiwiX2NvbnRleHQ5IiwiaGFzQXVkaW9UcmFjayIsImZpbHRlciIsImF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlT2ZmIiwiQ2hhbm5lbHMiLCJjcmVhdGVDaGFubmVsIiwiaW5pdGlhbGl6ZWQiLCJjaGFubmVsT3B0aW9ucyIsImRlZmF1bHRUYXJnZXRMYWciLCJfb3B0aW9ucyR0YXJnZXRMYWciLCJhcHBseVN0YXR1cyIsImFwcGx5U2Vzc2lvbkFuZFN0cmVhbVByb3BlcnRpZXNUb1ZpZGVvRWxlbWVudCIsIm1hcFN1YnNjcmliZVN0YXR1c1RvQ2hhbm5lbFN0YXR1cyIsImRlZmF1bHREaXNjb3ZlcnlVcmkiLCJCaXRyYXRlTW9kZU1hcHBpbmciLCJjb252ZXJ0Qml0cmF0ZU1vZGVUb0JpdHJhdGVNb2RlVHlwZSIsImJpdHJhdGVNb2RlIiwiRm9yY2UiLCJCaXRyYXRlU3RhdGVNYXBwaW5nIiwiY29udmVydEJpdHJhdGVTdGF0ZVRvQml0cmF0ZVN0YXRlVHlwZSIsImJpdHJhdGVTdGF0ZSIsIkRpc2NvdmVyeVNlcnZpY2UiLCJkaXNjb3ZlcnlDYWNoZUludGVydmFsIiwiX3ByZWNhY2hlQ2xvc2VzdEVuZFBvaW50RGlzY292ZXJ5IiwiZGlzY292ZXJDbG9zZXN0RW5kUG9pbnRXaXRoQ2FjaGluZyIsInByZWNhY2hlQ2xvc2VzdEVuZFBvaW50RGlzY292ZXJ5IiwiX2Rpc2NvdmVyQ2xvc2VzdEVuZFBvaW50V2l0aENhY2hpbmciLCJkaXNjb3ZlcnlTZXJ2aWNlIiwiY2FjaGVkVmFsdWUiLCJfY2FjaGUiLCJkaXNjb3ZlckNsb3Nlc3RFbmRQb2ludCIsIkVuZFBvaW50IiwiZGVmYXVsdFRpbWVvdXQiLCJfdXJpIiwiX2Rpc2NvdmVyTmVhcmJ5RW5kUG9pbnRzIiwidGltZW91dCIsImFzU3RyaW5nIiwiZW5kUG9pbnRzIiwib2siLCJ0ZXh0IiwiZGlzY292ZXJOZWFyYnlFbmRQb2ludHMiLCJfZGlzY292ZXJDbG9zZXN0RW5kUG9pbnQiLCJmYWlsZWRSZXF1ZXN0cyIsInByb3BhZ2F0ZUZhaWx1cmVJZkFsbFJlcXVlc3RzRmFpbGVkIiwiX2FyZ3MyIiwiYnVpbGREaXNjb3ZlcnlVcmwiLCJwaW5nIiwidGltZSIsIl9kaXNjb3ZlcnlVcmkiLCJkaXNjb3ZlcnlQYXJhbWV0ZXJzIiwic2VhcmNoUGFyYW1zIiwiYXBpVmVyc2lvbiIsIl90aW1lb3V0IiwiX3JvdW5kVHJpcFRpbWUiLCJfcGluZyIsImZpbmlzaGVkIiwiYnVpbGRQaW5nVXJsIiwiX3N1YnNjcmliZSIsImxvY2FsU2Vzc2lvbkRlc2NyaXB0aW9uIiwiY2xpZW50VmVyc2lvbiIsImJvZHlXaXRoT2ZmZXIiLCJib2R5V2l0aG91dE9mZmVyIiwiaHR0cFJlc3BvbnNlIiwic3Vic2NyaWJlUmVzcG9uc2UiLCJidWlsZFVybCIsImJlYXJlclRva2VuIiwiaHR0cFJvdW5kVHJpcFRpbWUiLCJzZXNzaW9uRGVzY3JpcHRpb24iLCJjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvbiIsImNyZWF0ZU9mZmVyRGVzY3JpcHRpb24iLCJtYXBIdHRwU3RhdHVzVG9TdWJzY3JpYmVTdGF0dXMiLCJjb252ZXJ0SHR0cFJlc3BvbnNlVG9TdWJzY3JpYmVSZXNwb25zZSIsIl9wdWJsaXNoIiwibWFwSHR0cFN0YXR1c1RvUHVibGlzaFN0YXR1cyIsImNvbnZlcnRIdHRwUmVzcG9uc2VUb1B1Ymxpc2hSZXNwb25zZSIsInB1Ymxpc2giLCJfeDUiLCJfeDYiLCJfeDciLCJzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlIiwic2hhcmVkU2VjcmV0IiwibWFwSHR0cFN0YXR1c1RvU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXMiLCJjb252ZXJ0SHR0cFJlc3BvbnNlVG9TZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlIiwiX3g4IiwiX3g5IiwiX2xpbWl0Qml0cmF0ZSIsIm1hcEh0dHBTdGF0dXNUb1NldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlU3RhdHVzIiwiX3gxMCIsIl94MTEiLCJfeDEyIiwiX3gxMyIsIl94MTQiLCJfYWRkSWNlQ2FuZGlkYXRlcyIsImNhbmRpZGF0ZXMiLCJkaXNjb3ZlcnlDb21wbGV0ZWQiLCJhZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2UiLCJfYXJnczYiLCJtYXBIdHRwU3RhdHVzVG9BZGRJY2VDYW5kaWRhdGVzU3RhdHVzIiwiY29udmVydEh0dHBSZXNwb25zZVRvQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlIiwiYWRkSWNlQ2FuZGlkYXRlcyIsIl94MTUiLCJfeDE2IiwiX3gxNyIsIl9kZXN0cm95U3RyZWFtIiwiZGVzdHJveVN0cmVhbVJlc3BvbnNlIiwibWFwSHR0cFN0YXR1c1RvU2V0RGVzdHJveVN0cmVhbVN0YXR1cyIsImNvbnZlcnRIdHRwUmVzcG9uc2VUb0Rlc3Ryb3lTdHJlYW1SZXNwb25zZSIsIl94MTgiLCJfeDE5IiwiX2Rlc3Ryb3lTdHJlYW1PblVubW91bnQiLCJzZW5kQmVhY29uIiwiX3gyMCIsIl94MjEiLCJwYXRoIiwicGF0aEFzQXJyYXkiLCJfY29udmVydEh0dHBSZXNwb25zZVRvU3Vic2NyaWJlUmVzcG9uc2UiLCJqc29uIiwicnRjQ29uZmlndXJhdGlvbiIsImNvbnZlcnRJUnRjQ29uZmlndXJhdGlvblRvUlRDQ29uZmlndXJhdGlvbiIsImNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2UiLCJjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UiLCJfeDIyIiwiX3gyMyIsIl9jb252ZXJ0SHR0cFJlc3BvbnNlVG9QdWJsaXNoUmVzcG9uc2UiLCJfY2FsbGVlMTAiLCJwdWJsaXNoUmVzcG9uc2UiLCJfY2FsbGVlMTAkIiwiX2NvbnRleHQxMCIsIl94MjQiLCJfeDI1IiwiYnVuZGxlUG9saWN5IiwiaWNlQ2FuZGlkYXRlUG9vbFNpemUiLCJpY2VUcmFuc3BvcnRQb2xpY3kiLCJydGNwTXV4UG9saWN5IiwiX2NvbnZlcnRIdHRwUmVzcG9uc2VUb1NldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UiLCJfY2FsbGVlMTEiLCJfY2FsbGVlMTEkIiwiX2NvbnRleHQxMSIsIl94MjYiLCJfY29udmVydEh0dHBSZXNwb25zZVRvQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlIiwiX2NhbGxlZTEyIiwiX2NhbGxlZTEyJCIsIl9jb250ZXh0MTIiLCJfeDI3IiwiX2NvbnZlcnRIdHRwUmVzcG9uc2VUb0Rlc3Ryb3lTdHJlYW1SZXNwb25zZSIsIl9jYWxsZWUxMyIsIl9jYWxsZWUxMyQiLCJfY29udGV4dDEzIiwiX3gyOCIsIlB1Ymxpc2hlclN0YXRlIiwiUHVibGlzaGVyQ29udGV4dCIsIlJlYWxUaW1lUHVibGlzaGVyIiwib25lSG91ckluTWlsbGlzZWNvbmRzIiwibWF4UmVjb25uZWN0aW5nQXR0ZW1wdHNJbnRlcnZhbEluTWlsbGlzZWNvbmRzIiwiUHVibGlzaGVyIiwiX3B1Ymxpc2hlckNvbnRleHQiLCJfcHVibGlzaGVyU3RhcnRUaW1lIiwiX3JlYWRPbmx5UHVibGlzaGluZyIsInB1Ymxpc2hpbmciLCJwdWJsaXNoZXJEaXNwb3NhYmxlcyIsIlB1Ymxpc2hpbmciLCJzZXRNZWRpYVN0cmVhbSIsIm1lZGlhVHJhY2siLCJzZW5kZXIiLCJfc2VuZGVyJHRyYWNrIiwicmVwbGFjZVRyYWNrIiwic3RyZWFtUHVibGlzaGVyIiwic3RhcnRSZWNvbm5lY3Rpb25BdHRlbXB0c1RpbWVJbk1pbGxpc2Vjb25kcyIsIk5vdEZvdW5kIiwicmVjb25uZWN0aW5nQXR0ZW1wdHNJbnRlcnZhbCIsInB1Ymxpc2hlckluaXRpYWxpemF0aW9uIiwiZ2VuZXJhdGVTY3JlZW5OYW1lIiwibWFwUHVibGlzaFN0YXR1c1RvUHVibGlzaGVyU3RhdHVzIiwiUHVibGlzaGVycyIsImNyZWF0ZVB1Ymxpc2hlciIsImljZUNhbmRpZGF0ZUFjY3VtdWxhdGlvbkludGVydmFsIiwic29mdFJlc3RhcnRJbnRlcnZhbCIsInB1Ymxpc2hlckNvbnRleHQiLCJwZWVyQ29ubmVjdGlvbkNvbnRleHQiLCJvbkxpbmUiLCJfcmVmMyIsIl9zbGljZWRUb0FycmF5IiwiX3JlZjMkIiwiY2xpZW50T2ZmZXJEaXNhYmxlZCIsInN1cHBvcnRzU2V0Q29uZmlndXJhdGlvbiIsInN1cHBvcnRzR2V0Q29uZmlndXJhdGlvbiIsIl9yZWY0IiwiYXBwbHlSdGNDb25maWd1cmF0aW9uIiwic3VibWl0Q2FuZGlkYXRlc1RpbWVvdXQiLCJjYW5jZWxEaXNjb3ZlcnkiLCJjYW5kaWRhdGUiLCJfcmVmNSIsInJldHJ5Q2FsbGJhY2siLCJyZWNvbm5lY3RQZWVyQ29ubmVjdGlvbiIsImFuc3dlciIsIl9yZWY2IiwibWFwU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXNUb1B1Ymxpc2hlclN0YXR1cyIsInJ0Y1B1Ymxpc2hNb25pdG9yIiwicnRjU3RhdGlzdGljIiwic3RhdGlzdGljcyIsIl9hcHBseVJ0Y0NvbmZpZ3VyYXRpb24iLCJvcHRpb25hbFBlZXJDb25uZWN0aW9uIiwibmV3UnRjQ29uZmlndXJhdGlvbiIsIl9vYmplY3RTcHJlYWQiLCJtYXhpbWFsTnVtYmVyT2ZQZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzIiwiYXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uIiwiX3BlZXJDb25uZWN0aW9uJGN1cnJlIiwiaXNDbGllbnRPZmZlckZsb3ciLCJyZWNvbm5lY3RQZWVyQ29ubmVjdGlvblRpbWVvdXQiLCJpY2VSZXN0YXJ0Iiwib2ZmZXIiLCJDaHVua2VkU3RyZWFtaW5nIiwiTmV0d29ya1N0YXRlcyIsIkNodW5rZWRTdHJlYW1QbGF5YmFja01vZGUiLCJDaHVua2VkU3RyZWFtIiwiY2hhbm5lbENvbnRleHQiLCJjaHVua2VkU3RyZWFtUGxheWJhY2tNb2RlIiwiX2NodW5rZWRTdHJlYW1QbGF5YmFja01vZGUiLCJvZmZlclNkcCIsIm9yaWdpblN0YXJ0VGltZSIsInBsYXllciIsIm1vbml0b3IiLCJfbW9uaXRvckRpc3Bvc2FibGVzIiwibmV3U3RyZWFtU3RhdGlzdGljcyIsIkxpdmUiLCJuZXR3b3JrU3RhdGUiLCJOZXR3b3JrTm9Tb3VyY2UiLCJjdXJyZW50VGltZSIsImR1cmF0aW9uIiwiX21vbml0b3JGYWlsdXJlQ291bnQiLCJfc3RyZWFtU3RhdGlzdGljcyIsInBhdXNlZCIsImRhdGFCdWZmZXJlZCIsIldlYlBsYXllciIsIlNoYWthUGxheWVyIiwiSGxzUGxheWVyIiwiX2hsc1BsYXllciIsIl9waGVuaXhXZWJQbGF5ZXIiLCJfc2hha2EiLCJfb3B0aW9ucyIsImxvYWRlZCIsIl9wZW5kaW5nIiwiX3BsYXllciIsIlBsYXllciIsImRhc2hNYW5pZmVzdFVybE1hdGNoIiwiaGxzTWFuaWZlc3RVcmxNYXRjaCIsIm1hbmlmZXN0VXJsIiwicGxheWxpc3RVcmwiLCJzaG91bGRVc2VOYXRpdmVIbHMiLCJwcmVmZXJOYXRpdmUiLCJtYW5pZmVzdFVSSSIsIl92aWRlb0VsZW1lbnQiLCJfa2luZCIsIl9zdHJlYW1JZCIsIl9tYW5pZmVzdFVSSSIsImVuY29kZVVSSSIsInJlcGxhY2UiLCJobHNQbGF5ZXIiLCJlbmFibGVXb3JrZXIiLCJtYXhCdWZmZXJMZW5ndGgiLCJiYWNrQnVmZmVyTGVuZ3RoIiwibGl2ZVN5bmNEdXJhdGlvbiIsImxpdmVEdXJhdGlvbkluZmluaXR5IiwibGl2ZU1heExhdGVuY3lEdXJhdGlvbiIsIkluZmluaXR5IiwiaGlnaEJ1ZmZlcldhdGNoZG9nUGVyaW9kIiwibG9hZFNvdXJjZSIsImF0dGFjaE1lZGlhIiwiY2FuUGxheVR5cGUiLCJtZWRpYSIsIm9mZnNldFdpZHRoIiwib2Zmc2V0SGVpZ2h0IiwiTmV0d29ya0lkbGUiLCJidWZmZXJlZCIsImVuZCIsInN0cmVhbUNvbnRyb2xsZXIiLCJOZXR3b3JrTG9hZGluZyIsIk5ldHdvcmtFbXB0eSIsInRydWVDdXJyZW50VGltZSIsIm1heCIsImRlc3Ryb3kiLCJJbnNlcnRhYmxlU3RyZWFtcyIsImRlZmF1bHRTdHJlYW1TZXR1cFRpbWVvdXQiLCJSZWFsVGltZVN0cmVhbSIsInN0cmVhbVRyYW5zZm9ybUNvbnRleHQiLCJtZWRpYVN0cmVhbVByb21pc2UiLCJvblRyYWNrRGlzYWJsZWQiLCJzdHJlYW1zIiwidHJhY2tMaXN0ZW5lciIsIm1hcFNldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzVG9DaGFubmVsU3RhdHVzIiwiX0luc2VydGFibGVTdHJlYW1zJGFwIiwiYXBwbHlFbmNvZGVkU3RyZWFtVHJhbnNmb3JtYXRpb24iLCJfSW5zZXJ0YWJsZVN0cmVhbXMkYXAyIiwiYXBwbHlJbnNlcnRhYmxlU3RyZWFtVHJhbnNmb3JtYXRpb24iLCJ0cmFuc2Zvcm1lZFN0cmVhbSIsInJ0Y0Nvbm5lY3Rpb25Nb25pdG9yIiwicnRjQ29ubmVjdGlvbk1vbml0b3JTdGF0aXN0aWNTdWJzY3JpcHRpb24iLCJydGNWaWRlb1N0YXRpc3RpYyIsInJ0Y0F1ZGlvU3RhdGlzdGljIiwiYXVkaW9UcmFja0ZhaWxlZCIsInZpZGVvVHJhY2tGYWlsZWQiLCJfbW9uaXRvcmVkU3RhdGlzdGljcyIsImVzdGltYXRlZEJhbmR3aWR0aCIsInBsYXlUaW1lIiwic2hha2EiLCJwbGF5ZXJPcHRpb25zIiwiYWJyIiwiZGVmYXVsdEJhbmR3aWR0aEVzdGltYXRlIiwibWFuaWZlc3QiLCJyZXRyeVBhcmFtZXRlcnMiLCJzdHJlYW1pbmciLCJsaXZlU3luY1BhbmljVGhyZXNob2xkIiwiYnVmZmVyaW5nR29hbCIsImJ1ZmZlckJlaGluZCIsIm1heEF0dGVtcHRzIiwiYmFja29mZkZhY3RvciIsImxvYWRQbGF5ZXIiLCJ1bmxvYWQiLCJwbGF5ZXJDb25maWciLCJjb25maWd1cmUiLCJsb2FkIiwiY29kZSIsInRva2VuQ2FwYWJpbGl0aWVzIiwiaGFzU3RyZWFtaW5nIiwiaGFzT25EZW1hbmQiLCJPbmREZW1hbmQiLCJiYW5kd2lkdGhUb1N0YXJ0QXQiLCJtaW5UaW1lQmVmb3JlTmV4dFJlbG9hZCIsInBoZW5peFdlYlBsYXllciIsImVycm9yT2JqZWN0IiwiY2FuUmVsb2FkIiwic2V2ZXJpdHkiLCJlcnJvcnMiLCJSRUNPVkVSQUJMRSIsInJlbG9hZElmQWJsZSIsIl90aGlzJF92aWRlb0VsZW1lbnQkYiIsIl90aGlzJF92aWRlb0VsZW1lbnQkYjIiLCJpc05hdGl2ZSIsImRlbGl2ZXJ5VHlwZSIsImhhc0VsYXBzZWRNaW5UaW1lU2luY2VMYXN0UmVsb2FkIiwiX2xhc3RSZWxvYWRUaW1lIiwicmVsb2FkIiwibW9kZSIsIlN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIiLCJTa2lwRnJhbWUiLCJyZWNlaXZlcnMiLCJyZWNlaXZlciIsInJlY2VpdmUiLCJ3b3JrZXIiLCJXb3JrZXIiLCJpbXBvcnQiLCJtZXRhIiwib25tZXNzYWdlIiwiZXZlbnQiLCJjaHVuayIsInBvc3RNZXNzYWdlIiwiZm9yY2VJbnZhbGlkRnJhbWUiLCJ0cmFuc2Zvcm0iLCJ0ZXJtaW5hdGUiLCJlbmNvZGVkU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2siLCJjb250cm9sbGVyIiwic3Vycm9nYXRlIiwiZ2V0SW52YWxpZFN1cnJvZ2F0ZVZpZGVvSUZyYW1lIiwiZ2V0SW52YWxpZFN1cnJvZ2F0ZVZpZGVvUEZyYW1lIiwiZ2V0U3Vycm9nYXRlVmlkZW9JRnJhbWVQZXJDb2RlYyIsImdldFN1cnJvZ2F0ZVZpZGVvUEZyYW1lUGVyQ29kZWMiLCJlbnF1ZXVlIiwidHJhbnNmb3JtZXIiLCJUcmFuc2Zvcm1TdHJlYW0iLCJyZWNlaXZlclN0cmVhbXMiLCJzb3VyY2UiLCJyZWFkYWJsZSIsInNpbmsiLCJ3cml0YWJsZSIsInBpcGVUaHJvdWdoIiwicGlwZVRvIiwiTWVkaWFTdHJlYW0iLCJhdWRpb1B1bXBlciIsIkF1ZGlvIiwiYXBwZW5kQ2hpbGQiLCJyZW1vdmVDaGlsZCIsImdldEludmFsaWRTdXJyb2dhdGVBdWRpb0RhdGEiLCJnZXRTdXJyb2dhdGVBdWRpb1NpbGVudFBlckNvZGVjIiwiaW5zZXJ0YWJsZVN0cmVhbVRyYW5zZm9ybUNhbGxiYWNrIiwidmlkZW9UcmFjayIsInByb2Nlc3NvciIsImdlbmVyYXRvciIsInJlbW92ZVRyYWNrIiwiYXVkaW9UcmFjayIsIlN5bWJvbCIsInRvVXBwZXJDYXNlIiwiX2R1bW15QXVkaW9TaWxlbnRQZXJDb2RlYyIsIk9QVVMiLCJidWZmZXIiLCJfc2luZ2xlWmVyb0J5dGUiLCJfdXNlVXBkYXRlU3Vycm9nYXRlODJ4ODJQRnJhbWVGcmFtZU51bWJlciIsIl9zdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyIiwiX3N1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXJSZXNldCIsIl9kdW1teTgyeDgySDI2NCIsIklGcmFtZSIsIl9kdW1teTJ4MlZpZGVvSUZyYW1lUGVyQ29kZWMiLCJIMjY0IiwiVlA4IiwiVlA5IiwiX2lzQW5kcm9pZENocm9tZSIsImdldFN1cnJvZ2F0ZTgyeDgyUEZyYW1lQW5kVXBkYXRlRnJhbWVOdW1iZXIiLCJfZHVtbXkyeDJWaWRlb1BGcmFtZVBlckNvZGVjIiwic2F2ZWRTdXJyb2dhdGVGcmFtZU51bWJlciIsImJpdE1hc2sxIiwiYml0TWFzazIiLCJiaXRTaGlmdFJpZ2h0QnkxIiwiYml0U2hpZnRMZWZ0Qnk3IiwiYnl0ZTEiLCJieXRlMiIsImNvcHlPZkR1bW15UEZyYW1lcyIsIlBGcmFtZSIsImJ1ZmZlckluZGV4IiwiX2R1bW15ODJ4ODJIMjY0UEZyYW1lRnJhbWVOdW1iZXJJbmRleCIsIl9TdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyIiwiaXNBbmRyb2lkIiwiVWludDhBcnJheSIsIl9pc01vYmlsZUNocm9tZSIsIl9pc1NhZmFyaSIsIl9fQlVJTERfVkVSU0lPTl9fIiwiX2RlZmF1bHRWZXJzaW9uIiwiVGVsZW1ldHJ5U2VydmljZSIsIl90ZWxlbWV0cnlTZXJ2aWNlIiwidmFsdWVPZiIsImxvZ1JlY29yZCIsIl9sb2dzIiwic2VuZExvZ3NJZkFibGUiLCJsb2dNZXNzYWdlcyIsIl9zZW5kTG9nc0lmQWJsZSIsIm51bWJlck9mTG9nc1RvU2VuZCIsInNpemVPZkxvZ3NUb1NlbmQiLCJnZXRJdGVtU2l6ZSIsImdldExvZ1NpemUiLCJzdW0iLCJfZHVyYXRpb24iLCJpc05lZ2F0aXZlIiwiYWJzIiwib2Zmc2V0IiwibWlsbGlzZWNvbmRzIiwic2Vjb25kcyIsIm1pbnV0ZXMiLCJob3VycyIsInBhcnRzIiwiU3RyaW5nIiwicGFkU3RhcnQiLCJ0YXJnZXRMZW5ndGgiLCJwYWRTdHJpbmciLCJyZXBlYXQiLCJkZWZhdWx0QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCIsImRlZmF1bHRNaW5CYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kIiwiZGVmYXVsdE1heEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQiLCJiYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kIiwibWluQmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCIsIm1heEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQiLCJfYmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCIsIl9taW5CYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kIiwiX21heEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQiLCJiYWNrb2ZmSW50ZXJ2YWxJblNlY29uZHMiLCJyYW5kb21pemF0aW9uIiwiZXhwb25lbnRpYWxCYWNrb2ZmIiwiZXhwb25lbnRpYWxCYWNrb2ZmV2l0aFJhbmRvbWl6YXRpb24iLCJleHBvbmVudGlhbEJhY2tvZmZXaXRoUmFuZG9taXphdGlvbkluTWlsbGlzZWNvbmQiLCJtaW4iLCJvdGhlciIsImFwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yIiwiX25ldHdvcmtNb25pdG9yIiwicmVjb3JkRm9yZWdyb3VuZENoYW5nZSIsInJlY29yZE5ldHdvcmtSVFRVcGRhdGUiLCJyZWNvcmROZXR3b3JrVHlwZUNoYW5nZVVwZGF0ZSIsImRvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5IiwicmVjb3JkTmV0d29ya0Rvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5VXBkYXRlIiwidGltZVNpbmNlTGFzdENoYW5nZSIsIm5ld1JUVCIsIm9sZFJ0dCIsIl9sYXN0TmV0d29ya1N0YXRpc3RpY3MiLCJuZXdOZXR3b3JrVHlwZSIsIm9sZE5ldHdvcmtUeXBlIiwibmV3Q2FwYWNpdHkiLCJvbGRDYXBhY2l0eSIsImZsb2F0IiwiY2hhbm5lbFN0YXJ0VGltZSIsIl9zdGFydFJlY29yZGluZ0ZpcnN0RnJhbWUiLCJfbGlzdGVuVG9GaXJzdFRpbWUiLCJjYWxsVGltZVRvRmlyc3RGcmFtZSIsIl9jbGVhclRpbWVUb0ZpcnN0RnJhbWVMaXN0ZW5lciIsIl9saXN0ZW5Gb3JTdGFsbCIsIm9uU3RhbGwiLCJfbGlzdGVuRm9yQ29udGludWF0aW9uIiwib25Db250aW51YXRpb24iLCJfY2xlYXJSZWJ1ZmZlcmluZ0xpc3RlbmVyIiwicHVzaFRpbWVUb0ZpcnN0RnJhbWUiLCJwdXNoQ2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZSIsIl90aW1lVG9GaXJzdEZyYW1lIiwiZHVyYXRpb25TaW5jZVBhZ2VMb2FkIiwiX2NoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWUiLCJfdmlkZW9TdGFsbGVkIiwiYnVmZmVyTGVuZ3RoIiwiaGFzTm90UHJvZ3Jlc3NlZFNpbmNlTGFzdFByb2dyZXNzRXZlbnQiLCJfbGFzdFByb2dyZXNzIiwidGltZVNpbmNlU3RvcCIsIm5ld1Jlc29sdXRpb24iLCJfdmlkZW9SZXNvbHV0aW9uIl0sInNvdXJjZVJvb3QiOiIifQ==