jderobot-ide-interface 0.3.16 → 0.3.18

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.
@@ -0,0 +1,13 @@
1
+ (this["webpackChunkjderobot_ide_interface"] = this["webpackChunkjderobot_ide_interface"] || []).push([["node_fs_promises"],{
2
+
3
+ /***/ "node:fs/promises"
4
+ /*!************************!*\
5
+ !*** node:fs/promises ***!
6
+ \************************/
7
+ () {
8
+
9
+ throw new Error("Module build failed: UnhandledSchemeError: Reading from \"node:fs/promises\" is not handled by plugins (Unhandled scheme).\nWebpack supports \"data:\" and \"file:\" URIs by default.\nYou may need an additional plugin to handle \"node:\" URIs.\n at /home/javizqh/jderobot/jderobot-ide-interface/node_modules/webpack/lib/NormalModule.js:1577:13\n at Hook.eval [as callAsync] (eval at create (/home/javizqh/jderobot/jderobot-ide-interface/node_modules/tapable/lib/HookCodeFactory.js:31:10), <anonymous>:6:1)\n at Hook.CALL_ASYNC_DELEGATE [as _callAsync] (/home/javizqh/jderobot/jderobot-ide-interface/node_modules/tapable/lib/Hook.js:21:14)\n at /home/javizqh/jderobot/jderobot-ide-interface/node_modules/webpack/lib/NormalModule.js:1571:10\n at new Promise (<anonymous>)\n at readResource (/home/javizqh/jderobot/jderobot-ide-interface/node_modules/webpack/lib/NormalModule.js:1568:14)\n at Object.processResource (/home/javizqh/jderobot/jderobot-ide-interface/node_modules/webpack/lib/NormalModule.js:1590:28)\n at processResource (/home/javizqh/jderobot/jderobot-ide-interface/node_modules/loader-runner/lib/LoaderRunner.js:295:10)\n at iteratePitchingLoaders (/home/javizqh/jderobot/jderobot-ide-interface/node_modules/loader-runner/lib/LoaderRunner.js:358:9)\n at runLoaders (/home/javizqh/jderobot/jderobot-ide-interface/node_modules/loader-runner/lib/LoaderRunner.js:525:2)\n at JavascriptModule._doBuild (/home/javizqh/jderobot/jderobot-ide-interface/node_modules/webpack/lib/NormalModule.js:1553:3)\n at JavascriptModule.build (/home/javizqh/jderobot/jderobot-ide-interface/node_modules/webpack/lib/NormalModule.js:1806:15)\n at /home/javizqh/jderobot/jderobot-ide-interface/node_modules/webpack/lib/Compilation.js:1717:12\n at JavascriptModule.needBuild (/home/javizqh/jderobot/jderobot-ide-interface/node_modules/webpack/lib/NormalModule.js:2139:32)\n at Compilation._buildModule (/home/javizqh/jderobot/jderobot-ide-interface/node_modules/webpack/lib/Compilation.js:1698:10)\n at /home/javizqh/jderobot/jderobot-ide-interface/node_modules/webpack/lib/util/AsyncQueue.js:370:10\n at Hook.eval [as callAsync] (eval at create (/home/javizqh/jderobot/jderobot-ide-interface/node_modules/tapable/lib/HookCodeFactory.js:31:10), <anonymous>:6:1)\n at AsyncQueue._startProcessing (/home/javizqh/jderobot/jderobot-ide-interface/node_modules/webpack/lib/util/AsyncQueue.js:360:26)\n at AsyncQueue._ensureProcessing (/home/javizqh/jderobot/jderobot-ide-interface/node_modules/webpack/lib/util/AsyncQueue.js:346:12)\n at process.processImmediate (node:internal/timers:574:21)");
10
+
11
+ /***/ }
12
+
13
+ }]);
@@ -0,0 +1,397 @@
1
+ (function webpackUniversalModuleDefinition(root, factory) {
2
+ if(typeof exports === 'object' && typeof module === 'object')
3
+ module.exports = factory();
4
+ else if(typeof define === 'function' && define.amd)
5
+ define([], factory);
6
+ else {
7
+ var a = factory();
8
+ for(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];
9
+ }
10
+ })(this, () => {
11
+ return /******/ (() => { // webpackBootstrap
12
+ /******/ "use strict";
13
+ /******/ var __webpack_modules__ = ({
14
+
15
+ /***/ "./node_modules/@vscode/diff/dist/worker.js?esm"
16
+ /*!******************************************************!*\
17
+ !*** ./node_modules/@vscode/diff/dist/worker.js?esm ***!
18
+ \******************************************************/
19
+ (__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
20
+
21
+ __webpack_require__.r(__webpack_exports__);
22
+ /* harmony import */ var _wire_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./wire.js */ "./node_modules/@vscode/diff/dist/wire.js");
23
+ /*---------------------------------------------------------------------------------------------
24
+ * Copyright (c) Microsoft Corporation. All rights reserved.
25
+ * Licensed under the MIT License. See License.txt in the project root for license information.
26
+ *--------------------------------------------------------------------------------------------*/
27
+
28
+
29
+ /// <reference lib="WebWorker" />
30
+ /**
31
+ * Diff worker entry. Built as a separate rollup output (`dist/worker.js`).
32
+ *
33
+ * The worker is intentionally narrow: it consumes a `ComputeRequest`,
34
+ * produces a `LinesDiff`, converts it to the wire shape, and posts it back.
35
+ * All `LinesDiff -> DiffResult` adapter work happens on the main thread,
36
+ * which already has the input strings.
37
+ */
38
+ const tsImpl = new _wire_js__WEBPACK_IMPORTED_MODULE_0__.D();
39
+ self.addEventListener('message', (ev) => {
40
+ const msg = ev.data;
41
+ if (msg.kind === 'init') {
42
+ void handleInit(msg);
43
+ }
44
+ else if (msg.kind === 'computeDiff') {
45
+ void handleCompute(msg);
46
+ }
47
+ });
48
+ async function handleInit(req) {
49
+ try {
50
+ if (req.backend === 'wasm') {
51
+ await (0,_wire_js__WEBPACK_IMPORTED_MODULE_0__.i)();
52
+ }
53
+ const resp = { kind: 'init', id: req.id, ok: true };
54
+ self.postMessage(resp);
55
+ }
56
+ catch (err) {
57
+ const resp = {
58
+ kind: 'computeDiff',
59
+ id: req.id,
60
+ ok: false,
61
+ error: String(err instanceof Error ? err.message : err),
62
+ };
63
+ self.postMessage(resp);
64
+ }
65
+ }
66
+ async function handleCompute(req) {
67
+ try {
68
+ let linesDiff;
69
+ if (req.backend === 'ts') {
70
+ linesDiff = computeTs(req.originalLines, req.modifiedLines, req.options);
71
+ }
72
+ else {
73
+ await (0,_wire_js__WEBPACK_IMPORTED_MODULE_0__.i)();
74
+ linesDiff = computeWasm(req.originalLines, req.modifiedLines, req.options);
75
+ }
76
+ const result = (0,_wire_js__WEBPACK_IMPORTED_MODULE_0__.l)(linesDiff);
77
+ const resp = { kind: 'computeDiff', id: req.id, ok: true, result };
78
+ self.postMessage(resp);
79
+ }
80
+ catch (err) {
81
+ const resp = {
82
+ kind: 'computeDiff',
83
+ id: req.id,
84
+ ok: false,
85
+ error: String(err instanceof Error ? err.message : err),
86
+ };
87
+ self.postMessage(resp);
88
+ }
89
+ }
90
+ function computeTs(original, modified, options) {
91
+ const internal = toInternalOptions(options);
92
+ return tsImpl.computeDiff(original, modified, internal);
93
+ }
94
+ function computeWasm(original, modified, options) {
95
+ const wasm = (0,_wire_js__WEBPACK_IMPORTED_MODULE_0__.g)();
96
+ const wasmOptions = toWasmOptions(options);
97
+ const wasmResult = wasm.computeDiffLines(original, modified, wasmOptions);
98
+ return wasmLinesDiffToLinesDiff(wasmResult);
99
+ }
100
+ function wasmLinesDiffToLinesDiff(wasmResult) {
101
+ const changes = wasmResult.changes.map((c) => {
102
+ const inner = c.innerChanges?.map((ic) => new _wire_js__WEBPACK_IMPORTED_MODULE_0__.R(new _wire_js__WEBPACK_IMPORTED_MODULE_0__.a(ic.originalStartLine, ic.originalStartColumn, ic.originalEndLine, ic.originalEndColumn), new _wire_js__WEBPACK_IMPORTED_MODULE_0__.a(ic.modifiedStartLine, ic.modifiedStartColumn, ic.modifiedEndLine, ic.modifiedEndColumn)));
103
+ return new _wire_js__WEBPACK_IMPORTED_MODULE_0__.b(new _wire_js__WEBPACK_IMPORTED_MODULE_0__.L(c.original.startLineNumber, c.original.endLineNumberExclusive), new _wire_js__WEBPACK_IMPORTED_MODULE_0__.L(c.modified.startLineNumber, c.modified.endLineNumberExclusive), inner);
104
+ });
105
+ return new _wire_js__WEBPACK_IMPORTED_MODULE_0__.c(changes, [], wasmResult.hitTimeout);
106
+ }
107
+ function toInternalOptions(options) {
108
+ return {
109
+ maxComputationTimeMs: options?.maxComputationTimeMs ?? 0,
110
+ ignoreTrimWhitespace: options?.ignoreTrimWhitespace ?? false,
111
+ computeMoves: options?.computeMoves ?? false,
112
+ extendToSubwords: options?.extendToSubwords ?? false,
113
+ };
114
+ }
115
+ function toWasmOptions(options) {
116
+ const out = {};
117
+ if (options?.maxComputationTimeMs !== undefined)
118
+ out.maxComputationTimeMs = options.maxComputationTimeMs;
119
+ if (options?.ignoreTrimWhitespace !== undefined)
120
+ out.ignoreTrimWhitespace = options.ignoreTrimWhitespace;
121
+ if (options?.computeMoves !== undefined)
122
+ out.computeMoves = options.computeMoves;
123
+ if (options?.extendToSubwords !== undefined)
124
+ out.extendToSubwords = options.extendToSubwords;
125
+ return out;
126
+ }
127
+ //# sourceMappingURL=worker.js.map
128
+
129
+
130
+ /***/ }
131
+
132
+ /******/ });
133
+ /************************************************************************/
134
+ /******/ // The module cache
135
+ /******/ const __webpack_module_cache__ = {};
136
+ /******/
137
+ /******/ // The require function
138
+ /******/ function __webpack_require__(moduleId) {
139
+ /******/ // Check if module is in cache
140
+ /******/ const cachedModule = __webpack_module_cache__[moduleId];
141
+ /******/ if (cachedModule !== undefined) {
142
+ /******/ return cachedModule.exports;
143
+ /******/ }
144
+ /******/ // Create a new module (and put it into the cache)
145
+ /******/ const module = __webpack_module_cache__[moduleId] = {
146
+ /******/ // no module.id needed
147
+ /******/ // no module.loaded needed
148
+ /******/ exports: {}
149
+ /******/ };
150
+ /******/
151
+ /******/ // Execute the module function
152
+ /******/ if (!(moduleId in __webpack_modules__)) {
153
+ /******/ delete __webpack_module_cache__[moduleId];
154
+ /******/ const e = new Error("Cannot find module '" + moduleId + "'");
155
+ /******/ e.code = 'MODULE_NOT_FOUND';
156
+ /******/ throw e;
157
+ /******/ }
158
+ /******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
159
+ /******/
160
+ /******/ // Return the exports of the module
161
+ /******/ return module.exports;
162
+ /******/ }
163
+ /******/
164
+ /******/ // expose the modules object (__webpack_modules__)
165
+ /******/ __webpack_require__.m = __webpack_modules__;
166
+ /******/
167
+ /******/ // the startup function
168
+ /******/ __webpack_require__.x = () => {
169
+ /******/ // Load entry module and return exports
170
+ /******/ // This entry module depends on other loaded chunks and execution need to be delayed
171
+ /******/ let __webpack_exports__ = __webpack_require__.O(undefined, ["vendors-node_modules_vscode_diff_dist_wire_js"], () => (__webpack_require__("./node_modules/@vscode/diff/dist/worker.js?esm")))
172
+ /******/ __webpack_exports__ = __webpack_require__.O(__webpack_exports__);
173
+ /******/ return __webpack_exports__;
174
+ /******/ };
175
+ /******/
176
+ /************************************************************************/
177
+ /******/ /* webpack/runtime/chunk loaded */
178
+ /******/ (() => {
179
+ /******/ const deferred = [];
180
+ /******/ __webpack_require__.O = (result, chunkIds, fn, priority) => {
181
+ /******/ if(chunkIds) {
182
+ /******/ priority = priority || 0;
183
+ /******/ for(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];
184
+ /******/ deferred[i] = [chunkIds, fn, priority];
185
+ /******/ return;
186
+ /******/ }
187
+ /******/ let notFulfilled = Infinity;
188
+ /******/ for (var i = 0; i < deferred.length; i++) {
189
+ /******/ let [chunkIds, fn, priority] = deferred[i];
190
+ /******/ let fulfilled = true;
191
+ /******/ for (var j = 0; j < chunkIds.length; j++) {
192
+ /******/ if ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {
193
+ /******/ chunkIds.splice(j--, 1);
194
+ /******/ } else {
195
+ /******/ fulfilled = false;
196
+ /******/ if(priority < notFulfilled) notFulfilled = priority;
197
+ /******/ }
198
+ /******/ }
199
+ /******/ if(fulfilled) {
200
+ /******/ deferred.splice(i--, 1)
201
+ /******/ const r = fn();
202
+ /******/ if (r !== undefined) result = r;
203
+ /******/ }
204
+ /******/ }
205
+ /******/ return result;
206
+ /******/ };
207
+ /******/ })();
208
+ /******/
209
+ /******/ /* webpack/runtime/create fake namespace object */
210
+ /******/ (() => {
211
+ /******/ const getProto = Object.getPrototypeOf ? (obj) => (Object.getPrototypeOf(obj)) : (obj) => (obj.__proto__);
212
+ /******/ let leafPrototypes;
213
+ /******/ // create a fake namespace object
214
+ /******/ // mode & 1: value is a module id, require it
215
+ /******/ // mode & 2: merge all properties of value into the ns
216
+ /******/ // mode & 4: return value when already ns object
217
+ /******/ // mode & 16: return value when it's Promise-like
218
+ /******/ // mode & 8|1: behave like require
219
+ /******/ __webpack_require__.t = function(value, mode) {
220
+ /******/ if(mode & 1) value = this(value);
221
+ /******/ if(mode & 8) return value;
222
+ /******/ if(typeof value === 'object' && value) {
223
+ /******/ if((mode & 4) && value.__esModule) return value;
224
+ /******/ if((mode & 16) && typeof value.then === 'function') return value;
225
+ /******/ }
226
+ /******/ const ns = Object.create(null);
227
+ /******/ __webpack_require__.r(ns);
228
+ /******/ const def = {};
229
+ /******/ leafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];
230
+ /******/ for(var current = mode & 2 && value; (typeof current == 'object' || typeof current == 'function') && !~leafPrototypes.indexOf(current); current = getProto(current)) {
231
+ /******/ Object.getOwnPropertyNames(current).forEach((key) => (def[key] = () => (value[key])));
232
+ /******/ }
233
+ /******/ def['default'] = () => (value);
234
+ /******/ __webpack_require__.d(ns, def);
235
+ /******/ return ns;
236
+ /******/ };
237
+ /******/ })();
238
+ /******/
239
+ /******/ /* webpack/runtime/define property getters */
240
+ /******/ (() => {
241
+ /******/ // define getter/value functions for harmony exports
242
+ /******/ __webpack_require__.d = (exports, definition) => {
243
+ /******/ if(Array.isArray(definition)) {
244
+ /******/ var i = 0;
245
+ /******/ while(i < definition.length) {
246
+ /******/ var key = definition[i++];
247
+ /******/ var binding = definition[i++];
248
+ /******/ if(!__webpack_require__.o(exports, key)) {
249
+ /******/ if(binding === 0) {
250
+ /******/ Object.defineProperty(exports, key, { enumerable: true, value: definition[i++] });
251
+ /******/ } else {
252
+ /******/ Object.defineProperty(exports, key, { enumerable: true, get: binding });
253
+ /******/ }
254
+ /******/ } else if(binding === 0) { i++; }
255
+ /******/ }
256
+ /******/ } else {
257
+ /******/ for(var key in definition) {
258
+ /******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
259
+ /******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
260
+ /******/ }
261
+ /******/ }
262
+ /******/ }
263
+ /******/ };
264
+ /******/ })();
265
+ /******/
266
+ /******/ /* webpack/runtime/ensure chunk */
267
+ /******/ (() => {
268
+ /******/ __webpack_require__.f = {};
269
+ /******/ // This file contains only the entry chunk.
270
+ /******/ // The chunk loading function for additional chunks
271
+ /******/ __webpack_require__.e = (chunkId) => {
272
+ /******/ return Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {
273
+ /******/ __webpack_require__.f[key](chunkId, promises);
274
+ /******/ return promises;
275
+ /******/ }, []));
276
+ /******/ };
277
+ /******/ })();
278
+ /******/
279
+ /******/ /* webpack/runtime/get javascript chunk filename */
280
+ /******/ (() => {
281
+ /******/ // This function allow to reference async chunks and chunks that the entrypoint depends on
282
+ /******/ __webpack_require__.u = (chunkId) => {
283
+ /******/ // return url for filenames based on template
284
+ /******/ return "" + chunkId + ".main.js";
285
+ /******/ };
286
+ /******/ })();
287
+ /******/
288
+ /******/ /* webpack/runtime/global */
289
+ /******/ (() => {
290
+ /******/ __webpack_require__.g = (function() {
291
+ /******/ if (typeof globalThis === 'object') return globalThis;
292
+ /******/ try {
293
+ /******/ return this || new Function('return this')();
294
+ /******/ } catch (e) {
295
+ /******/ if (typeof window === 'object') return window;
296
+ /******/ }
297
+ /******/ })();
298
+ /******/ })();
299
+ /******/
300
+ /******/ /* webpack/runtime/hasOwnProperty shorthand */
301
+ /******/ (() => {
302
+ /******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
303
+ /******/ })();
304
+ /******/
305
+ /******/ /* webpack/runtime/make namespace object */
306
+ /******/ (() => {
307
+ /******/ // define __esModule on exports
308
+ /******/ __webpack_require__.r = (exports) => {
309
+ /******/ if(Symbol.toStringTag) {
310
+ /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
311
+ /******/ }
312
+ /******/ Object.defineProperty(exports, '__esModule', { value: true });
313
+ /******/ };
314
+ /******/ })();
315
+ /******/
316
+ /******/ /* webpack/runtime/publicPath */
317
+ /******/ (() => {
318
+ /******/ let scriptUrl;
319
+ /******/ if (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + "";
320
+ /******/ const document = __webpack_require__.g.document;
321
+ /******/ if (!scriptUrl && document) {
322
+ /******/ if (document.currentScript?.tagName.toUpperCase() === 'SCRIPT')
323
+ /******/ scriptUrl = document.currentScript.src;
324
+ /******/ if (!scriptUrl) {
325
+ /******/ const scripts = document.getElementsByTagName("script");
326
+ /******/ if(scripts.length) {
327
+ /******/ let i = scripts.length - 1;
328
+ /******/ while (i > -1 && (!scriptUrl || !/^http(s?):/.test(scriptUrl))) scriptUrl = scripts[i--].src;
329
+ /******/ }
330
+ /******/ }
331
+ /******/ }
332
+ /******/ // When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration
333
+ /******/ // or pass an empty string ("") and set the __webpack_public_path__ variable from your code to use your own logic.
334
+ /******/ if (!scriptUrl) throw new Error("Automatic publicPath is not supported in this browser");
335
+ /******/ scriptUrl = scriptUrl.replace(/^blob:/, "").replace(/#.*$/, "").replace(/\?.*$/, "").replace(/\/[^\/]+$/, "/");
336
+ /******/ __webpack_require__.p = scriptUrl;
337
+ /******/ })();
338
+ /******/
339
+ /******/ /* webpack/runtime/importScripts chunk loading */
340
+ /******/ (() => {
341
+ /******/ __webpack_require__.b = self.location + "";
342
+ /******/
343
+ /******/ // object to store loaded chunks
344
+ /******/ // "1" means "already loaded"
345
+ /******/ var installedChunks = {
346
+ /******/ "node_modules_vscode_diff_dist_worker_js_esm": 1
347
+ /******/ };
348
+ /******/
349
+ /******/ // importScripts chunk loading
350
+ /******/ var installChunk = (data) => {
351
+ /******/ let [chunkIds, moreModules, runtime] = data;
352
+ /******/ for(var moduleId in moreModules) {
353
+ /******/ if(__webpack_require__.o(moreModules, moduleId)) {
354
+ /******/ __webpack_require__.m[moduleId] = moreModules[moduleId];
355
+ /******/ }
356
+ /******/ }
357
+ /******/ if(runtime) runtime(__webpack_require__);
358
+ /******/ while(chunkIds.length)
359
+ /******/ installedChunks[chunkIds.pop()] = 1;
360
+ /******/ parentChunkLoadingFunction(data);
361
+ /******/ };
362
+ /******/ __webpack_require__.f.i = (chunkId, promises) => {
363
+ /******/ // "1" is the signal for "already loaded"
364
+ /******/ if(!installedChunks[chunkId]) {
365
+ /******/ if(true) { // all chunks have JS
366
+ /******/ importScripts(__webpack_require__.p + __webpack_require__.u(chunkId));
367
+ /******/ }
368
+ /******/ }
369
+ /******/ };
370
+ /******/
371
+ /******/ var chunkLoadingGlobal = this["webpackChunkjderobot_ide_interface"] = this["webpackChunkjderobot_ide_interface"] || [];
372
+ /******/ var parentChunkLoadingFunction = chunkLoadingGlobal.push.bind(chunkLoadingGlobal);
373
+ /******/ chunkLoadingGlobal.push = installChunk;
374
+ /******/
375
+ /******/ // no HMR
376
+ /******/
377
+ /******/ // no HMR manifest
378
+ /******/ })();
379
+ /******/
380
+ /******/ /* webpack/runtime/startup chunk dependencies */
381
+ /******/ (() => {
382
+ /******/ const next = __webpack_require__.x;
383
+ /******/ __webpack_require__.x = () => {
384
+ /******/ return __webpack_require__.e("vendors-node_modules_vscode_diff_dist_wire_js").then(next);
385
+ /******/ };
386
+ /******/ })();
387
+ /******/
388
+ /************************************************************************/
389
+ /******/
390
+ /******/ // run startup
391
+ /******/ var __webpack_exports__ = __webpack_require__.x();
392
+ /******/
393
+ /******/ return __webpack_exports__;
394
+ /******/ })()
395
+ ;
396
+ });
397
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZV9tb2R1bGVzX3ZzY29kZV9kaWZmX2Rpc3Rfd29ya2VyX2pzX2VzbS5tYWluLmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCxPOzs7Ozs7Ozs7Ozs7QUNWQTtBQUNBO0FBQ0E7QUFDQTtBQUMyTTs7QUFFM007QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLHVDQUF3QjtBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQiwyQ0FBUTtBQUMxQjtBQUNBLHVCQUF1QjtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQiwyQ0FBUTtBQUMxQjtBQUNBO0FBQ0EsdUJBQXVCLDJDQUFlO0FBQ3RDLHVCQUF1QjtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLDJDQUFPO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNEQUFzRCx1Q0FBWSxLQUFLLHVDQUFLLDhGQUE4Rix1Q0FBSztBQUMvSyxtQkFBbUIsdUNBQXdCLEtBQUssdUNBQVMscUVBQXFFLHVDQUFTO0FBQ3ZJLEtBQUs7QUFDTCxlQUFlLHVDQUFTO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7O1VDeEdBO1VBQ0E7O1VBRUE7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7O1VBRUE7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTs7VUFFQTtVQUNBO1VBQ0E7O1VBRUE7VUFDQTs7VUFFQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBOzs7OztXQ3hDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBLCtCQUErQix3Q0FBd0M7V0FDdkU7V0FDQTtXQUNBO1dBQ0E7V0FDQSxpQkFBaUIscUJBQXFCO1dBQ3RDO1dBQ0E7V0FDQSxrQkFBa0IscUJBQXFCO1dBQ3ZDO1dBQ0E7V0FDQSxLQUFLO1dBQ0w7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBLEU7Ozs7O1dDM0JBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBLHNEQUFzRDtXQUN0RCxzQ0FBc0MsbUdBQW1HO1dBQ3pJO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQSxFOzs7OztXQ3pCQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQSwyQ0FBMkMsMENBQTBDO1dBQ3JGLE1BQU07V0FDTiwyQ0FBMkMsZ0NBQWdDO1dBQzNFO1dBQ0EsS0FBSyx5QkFBeUI7V0FDOUI7V0FDQSxHQUFHO1dBQ0g7V0FDQTtXQUNBLDBDQUEwQyx3Q0FBd0M7V0FDbEY7V0FDQTtXQUNBO1dBQ0EsRTs7Ozs7V0N0QkE7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQSxFQUFFO1dBQ0YsRTs7Ozs7V0NSQTtXQUNBO1dBQ0E7V0FDQTtXQUNBLEU7Ozs7O1dDSkE7V0FDQTtXQUNBO1dBQ0E7V0FDQSxHQUFHO1dBQ0g7V0FDQTtXQUNBLENBQUMsSTs7Ozs7V0NQRCx3Rjs7Ozs7V0NBQTtXQUNBO1dBQ0E7V0FDQSx1REFBdUQsaUJBQWlCO1dBQ3hFO1dBQ0EsZ0RBQWdELGFBQWE7V0FDN0QsRTs7Ozs7V0NOQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQSxrQzs7Ozs7V0NsQkE7O1dBRUE7V0FDQTtXQUNBO1dBQ0E7V0FDQTs7V0FFQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBLGFBQWE7V0FDYjtXQUNBO1dBQ0E7V0FDQTs7V0FFQTtXQUNBO1dBQ0E7O1dBRUE7O1dBRUEsa0I7Ozs7O1dDcENBO1dBQ0E7V0FDQTtXQUNBLEU7Ozs7O1VFSEE7VUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2pkZXJvYm90LWlkZS1pbnRlcmZhY2Uvd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovL2pkZXJvYm90LWlkZS1pbnRlcmZhY2UvLi9ub2RlX21vZHVsZXMvQHZzY29kZS9kaWZmL2Rpc3Qvd29ya2VyLmpzIiwid2VicGFjazovL2pkZXJvYm90LWlkZS1pbnRlcmZhY2Uvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vamRlcm9ib3QtaWRlLWludGVyZmFjZS93ZWJwYWNrL3J1bnRpbWUvY2h1bmsgbG9hZGVkIiwid2VicGFjazovL2pkZXJvYm90LWlkZS1pbnRlcmZhY2Uvd2VicGFjay9ydW50aW1lL2NyZWF0ZSBmYWtlIG5hbWVzcGFjZSBvYmplY3QiLCJ3ZWJwYWNrOi8vamRlcm9ib3QtaWRlLWludGVyZmFjZS93ZWJwYWNrL3J1bnRpbWUvZGVmaW5lIHByb3BlcnR5IGdldHRlcnMiLCJ3ZWJwYWNrOi8vamRlcm9ib3QtaWRlLWludGVyZmFjZS93ZWJwYWNrL3J1bnRpbWUvZW5zdXJlIGNodW5rIiwid2VicGFjazovL2pkZXJvYm90LWlkZS1pbnRlcmZhY2Uvd2VicGFjay9ydW50aW1lL2dldCBqYXZhc2NyaXB0IGNodW5rIGZpbGVuYW1lIiwid2VicGFjazovL2pkZXJvYm90LWlkZS1pbnRlcmZhY2Uvd2VicGFjay9ydW50aW1lL2dsb2JhbCIsIndlYnBhY2s6Ly9qZGVyb2JvdC1pZGUtaW50ZXJmYWNlL3dlYnBhY2svcnVudGltZS9oYXNPd25Qcm9wZXJ0eSBzaG9ydGhhbmQiLCJ3ZWJwYWNrOi8vamRlcm9ib3QtaWRlLWludGVyZmFjZS93ZWJwYWNrL3J1bnRpbWUvbWFrZSBuYW1lc3BhY2Ugb2JqZWN0Iiwid2VicGFjazovL2pkZXJvYm90LWlkZS1pbnRlcmZhY2Uvd2VicGFjay9ydW50aW1lL3B1YmxpY1BhdGgiLCJ3ZWJwYWNrOi8vamRlcm9ib3QtaWRlLWludGVyZmFjZS93ZWJwYWNrL3J1bnRpbWUvaW1wb3J0U2NyaXB0cyBjaHVuayBsb2FkaW5nIiwid2VicGFjazovL2pkZXJvYm90LWlkZS1pbnRlcmZhY2Uvd2VicGFjay9ydW50aW1lL3N0YXJ0dXAgY2h1bmsgZGVwZW5kZW5jaWVzIiwid2VicGFjazovL2pkZXJvYm90LWlkZS1pbnRlcmZhY2Uvd2VicGFjay9iZWZvcmUtc3RhcnR1cCIsIndlYnBhY2s6Ly9qZGVyb2JvdC1pZGUtaW50ZXJmYWNlL3dlYnBhY2svc3RhcnR1cCIsIndlYnBhY2s6Ly9qZGVyb2JvdC1pZGUtaW50ZXJmYWNlL3dlYnBhY2svYWZ0ZXItc3RhcnR1cCJdLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShbXSwgZmFjdG9yeSk7XG5cdGVsc2Uge1xuXHRcdHZhciBhID0gZmFjdG9yeSgpO1xuXHRcdGZvcih2YXIgaSBpbiBhKSAodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnID8gZXhwb3J0cyA6IHJvb3QpW2ldID0gYVtpXTtcblx0fVxufSkodGhpcywgKCkgPT4ge1xucmV0dXJuICIsIi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiAgQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiAgTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgTGljZW5zZS50eHQgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cbiAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuaW1wb3J0IHsgaSBhcyBpbml0V2FzbSwgbCBhcyBsaW5lc0RpZmZUb1dpcmUsIEQgYXMgRGVmYXVsdExpbmVzRGlmZkNvbXB1dGVyLCBnIGFzIGdldFdhc20sIFIgYXMgUmFuZ2VNYXBwaW5nLCBhIGFzIFJhbmdlLCBiIGFzIERldGFpbGVkTGluZVJhbmdlTWFwcGluZywgTCBhcyBMaW5lUmFuZ2UsIGMgYXMgTGluZXNEaWZmIH0gZnJvbSAnLi93aXJlLmpzJztcblxuLy8vIDxyZWZlcmVuY2UgbGliPVwiV2ViV29ya2VyXCIgLz5cbi8qKlxuICogRGlmZiB3b3JrZXIgZW50cnkuIEJ1aWx0IGFzIGEgc2VwYXJhdGUgcm9sbHVwIG91dHB1dCAoYGRpc3Qvd29ya2VyLmpzYCkuXG4gKlxuICogVGhlIHdvcmtlciBpcyBpbnRlbnRpb25hbGx5IG5hcnJvdzogaXQgY29uc3VtZXMgYSBgQ29tcHV0ZVJlcXVlc3RgLFxuICogcHJvZHVjZXMgYSBgTGluZXNEaWZmYCwgY29udmVydHMgaXQgdG8gdGhlIHdpcmUgc2hhcGUsIGFuZCBwb3N0cyBpdCBiYWNrLlxuICogQWxsIGBMaW5lc0RpZmYgLT4gRGlmZlJlc3VsdGAgYWRhcHRlciB3b3JrIGhhcHBlbnMgb24gdGhlIG1haW4gdGhyZWFkLFxuICogd2hpY2ggYWxyZWFkeSBoYXMgdGhlIGlucHV0IHN0cmluZ3MuXG4gKi9cbmNvbnN0IHRzSW1wbCA9IG5ldyBEZWZhdWx0TGluZXNEaWZmQ29tcHV0ZXIoKTtcbnNlbGYuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIChldikgPT4ge1xuICAgIGNvbnN0IG1zZyA9IGV2LmRhdGE7XG4gICAgaWYgKG1zZy5raW5kID09PSAnaW5pdCcpIHtcbiAgICAgICAgdm9pZCBoYW5kbGVJbml0KG1zZyk7XG4gICAgfVxuICAgIGVsc2UgaWYgKG1zZy5raW5kID09PSAnY29tcHV0ZURpZmYnKSB7XG4gICAgICAgIHZvaWQgaGFuZGxlQ29tcHV0ZShtc2cpO1xuICAgIH1cbn0pO1xuYXN5bmMgZnVuY3Rpb24gaGFuZGxlSW5pdChyZXEpIHtcbiAgICB0cnkge1xuICAgICAgICBpZiAocmVxLmJhY2tlbmQgPT09ICd3YXNtJykge1xuICAgICAgICAgICAgYXdhaXQgaW5pdFdhc20oKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXNwID0geyBraW5kOiAnaW5pdCcsIGlkOiByZXEuaWQsIG9rOiB0cnVlIH07XG4gICAgICAgIHNlbGYucG9zdE1lc3NhZ2UocmVzcCk7XG4gICAgfVxuICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc3QgcmVzcCA9IHtcbiAgICAgICAgICAgIGtpbmQ6ICdjb21wdXRlRGlmZicsXG4gICAgICAgICAgICBpZDogcmVxLmlkLFxuICAgICAgICAgICAgb2s6IGZhbHNlLFxuICAgICAgICAgICAgZXJyb3I6IFN0cmluZyhlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogZXJyKSxcbiAgICAgICAgfTtcbiAgICAgICAgc2VsZi5wb3N0TWVzc2FnZShyZXNwKTtcbiAgICB9XG59XG5hc3luYyBmdW5jdGlvbiBoYW5kbGVDb21wdXRlKHJlcSkge1xuICAgIHRyeSB7XG4gICAgICAgIGxldCBsaW5lc0RpZmY7XG4gICAgICAgIGlmIChyZXEuYmFja2VuZCA9PT0gJ3RzJykge1xuICAgICAgICAgICAgbGluZXNEaWZmID0gY29tcHV0ZVRzKHJlcS5vcmlnaW5hbExpbmVzLCByZXEubW9kaWZpZWRMaW5lcywgcmVxLm9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgYXdhaXQgaW5pdFdhc20oKTtcbiAgICAgICAgICAgIGxpbmVzRGlmZiA9IGNvbXB1dGVXYXNtKHJlcS5vcmlnaW5hbExpbmVzLCByZXEubW9kaWZpZWRMaW5lcywgcmVxLm9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGxpbmVzRGlmZlRvV2lyZShsaW5lc0RpZmYpO1xuICAgICAgICBjb25zdCByZXNwID0geyBraW5kOiAnY29tcHV0ZURpZmYnLCBpZDogcmVxLmlkLCBvazogdHJ1ZSwgcmVzdWx0IH07XG4gICAgICAgIHNlbGYucG9zdE1lc3NhZ2UocmVzcCk7XG4gICAgfVxuICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc3QgcmVzcCA9IHtcbiAgICAgICAgICAgIGtpbmQ6ICdjb21wdXRlRGlmZicsXG4gICAgICAgICAgICBpZDogcmVxLmlkLFxuICAgICAgICAgICAgb2s6IGZhbHNlLFxuICAgICAgICAgICAgZXJyb3I6IFN0cmluZyhlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogZXJyKSxcbiAgICAgICAgfTtcbiAgICAgICAgc2VsZi5wb3N0TWVzc2FnZShyZXNwKTtcbiAgICB9XG59XG5mdW5jdGlvbiBjb21wdXRlVHMob3JpZ2luYWwsIG1vZGlmaWVkLCBvcHRpb25zKSB7XG4gICAgY29uc3QgaW50ZXJuYWwgPSB0b0ludGVybmFsT3B0aW9ucyhvcHRpb25zKTtcbiAgICByZXR1cm4gdHNJbXBsLmNvbXB1dGVEaWZmKG9yaWdpbmFsLCBtb2RpZmllZCwgaW50ZXJuYWwpO1xufVxuZnVuY3Rpb24gY29tcHV0ZVdhc20ob3JpZ2luYWwsIG1vZGlmaWVkLCBvcHRpb25zKSB7XG4gICAgY29uc3Qgd2FzbSA9IGdldFdhc20oKTtcbiAgICBjb25zdCB3YXNtT3B0aW9ucyA9IHRvV2FzbU9wdGlvbnMob3B0aW9ucyk7XG4gICAgY29uc3Qgd2FzbVJlc3VsdCA9IHdhc20uY29tcHV0ZURpZmZMaW5lcyhvcmlnaW5hbCwgbW9kaWZpZWQsIHdhc21PcHRpb25zKTtcbiAgICByZXR1cm4gd2FzbUxpbmVzRGlmZlRvTGluZXNEaWZmKHdhc21SZXN1bHQpO1xufVxuZnVuY3Rpb24gd2FzbUxpbmVzRGlmZlRvTGluZXNEaWZmKHdhc21SZXN1bHQpIHtcbiAgICBjb25zdCBjaGFuZ2VzID0gd2FzbVJlc3VsdC5jaGFuZ2VzLm1hcCgoYykgPT4ge1xuICAgICAgICBjb25zdCBpbm5lciA9IGMuaW5uZXJDaGFuZ2VzPy5tYXAoKGljKSA9PiBuZXcgUmFuZ2VNYXBwaW5nKG5ldyBSYW5nZShpYy5vcmlnaW5hbFN0YXJ0TGluZSwgaWMub3JpZ2luYWxTdGFydENvbHVtbiwgaWMub3JpZ2luYWxFbmRMaW5lLCBpYy5vcmlnaW5hbEVuZENvbHVtbiksIG5ldyBSYW5nZShpYy5tb2RpZmllZFN0YXJ0TGluZSwgaWMubW9kaWZpZWRTdGFydENvbHVtbiwgaWMubW9kaWZpZWRFbmRMaW5lLCBpYy5tb2RpZmllZEVuZENvbHVtbikpKTtcbiAgICAgICAgcmV0dXJuIG5ldyBEZXRhaWxlZExpbmVSYW5nZU1hcHBpbmcobmV3IExpbmVSYW5nZShjLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlciwgYy5vcmlnaW5hbC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlKSwgbmV3IExpbmVSYW5nZShjLm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlciwgYy5tb2RpZmllZC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlKSwgaW5uZXIpO1xuICAgIH0pO1xuICAgIHJldHVybiBuZXcgTGluZXNEaWZmKGNoYW5nZXMsIFtdLCB3YXNtUmVzdWx0LmhpdFRpbWVvdXQpO1xufVxuZnVuY3Rpb24gdG9JbnRlcm5hbE9wdGlvbnMob3B0aW9ucykge1xuICAgIHJldHVybiB7XG4gICAgICAgIG1heENvbXB1dGF0aW9uVGltZU1zOiBvcHRpb25zPy5tYXhDb21wdXRhdGlvblRpbWVNcyA/PyAwLFxuICAgICAgICBpZ25vcmVUcmltV2hpdGVzcGFjZTogb3B0aW9ucz8uaWdub3JlVHJpbVdoaXRlc3BhY2UgPz8gZmFsc2UsXG4gICAgICAgIGNvbXB1dGVNb3Zlczogb3B0aW9ucz8uY29tcHV0ZU1vdmVzID8/IGZhbHNlLFxuICAgICAgICBleHRlbmRUb1N1YndvcmRzOiBvcHRpb25zPy5leHRlbmRUb1N1YndvcmRzID8/IGZhbHNlLFxuICAgIH07XG59XG5mdW5jdGlvbiB0b1dhc21PcHRpb25zKG9wdGlvbnMpIHtcbiAgICBjb25zdCBvdXQgPSB7fTtcbiAgICBpZiAob3B0aW9ucz8ubWF4Q29tcHV0YXRpb25UaW1lTXMgIT09IHVuZGVmaW5lZClcbiAgICAgICAgb3V0Lm1heENvbXB1dGF0aW9uVGltZU1zID0gb3B0aW9ucy5tYXhDb21wdXRhdGlvblRpbWVNcztcbiAgICBpZiAob3B0aW9ucz8uaWdub3JlVHJpbVdoaXRlc3BhY2UgIT09IHVuZGVmaW5lZClcbiAgICAgICAgb3V0Lmlnbm9yZVRyaW1XaGl0ZXNwYWNlID0gb3B0aW9ucy5pZ25vcmVUcmltV2hpdGVzcGFjZTtcbiAgICBpZiAob3B0aW9ucz8uY29tcHV0ZU1vdmVzICE9PSB1bmRlZmluZWQpXG4gICAgICAgIG91dC5jb21wdXRlTW92ZXMgPSBvcHRpb25zLmNvbXB1dGVNb3ZlcztcbiAgICBpZiAob3B0aW9ucz8uZXh0ZW5kVG9TdWJ3b3JkcyAhPT0gdW5kZWZpbmVkKVxuICAgICAgICBvdXQuZXh0ZW5kVG9TdWJ3b3JkcyA9IG9wdGlvbnMuZXh0ZW5kVG9TdWJ3b3JkcztcbiAgICByZXR1cm4gb3V0O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9d29ya2VyLmpzLm1hcFxuIiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxuY29uc3QgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG5cbi8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG5mdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuXHRjb25zdCBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0Y29uc3QgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHQvLyBubyBtb2R1bGUuaWQgbmVlZGVkXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRpZiAoIShtb2R1bGVJZCBpbiBfX3dlYnBhY2tfbW9kdWxlc19fKSkge1xuXHRcdGRlbGV0ZSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRcdGNvbnN0IGUgPSBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiICsgbW9kdWxlSWQgKyBcIidcIik7XG5cdFx0ZS5jb2RlID0gJ01PRFVMRV9OT1RfRk9VTkQnO1xuXHRcdHRocm93IGU7XG5cdH1cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0obW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4vLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuX193ZWJwYWNrX3JlcXVpcmVfXy5tID0gX193ZWJwYWNrX21vZHVsZXNfXztcblxuLy8gdGhlIHN0YXJ0dXAgZnVuY3Rpb25cbl9fd2VicGFja19yZXF1aXJlX18ueCA9ICgpID0+IHtcblx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG5cdC8vIFRoaXMgZW50cnkgbW9kdWxlIGRlcGVuZHMgb24gb3RoZXIgbG9hZGVkIGNodW5rcyBhbmQgZXhlY3V0aW9uIG5lZWQgdG8gYmUgZGVsYXllZFxuXHRsZXQgX193ZWJwYWNrX2V4cG9ydHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18uTyh1bmRlZmluZWQsIFtcInZlbmRvcnMtbm9kZV9tb2R1bGVzX3ZzY29kZV9kaWZmX2Rpc3Rfd2lyZV9qc1wiXSwgKCkgPT4gKF9fd2VicGFja19yZXF1aXJlX18oXCIuL25vZGVfbW9kdWxlcy9AdnNjb2RlL2RpZmYvZGlzdC93b3JrZXIuanM/ZXNtXCIpKSlcblx0X193ZWJwYWNrX2V4cG9ydHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18uTyhfX3dlYnBhY2tfZXhwb3J0c19fKTtcblx0cmV0dXJuIF9fd2VicGFja19leHBvcnRzX187XG59O1xuXG4iLCJjb25zdCBkZWZlcnJlZCA9IFtdO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5PID0gKHJlc3VsdCwgY2h1bmtJZHMsIGZuLCBwcmlvcml0eSkgPT4ge1xuXHRpZihjaHVua0lkcykge1xuXHRcdHByaW9yaXR5ID0gcHJpb3JpdHkgfHwgMDtcblx0XHRmb3IodmFyIGkgPSBkZWZlcnJlZC5sZW5ndGg7IGkgPiAwICYmIGRlZmVycmVkW2kgLSAxXVsyXSA+IHByaW9yaXR5OyBpLS0pIGRlZmVycmVkW2ldID0gZGVmZXJyZWRbaSAtIDFdO1xuXHRcdGRlZmVycmVkW2ldID0gW2NodW5rSWRzLCBmbiwgcHJpb3JpdHldO1xuXHRcdHJldHVybjtcblx0fVxuXHRsZXQgbm90RnVsZmlsbGVkID0gSW5maW5pdHk7XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgZGVmZXJyZWQubGVuZ3RoOyBpKyspIHtcblx0XHRsZXQgW2NodW5rSWRzLCBmbiwgcHJpb3JpdHldID0gZGVmZXJyZWRbaV07XG5cdFx0bGV0IGZ1bGZpbGxlZCA9IHRydWU7XG5cdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBjaHVua0lkcy5sZW5ndGg7IGorKykge1xuXHRcdFx0aWYgKChwcmlvcml0eSAmIDEgPT09IDAgfHwgbm90RnVsZmlsbGVkID49IHByaW9yaXR5KSAmJiBPYmplY3Qua2V5cyhfX3dlYnBhY2tfcmVxdWlyZV9fLk8pLmV2ZXJ5KChrZXkpID0+IChfX3dlYnBhY2tfcmVxdWlyZV9fLk9ba2V5XShjaHVua0lkc1tqXSkpKSkge1xuXHRcdFx0XHRjaHVua0lkcy5zcGxpY2Uoai0tLCAxKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGZ1bGZpbGxlZCA9IGZhbHNlO1xuXHRcdFx0XHRpZihwcmlvcml0eSA8IG5vdEZ1bGZpbGxlZCkgbm90RnVsZmlsbGVkID0gcHJpb3JpdHk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGlmKGZ1bGZpbGxlZCkge1xuXHRcdFx0ZGVmZXJyZWQuc3BsaWNlKGktLSwgMSlcblx0XHRcdGNvbnN0IHIgPSBmbigpO1xuXHRcdFx0aWYgKHIgIT09IHVuZGVmaW5lZCkgcmVzdWx0ID0gcjtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHJlc3VsdDtcbn07IiwiY29uc3QgZ2V0UHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YgPyAob2JqKSA9PiAoT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iaikpIDogKG9iaikgPT4gKG9iai5fX3Byb3RvX18pO1xubGV0IGxlYWZQcm90b3R5cGVzO1xuLy8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4vLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbi8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuLy8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4vLyBtb2RlICYgMTY6IHJldHVybiB2YWx1ZSB3aGVuIGl0J3MgUHJvbWlzZS1saWtlXG4vLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG5fX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuXHRpZihtb2RlICYgMSkgdmFsdWUgPSB0aGlzKHZhbHVlKTtcblx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcblx0aWYodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSkge1xuXHRcdGlmKChtb2RlICYgNCkgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuXHRcdGlmKChtb2RlICYgMTYpICYmIHR5cGVvZiB2YWx1ZS50aGVuID09PSAnZnVuY3Rpb24nKSByZXR1cm4gdmFsdWU7XG5cdH1cblx0Y29uc3QgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuXHRjb25zdCBkZWYgPSB7fTtcblx0bGVhZlByb3RvdHlwZXMgPSBsZWFmUHJvdG90eXBlcyB8fCBbbnVsbCwgZ2V0UHJvdG8oe30pLCBnZXRQcm90byhbXSksIGdldFByb3RvKGdldFByb3RvKV07XG5cdGZvcih2YXIgY3VycmVudCA9IG1vZGUgJiAyICYmIHZhbHVlOyAodHlwZW9mIGN1cnJlbnQgPT0gJ29iamVjdCcgfHwgdHlwZW9mIGN1cnJlbnQgPT0gJ2Z1bmN0aW9uJykgJiYgIX5sZWFmUHJvdG90eXBlcy5pbmRleE9mKGN1cnJlbnQpOyBjdXJyZW50ID0gZ2V0UHJvdG8oY3VycmVudCkpIHtcblx0XHRPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhjdXJyZW50KS5mb3JFYWNoKChrZXkpID0+IChkZWZba2V5XSA9ICgpID0+ICh2YWx1ZVtrZXldKSkpO1xuXHR9XG5cdGRlZlsnZGVmYXVsdCddID0gKCkgPT4gKHZhbHVlKTtcblx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBkZWYpO1xuXHRyZXR1cm4gbnM7XG59OyIsIi8vIGRlZmluZSBnZXR0ZXIvdmFsdWUgZnVuY3Rpb25zIGZvciBoYXJtb255IGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uZCA9IChleHBvcnRzLCBkZWZpbml0aW9uKSA9PiB7XG5cdGlmKEFycmF5LmlzQXJyYXkoZGVmaW5pdGlvbikpIHtcblx0XHR2YXIgaSA9IDA7XG5cdFx0d2hpbGUoaSA8IGRlZmluaXRpb24ubGVuZ3RoKSB7XG5cdFx0XHR2YXIga2V5ID0gZGVmaW5pdGlvbltpKytdO1xuXHRcdFx0dmFyIGJpbmRpbmcgPSBkZWZpbml0aW9uW2krK107XG5cdFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIGtleSkpIHtcblx0XHRcdFx0aWYoYmluZGluZyA9PT0gMCkge1xuXHRcdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IGRlZmluaXRpb25baSsrXSB9KTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogYmluZGluZyB9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmKGJpbmRpbmcgPT09IDApIHsgaSsrOyB9XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdGZvcih2YXIga2V5IGluIGRlZmluaXRpb24pIHtcblx0XHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuXHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZGVmaW5pdGlvbltrZXldIH0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLmYgPSB7fTtcbi8vIFRoaXMgZmlsZSBjb250YWlucyBvbmx5IHRoZSBlbnRyeSBjaHVuay5cbi8vIFRoZSBjaHVuayBsb2FkaW5nIGZ1bmN0aW9uIGZvciBhZGRpdGlvbmFsIGNodW5rc1xuX193ZWJwYWNrX3JlcXVpcmVfXy5lID0gKGNodW5rSWQpID0+IHtcblx0cmV0dXJuIFByb21pc2UuYWxsKE9iamVjdC5rZXlzKF9fd2VicGFja19yZXF1aXJlX18uZikucmVkdWNlKChwcm9taXNlcywga2V5KSA9PiB7XG5cdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5mW2tleV0oY2h1bmtJZCwgcHJvbWlzZXMpO1xuXHRcdHJldHVybiBwcm9taXNlcztcblx0fSwgW10pKTtcbn07IiwiLy8gVGhpcyBmdW5jdGlvbiBhbGxvdyB0byByZWZlcmVuY2UgYXN5bmMgY2h1bmtzIGFuZCBjaHVua3MgdGhhdCB0aGUgZW50cnlwb2ludCBkZXBlbmRzIG9uXG5fX3dlYnBhY2tfcmVxdWlyZV9fLnUgPSAoY2h1bmtJZCkgPT4ge1xuXHQvLyByZXR1cm4gdXJsIGZvciBmaWxlbmFtZXMgYmFzZWQgb24gdGVtcGxhdGVcblx0cmV0dXJuIFwiXCIgKyBjaHVua0lkICsgXCIubWFpbi5qc1wiO1xufTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLmcgPSAoZnVuY3Rpb24oKSB7XG5cdGlmICh0eXBlb2YgZ2xvYmFsVGhpcyA9PT0gJ29iamVjdCcpIHJldHVybiBnbG9iYWxUaGlzO1xuXHR0cnkge1xuXHRcdHJldHVybiB0aGlzIHx8IG5ldyBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0aWYgKHR5cGVvZiB3aW5kb3cgPT09ICdvYmplY3QnKSByZXR1cm4gd2luZG93O1xuXHR9XG59KSgpOyIsIl9fd2VicGFja19yZXF1aXJlX18ubyA9IChvYmosIHByb3ApID0+IChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSkiLCIvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSAoZXhwb3J0cykgPT4ge1xuXHRpZihTeW1ib2wudG9TdHJpbmdUYWcpIHtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcblx0fVxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xufTsiLCJsZXQgc2NyaXB0VXJsO1xuaWYgKF9fd2VicGFja19yZXF1aXJlX18uZy5pbXBvcnRTY3JpcHRzKSBzY3JpcHRVcmwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLmcubG9jYXRpb24gKyBcIlwiO1xuY29uc3QgZG9jdW1lbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLmcuZG9jdW1lbnQ7XG5pZiAoIXNjcmlwdFVybCAmJiBkb2N1bWVudCkge1xuXHRpZiAoZG9jdW1lbnQuY3VycmVudFNjcmlwdD8udGFnTmFtZS50b1VwcGVyQ2FzZSgpID09PSAnU0NSSVBUJylcblx0XHRzY3JpcHRVcmwgPSBkb2N1bWVudC5jdXJyZW50U2NyaXB0LnNyYztcblx0aWYgKCFzY3JpcHRVcmwpIHtcblx0XHRjb25zdCBzY3JpcHRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJzY3JpcHRcIik7XG5cdFx0aWYoc2NyaXB0cy5sZW5ndGgpIHtcblx0XHRcdGxldCBpID0gc2NyaXB0cy5sZW5ndGggLSAxO1xuXHRcdFx0d2hpbGUgKGkgPiAtMSAmJiAoIXNjcmlwdFVybCB8fCAhL15odHRwKHM/KTovLnRlc3Qoc2NyaXB0VXJsKSkpIHNjcmlwdFVybCA9IHNjcmlwdHNbaS0tXS5zcmM7XG5cdFx0fVxuXHR9XG59XG4vLyBXaGVuIHN1cHBvcnRpbmcgYnJvd3NlcnMgd2hlcmUgYW4gYXV0b21hdGljIHB1YmxpY1BhdGggaXMgbm90IHN1cHBvcnRlZCB5b3UgbXVzdCBzcGVjaWZ5IGFuIG91dHB1dC5wdWJsaWNQYXRoIG1hbnVhbGx5IHZpYSBjb25maWd1cmF0aW9uXG4vLyBvciBwYXNzIGFuIGVtcHR5IHN0cmluZyAoXCJcIikgYW5kIHNldCB0aGUgX193ZWJwYWNrX3B1YmxpY19wYXRoX18gdmFyaWFibGUgZnJvbSB5b3VyIGNvZGUgdG8gdXNlIHlvdXIgb3duIGxvZ2ljLlxuaWYgKCFzY3JpcHRVcmwpIHRocm93IG5ldyBFcnJvcihcIkF1dG9tYXRpYyBwdWJsaWNQYXRoIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBicm93c2VyXCIpO1xuc2NyaXB0VXJsID0gc2NyaXB0VXJsLnJlcGxhY2UoL15ibG9iOi8sIFwiXCIpLnJlcGxhY2UoLyMuKiQvLCBcIlwiKS5yZXBsYWNlKC9cXD8uKiQvLCBcIlwiKS5yZXBsYWNlKC9cXC9bXlxcL10rJC8sIFwiL1wiKTtcbl9fd2VicGFja19yZXF1aXJlX18ucCA9IHNjcmlwdFVybDsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLmIgPSBzZWxmLmxvY2F0aW9uICsgXCJcIjtcblxuLy8gb2JqZWN0IHRvIHN0b3JlIGxvYWRlZCBjaHVua3Ncbi8vIFwiMVwiIG1lYW5zIFwiYWxyZWFkeSBsb2FkZWRcIlxudmFyIGluc3RhbGxlZENodW5rcyA9IHtcblx0XCJub2RlX21vZHVsZXNfdnNjb2RlX2RpZmZfZGlzdF93b3JrZXJfanNfZXNtXCI6IDFcbn07XG5cbi8vIGltcG9ydFNjcmlwdHMgY2h1bmsgbG9hZGluZ1xudmFyIGluc3RhbGxDaHVuayA9IChkYXRhKSA9PiB7XG5cdGxldCBbY2h1bmtJZHMsIG1vcmVNb2R1bGVzLCBydW50aW1lXSA9IGRhdGE7XG5cdGZvcih2YXIgbW9kdWxlSWQgaW4gbW9yZU1vZHVsZXMpIHtcblx0XHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8obW9yZU1vZHVsZXMsIG1vZHVsZUlkKSkge1xuXHRcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tW21vZHVsZUlkXSA9IG1vcmVNb2R1bGVzW21vZHVsZUlkXTtcblx0XHR9XG5cdH1cblx0aWYocnVudGltZSkgcnVudGltZShfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblx0d2hpbGUoY2h1bmtJZHMubGVuZ3RoKVxuXHRcdGluc3RhbGxlZENodW5rc1tjaHVua0lkcy5wb3AoKV0gPSAxO1xuXHRwYXJlbnRDaHVua0xvYWRpbmdGdW5jdGlvbihkYXRhKTtcbn07XG5fX3dlYnBhY2tfcmVxdWlyZV9fLmYuaSA9IChjaHVua0lkLCBwcm9taXNlcykgPT4ge1xuXHQvLyBcIjFcIiBpcyB0aGUgc2lnbmFsIGZvciBcImFscmVhZHkgbG9hZGVkXCJcblx0aWYoIWluc3RhbGxlZENodW5rc1tjaHVua0lkXSkge1xuXHRcdGlmKHRydWUpIHsgLy8gYWxsIGNodW5rcyBoYXZlIEpTXG5cdFx0XHRpbXBvcnRTY3JpcHRzKF9fd2VicGFja19yZXF1aXJlX18ucCArIF9fd2VicGFja19yZXF1aXJlX18udShjaHVua0lkKSk7XG5cdFx0fVxuXHR9XG59O1xuXG52YXIgY2h1bmtMb2FkaW5nR2xvYmFsID0gdGhpc1tcIndlYnBhY2tDaHVua2pkZXJvYm90X2lkZV9pbnRlcmZhY2VcIl0gPSB0aGlzW1wid2VicGFja0NodW5ramRlcm9ib3RfaWRlX2ludGVyZmFjZVwiXSB8fCBbXTtcbnZhciBwYXJlbnRDaHVua0xvYWRpbmdGdW5jdGlvbiA9IGNodW5rTG9hZGluZ0dsb2JhbC5wdXNoLmJpbmQoY2h1bmtMb2FkaW5nR2xvYmFsKTtcbmNodW5rTG9hZGluZ0dsb2JhbC5wdXNoID0gaW5zdGFsbENodW5rO1xuXG4vLyBubyBITVJcblxuLy8gbm8gSE1SIG1hbmlmZXN0IiwiY29uc3QgbmV4dCA9IF9fd2VicGFja19yZXF1aXJlX18ueDtcbl9fd2VicGFja19yZXF1aXJlX18ueCA9ICgpID0+IHtcblx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18uZShcInZlbmRvcnMtbm9kZV9tb2R1bGVzX3ZzY29kZV9kaWZmX2Rpc3Rfd2lyZV9qc1wiKS50aGVuKG5leHQpO1xufTsiLCIiLCIvLyBydW4gc3RhcnR1cFxudmFyIF9fd2VicGFja19leHBvcnRzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fLngoKTtcbiIsIiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==
package/dist/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jderobot-ide-interface",
3
- "version": "0.3.16",
3
+ "version": "0.3.18",
4
4
  "main": "dist/main.js",
5
5
  "typings": "dist/index.d.ts",
6
6
  "files": [