UNPKG

26.3 kBJavaScriptView Raw
1"use strict";
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports["default"] = void 0;
7
8var _react = _interopRequireWildcard(require("react"));
9
10var _propTypes = _interopRequireDefault(require("prop-types"));
11
12var _reactJsonTree = _interopRequireDefault(require("react-json-tree"));
13
14var _LogMonitorEntryAction = _interopRequireDefault(require("./LogMonitorEntryAction"));
15
16function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
17
18function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }
19
20function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
21
22function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
23
24function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
25
26function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
27
28function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
29
30function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
31
32function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
33
34function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
35
36function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
37
38function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
39
40function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
41
42function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
43
44function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
45
46function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
47
48function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
49
50function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
51
52function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
53
54function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
55
56function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }
57
58function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
59
60function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
61
62var styles = {
63 entry: {
64 display: 'block',
65 WebkitUserSelect: 'none'
66 },
67 root: {
68 marginLeft: 0
69 }
70};
71
72var getDeepItem = function getDeepItem(data, path) {
73 return path.reduce(function (obj, key) {
74 return obj && obj[key];
75 }, data);
76};
77
78var dataIsEqual = function dataIsEqual(data, previousData, keyPath) {
79 var path = _toConsumableArray(keyPath).reverse().slice(1);
80
81 return getDeepItem(data, path) === getDeepItem(previousData, path);
82};
83
84var LogMonitorEntry = /*#__PURE__*/function (_PureComponent) {
85 _inherits(LogMonitorEntry, _PureComponent);
86
87 var _super = _createSuper(LogMonitorEntry);
88
89 function LogMonitorEntry() {
90 var _this;
91
92 _classCallCheck(this, LogMonitorEntry);
93
94 for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
95 args[_key] = arguments[_key];
96 }
97
98 _this = _super.call.apply(_super, [this].concat(args));
99
100 _defineProperty(_assertThisInitialized(_this), "handleActionClick", function (e) {
101 var _this$props = _this.props,
102 actionId = _this$props.actionId,
103 onActionClick = _this$props.onActionClick,
104 onActionShiftClick = _this$props.onActionShiftClick;
105
106 if (actionId > 0) {
107 if (e.shiftKey) {
108 onActionShiftClick(actionId);
109 } else {
110 onActionClick(actionId);
111 }
112 }
113 });
114
115 _defineProperty(_assertThisInitialized(_this), "shouldExpandNode", function (keyPath, data, level) {
116 return _this.props.expandStateRoot && level === 0;
117 });
118
119 return _this;
120 }
121
122 _createClass(LogMonitorEntry, [{
123 key: "printState",
124 value: function printState(state, error) {
125 var _this2 = this;
126
127 var errorText = error;
128
129 if (!errorText) {
130 try {
131 var data = this.props.select(state);
132 var theme;
133
134 if (this.props.markStateDiff) {
135 var previousData = typeof this.props.previousState !== 'undefined' ? this.props.select(this.props.previousState) : undefined;
136
137 var getValueStyle = function getValueStyle(_ref, nodeType, keyPath) {
138 var style = _ref.style;
139 return {
140 style: _objectSpread(_objectSpread({}, style), {}, {
141 backgroundColor: dataIsEqual(data, previousData, keyPath) ? 'transparent' : _this2.props.theme.base01
142 })
143 };
144 };
145
146 var getNestedNodeStyle = function getNestedNodeStyle(_ref2, keyPath) {
147 var style = _ref2.style;
148 return {
149 style: _objectSpread(_objectSpread({}, style), keyPath.length > 1 ? {} : styles.root)
150 };
151 };
152
153 theme = {
154 extend: this.props.theme,
155 value: getValueStyle,
156 nestedNode: getNestedNodeStyle
157 };
158 } else {
159 theme = this.props.theme;
160 }
161
162 return /*#__PURE__*/_react["default"].createElement(_reactJsonTree["default"], {
163 theme: theme,
164 data: data,
165 invertTheme: false,
166 keyPath: ['state'],
167 shouldExpandNode: this.shouldExpandNode
168 });
169 } catch (err) {
170 errorText = 'Error selecting state.';
171 }
172 }
173
174 return /*#__PURE__*/_react["default"].createElement("div", {
175 style: {
176 color: this.props.theme.base08,
177 paddingTop: 20,
178 paddingLeft: 30,
179 paddingRight: 30,
180 paddingBottom: 35
181 }
182 }, errorText);
183 }
184 }, {
185 key: "render",
186 value: function render() {
187 var _this$props2 = this.props,
188 actionId = _this$props2.actionId,
189 error = _this$props2.error,
190 action = _this$props2.action,
191 state = _this$props2.state,
192 collapsed = _this$props2.collapsed,
193 selected = _this$props2.selected,
194 inFuture = _this$props2.inFuture;
195 var styleEntry = {
196 opacity: collapsed ? 0.5 : 1,
197 cursor: actionId > 0 ? 'pointer' : 'default'
198 };
199 return /*#__PURE__*/_react["default"].createElement("div", {
200 style: {
201 opacity: selected ? 0.4 : inFuture ? 0.6 : 1,
202 // eslint-disable-line no-nested-ternary
203 textDecoration: collapsed ? 'line-through' : 'none',
204 color: this.props.theme.base06
205 }
206 }, /*#__PURE__*/_react["default"].createElement(_LogMonitorEntryAction["default"], {
207 theme: this.props.theme,
208 collapsed: collapsed,
209 action: action,
210 expandActionRoot: this.props.expandActionRoot,
211 onClick: this.handleActionClick,
212 style: _objectSpread(_objectSpread({}, styles.entry), styleEntry)
213 }), !collapsed && /*#__PURE__*/_react["default"].createElement("div", {
214 style: {
215 paddingLeft: 16
216 }
217 }, this.printState(state, error)));
218 }
219 }]);
220
221 return LogMonitorEntry;
222}(_react.PureComponent);
223
224exports["default"] = LogMonitorEntry;
225
226_defineProperty(LogMonitorEntry, "propTypes", {
227 state: _propTypes["default"].object.isRequired,
228 action: _propTypes["default"].object.isRequired,
229 actionId: _propTypes["default"].number.isRequired,
230 select: _propTypes["default"].func.isRequired,
231 inFuture: _propTypes["default"].bool,
232 error: _propTypes["default"].string,
233 onActionClick: _propTypes["default"].func.isRequired,
234 onActionShiftClick: _propTypes["default"].func.isRequired,
235 collapsed: _propTypes["default"].bool,
236 selected: _propTypes["default"].bool,
237 expandActionRoot: _propTypes["default"].bool,
238 expandStateRoot: _propTypes["default"].bool,
239 previousState: _propTypes["default"].object
240});
241//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9Mb2dNb25pdG9yRW50cnkudHN4Il0sIm5hbWVzIjpbInN0eWxlcyIsImVudHJ5IiwiZGlzcGxheSIsIldlYmtpdFVzZXJTZWxlY3QiLCJyb290IiwibWFyZ2luTGVmdCIsImdldERlZXBJdGVtIiwiZGF0YSIsInBhdGgiLCJyZWR1Y2UiLCJvYmoiLCJrZXkiLCJkYXRhSXNFcXVhbCIsInByZXZpb3VzRGF0YSIsImtleVBhdGgiLCJyZXZlcnNlIiwic2xpY2UiLCJMb2dNb25pdG9yRW50cnkiLCJlIiwicHJvcHMiLCJhY3Rpb25JZCIsIm9uQWN0aW9uQ2xpY2siLCJvbkFjdGlvblNoaWZ0Q2xpY2siLCJzaGlmdEtleSIsImxldmVsIiwiZXhwYW5kU3RhdGVSb290Iiwic3RhdGUiLCJlcnJvciIsImVycm9yVGV4dCIsInNlbGVjdCIsInRoZW1lIiwibWFya1N0YXRlRGlmZiIsInByZXZpb3VzU3RhdGUiLCJ1bmRlZmluZWQiLCJnZXRWYWx1ZVN0eWxlIiwibm9kZVR5cGUiLCJzdHlsZSIsImJhY2tncm91bmRDb2xvciIsImJhc2UwMSIsImdldE5lc3RlZE5vZGVTdHlsZSIsImxlbmd0aCIsImV4dGVuZCIsInZhbHVlIiwibmVzdGVkTm9kZSIsInNob3VsZEV4cGFuZE5vZGUiLCJlcnIiLCJjb2xvciIsImJhc2UwOCIsInBhZGRpbmdUb3AiLCJwYWRkaW5nTGVmdCIsInBhZGRpbmdSaWdodCIsInBhZGRpbmdCb3R0b20iLCJhY3Rpb24iLCJjb2xsYXBzZWQiLCJzZWxlY3RlZCIsImluRnV0dXJlIiwic3R5bGVFbnRyeSIsIm9wYWNpdHkiLCJjdXJzb3IiLCJ0ZXh0RGVjb3JhdGlvbiIsImJhc2UwNiIsImV4cGFuZEFjdGlvblJvb3QiLCJoYW5kbGVBY3Rpb25DbGljayIsInByaW50U3RhdGUiLCJQdXJlQ29tcG9uZW50IiwiUHJvcFR5cGVzIiwib2JqZWN0IiwiaXNSZXF1aXJlZCIsIm51bWJlciIsImZ1bmMiLCJib29sIiwic3RyaW5nIl0sIm1h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QUFaLFNBQWtDLEtBQUtjLFVBQUwsQ0FBZ0JyQyxLQUFoQixFQUF1QkMsS0FBdkIsQ0FBbEMsQ0FoQkosQ0FERjtBQXFCRDs7OztFQTVJT3FDLG9COzs7O2dCQUhXL0MsZSxlQUlBO0FBQ2pCUyxFQUFBQSxLQUFLLEVBQUV1QyxzQkFBVUMsTUFBVixDQUFpQkMsVUFEUDtBQUVqQmYsRUFBQUEsTUFBTSxFQUFFYSxzQkFBVUMsTUFBVixDQUFpQkMsVUFGUjtBQUdqQi9DLEVBQUFBLFFBQVEsRUFBRTZDLHNCQUFVRyxNQUFWLENBQWlCRCxVQUhWO0FBSWpCdEMsRUFBQUEsTUFBTSxFQUFFb0Msc0JBQVVJLElBQVYsQ0FBZUYsVUFKTjtBQUtqQlosRUFBQUEsUUFBUSxFQUFFVSxzQkFBVUssSUFMSDtBQU1qQjNDLEVBQUFBLEtBQUssRUFBRXNDLHNCQUFVTSxNQU5BO0FBT2pCbEQsRUFBQUEsYUFBYSxFQUFFNEMsc0JBQVVJLElBQVYsQ0FBZUYsVUFQYjtBQVFqQjdDLEVBQUFBLGtCQUFrQixFQUFFMkMsc0JBQVVJLElBQVYsQ0FBZUYsVUFSbEI7QUFTakJkLEVBQUFBLFNBQVMsRUFBRVksc0JBQVVLLElBVEo7QUFVakJoQixFQUFBQSxRQUFRLEVBQUVXLHNCQUFVSyxJQVZIO0FBV2pCVCxFQUFBQSxnQkFBZ0IsRUFBRUksc0JBQVVLLElBWFg7QUFZakI3QyxFQUFBQSxlQUFlLEVBQUV3QyxzQkFBVUssSUFaVjtBQWFqQnRDLEVBQUFBLGFBQWEsRUFBRWlDLHNCQUFVQztBQWJSLEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgQ1NTUHJvcGVydGllcywgTW91c2VFdmVudEhhbmRsZXIsIFB1cmVDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IEpTT05UcmVlLCB7IFN0eWxpbmdWYWx1ZSB9IGZyb20gJ3JlYWN0LWpzb24tdHJlZSc7XG5pbXBvcnQgeyBCYXNlMTZUaGVtZSB9IGZyb20gJ3JlZHV4LWRldnRvb2xzLXRoZW1lcyc7XG5pbXBvcnQgeyBBY3Rpb24gfSBmcm9tICdyZWR1eCc7XG5pbXBvcnQgTG9nTW9uaXRvckVudHJ5QWN0aW9uIGZyb20gJy4vTG9nTW9uaXRvckVudHJ5QWN0aW9uJztcblxuY29uc3Qgc3R5bGVzOiB7IGVudHJ5OiBDU1NQcm9wZXJ0aWVzOyByb290OiBDU1NQcm9wZXJ0aWVzIH0gPSB7XG4gIGVudHJ5OiB7XG4gICAgZGlzcGxheTogJ2Jsb2NrJyxcbiAgICBXZWJraXRVc2VyU2VsZWN0OiAnbm9uZScsXG4gIH0sXG5cbiAgcm9vdDoge1xuICAgIG1hcmdpbkxlZnQ6IDAsXG4gIH0sXG59O1xuXG5jb25zdCBnZXREZWVwSXRlbSA9IChkYXRhOiBhbnksIHBhdGg6IChzdHJpbmcgfCBudW1iZXIpW10pID0+XG4gIHBhdGgucmVkdWNlKChvYmosIGtleSkgPT4gb2JqICYmIG9ialtrZXldLCBkYXRhKTtcbmNvbnN0IGRhdGFJc0VxdWFsID0gKFxuICBkYXRhOiBhbnksXG4gIHByZXZpb3VzRGF0YTogdW5rbm93bixcbiAga2V5UGF0aDogKHN0cmluZyB8IG51bWJlcilbXVxuKSA9PiB7XG4gIGNvbnN0IHBhdGggPSBbLi4ua2V5UGF0aF0ucmV2ZXJzZSgpLnNsaWNlKDEpO1xuXG4gIHJldHVybiBnZXREZWVwSXRlbShkYXRhLCBwYXRoKSA9PT0gZ2V0RGVlcEl0ZW0ocHJldmlvdXNEYXRhLCBwYXRoKTtcbn07XG5cbmludGVyZmFjZSBQcm9wczxTLCBBIGV4dGVuZHMgQWN0aW9uPHVua25vd24+PiB7XG4gIHRoZW1lOiBCYXNlMTZUaGVtZTtcbiAgc2VsZWN0OiAoc3RhdGU6IGFueSkgPT4gdW5rbm93bjtcbiAgYWN0aW9uOiBBO1xuICBhY3Rpb25JZDogbnVtYmVyO1xuICBzdGF0ZTogUztcbiAgcHJldmlvdXNTdGF0ZTogUyB8IHVuZGVmaW5lZDtcbiAgY29sbGFwc2VkOiBib29sZWFuO1xuICBpbkZ1dHVyZTogYm9vbGVhbjtcbiAgc2VsZWN0ZWQ6IGJvb2xlYW47XG4gIGVycm9yOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGV4cGFuZEFjdGlvblJvb3Q6IGJvb2xlYW47XG4gIGV4cGFuZFN0YXRlUm9vdDogYm9vbGVhbjtcbiAgbWFya1N0YXRlRGlmZjogYm9vbGVhbjtcbiAgb25BY3Rpb25DbGljazogKGlkOiBudW1iZXIpID0+IHZvaWQ7XG4gIG9uQWN0aW9uU2hpZnRDbGljazogKGlkOiBudW1iZXIpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExvZ01vbml0b3JFbnRyeTxcbiAgUyxcbiAgQSBleHRlbmRzIEFjdGlvbjx1bmtub3duPlxuPiBleHRlbmRzIFB1cmVDb21wb25lbnQ8UHJvcHM8UywgQT4+IHtcbiAgc3RhdGljIHByb3BUeXBlcyA9IHtcbiAgICBzdGF0ZTogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLFxuICAgIGFjdGlvbjogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLFxuICAgIGFjdGlvbklkOiBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsXG4gICAgc2VsZWN0OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIGluRnV0dXJlOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBlcnJvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBvbkFjdGlvbkNsaWNrOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIG9uQWN0aW9uU2hpZnRDbGljazogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBjb2xsYXBzZWQ6IFByb3BUeXBlcy5ib29sLFxuICAgIHNlbGVjdGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBleHBhbmRBY3Rpb25Sb290OiBQcm9wVHlwZXMuYm9vbCxcbiAgICBleHBhbmRTdGF0ZVJvb3Q6IFByb3BUeXBlcy5ib29sLFxuICAgIHByZXZpb3VzU3RhdGU6IFByb3BUeXBlcy5vYmplY3QsXG4gIH07XG5cbiAgcHJpbnRTdGF0ZShzdGF0ZTogUywgZXJyb3I6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgIGxldCBlcnJvclRleHQgPSBlcnJvcjtcbiAgICBpZiAoIWVycm9yVGV4dCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMucHJvcHMuc2VsZWN0KHN0YXRlKTtcbiAgICAgICAgbGV0IHRoZW1lO1xuXG4gICAgICAgIGlmICh0aGlzLnByb3BzLm1hcmtTdGF0ZURpZmYpIHtcbiAgICAgICAgICBjb25zdCBwcmV2aW91c0RhdGEgPVxuICAgICAgICAgICAgdHlwZW9mIHRoaXMucHJvcHMucHJldmlvdXNTdGF0ZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAgICAgICAgPyB0aGlzLnByb3BzLnNlbGVjdCh0aGlzLnByb3BzLnByZXZpb3VzU3RhdGUpXG4gICAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgICAgIGNvbnN0IGdldFZhbHVlU3R5bGU6IFN0eWxpbmdWYWx1ZSA9IChcbiAgICAgICAgICAgIHsgc3R5bGUgfSxcbiAgICAgICAgICAgIG5vZGVUeXBlLFxuICAgICAgICAgICAga2V5UGF0aFxuICAgICAgICAgICkgPT4gKHtcbiAgICAgICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgICAgIC4uLnN0eWxlLFxuICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IGRhdGFJc0VxdWFsKGRhdGEsIHByZXZpb3VzRGF0YSwga2V5UGF0aClcbiAgICAgICAgICAgICAgICA/ICd0cmFuc3BhcmVudCdcbiAgICAgICAgICAgICAgICA6IHRoaXMucHJvcHMudGhlbWUuYmFzZTAxLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBjb25zdCBnZXROZXN0ZWROb2RlU3R5bGU6IFN0eWxpbmdWYWx1ZSA9ICh7IHN0eWxlIH0sIGtleVBhdGgpID0+ICh7XG4gICAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgICAuLi5zdHlsZSxcbiAgICAgICAgICAgICAgLi4uKGtleVBhdGgubGVuZ3RoID4gMSA/IHt9IDogc3R5bGVzLnJvb3QpLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGVtZSA9IHtcbiAgICAgICAgICAgIGV4dGVuZDogdGhpcy5wcm9wcy50aGVtZSxcbiAgICAgICAgICAgIHZhbHVlOiBnZXRWYWx1ZVN0eWxlLFxuICAgICAgICAgICAgbmVzdGVkTm9kZTogZ2V0TmVzdGVkTm9kZVN0eWxlLFxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhlbWUgPSB0aGlzLnByb3BzLnRoZW1lO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8SlNPTlRyZWVcbiAgICAgICAgICAgIHRoZW1lPXt0aGVtZX1cbiAgICAgICAgICAgIGRhdGE9e2RhdGF9XG4gICAgICAgICAgICBpbnZlcnRUaGVtZT17ZmFsc2V9XG4gICAgICAgICAgICBrZXlQYXRoPXtbJ3N0YXRlJ119XG4gICAgICAgICAgICBzaG91bGRFeHBhbmROb2RlPXt0aGlzLnNob3VsZEV4cGFuZE5vZGV9XG4gICAgICAgICAgLz5cbiAgICAgICAgKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBlcnJvclRleHQgPSAnRXJyb3Igc2VsZWN0aW5nIHN0YXRlLic7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICBjb2xvcjogdGhpcy5wcm9wcy50aGVtZS5iYXNlMDgsXG4gICAgICAgICAgcGFkZGluZ1RvcDogMjAsXG4gICAgICAgICAgcGFkZGluZ0xlZnQ6IDMwLFxuICAgICAgICAgIHBhZGRpbmdSaWdodDogMzAsXG4gICAgICAgICAgcGFkZGluZ0JvdHRvbTogMzUsXG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIHtlcnJvclRleHR9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG5cbiAgaGFuZGxlQWN0aW9uQ2xpY2s6IE1vdXNlRXZlbnRIYW5kbGVyPEhUTUxEaXZFbGVtZW50PiA9IChlKSA9PiB7XG4gICAgY29uc3QgeyBhY3Rpb25JZCwgb25BY3Rpb25DbGljaywgb25BY3Rpb25TaGlmdENsaWNrIH0gPSB0aGlzLnByb3BzO1xuICAgIGlmIChhY3Rpb25JZCA+IDApIHtcbiAgICAgIGlmIChlLnNoaWZ0S2V5KSB7XG4gICAgICAgIG9uQWN0aW9uU2hpZnRDbGljayhhY3Rpb25JZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvbkFjdGlvbkNsaWNrKGFjdGlvbklkKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgc2hvdWxkRXhwYW5kTm9kZSA9IChcbiAgICBrZXlQYXRoOiAoc3RyaW5nIHwgbnVtYmVyKVtdLFxuICAgIGRhdGE6IGFueSxcbiAgICBsZXZlbDogbnVtYmVyXG4gICkgPT4ge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmV4cGFuZFN0YXRlUm9vdCAmJiBsZXZlbCA9PT0gMDtcbiAgfTtcblxuICByZW5kZXIoKSB7XG4gICAgY29uc3Qge1xuICAgICAgYWN0aW9uSWQsXG4gICAgICBlcnJvcixcbiAgICAgIGFjdGlvbixcbiAgICAgIHN0YXRlLFxuICAgICAgY29sbGFwc2VkLFxuICAgICAgc2VsZWN0ZWQsXG4gICAgICBpbkZ1dHVyZSxcbiAgICB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBzdHlsZUVudHJ5ID0ge1xuICAgICAgb3BhY2l0eTogY29sbGFwc2VkID8gMC41IDogMSxcbiAgICAgIGN1cnNvcjogYWN0aW9uSWQgPiAwID8gJ3BvaW50ZXInIDogJ2RlZmF1bHQnLFxuICAgIH07XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdlxuICAgICAgICBzdHlsZT17e1xuICAgICAgICAgIG9wYWNpdHk6IHNlbGVjdGVkID8gMC40IDogaW5GdXR1cmUgPyAwLjYgOiAxLCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5lc3RlZC10ZXJuYXJ5XG4gICAgICAgICAgdGV4dERlY29yYXRpb246IGNvbGxhcHNlZCA/ICdsaW5lLXRocm91Z2gnIDogJ25vbmUnLFxuICAgICAgICAgIGNvbG9yOiB0aGlzLnByb3BzLnRoZW1lLmJhc2UwNixcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAgPExvZ01vbml0b3JFbnRyeUFjdGlvblxuICAgICAgICAgIHRoZW1lPXt0aGlzLnByb3BzLnRoZW1lfVxuICAgICAgICAgIGNvbGxhcHNlZD17Y29sbGFwc2VkfVxuICAgICAgICAgIGFjdGlvbj17YWN0aW9ufVxuICAgICAgICAgIGV4cGFuZEFjdGlvblJvb3Q9e3RoaXMucHJvcHMuZXhwYW5kQWN0aW9uUm9vdH1cbiAgICAgICAgICBvbkNsaWNrPXt0aGlzLmhhbmRsZUFjdGlvbkNsaWNrfVxuICAgICAgICAgIHN0eWxlPXt7IC4uLnN0eWxlcy5lbnRyeSwgLi4uc3R5bGVFbnRyeSB9fVxuICAgICAgICAvPlxuICAgICAgICB7IWNvbGxhcHNlZCAmJiAoXG4gICAgICAgICAgPGRpdiBzdHlsZT17eyBwYWRkaW5nTGVmdDogMTYgfX0+e3RoaXMucHJpbnRTdGF0ZShzdGF0ZSwgZXJyb3IpfTwvZGl2PlxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuIl19
\No newline at end of file