@verified-network/verified-custody 0.1.8 → 0.1.9

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 (33) hide show
  1. package/package.json +6 -2
  2. package/dist/assets/icon128.png +0 -0
  3. package/dist/assets/icon16.png +0 -0
  4. package/dist/assets/icon32.png +0 -0
  5. package/dist/assets/icon48.png +0 -0
  6. package/dist/autoreload-bg.1777342b.js +0 -392
  7. package/dist/autoreload.af9e0afa.js +0 -393
  8. package/dist/manifest.json +0 -39
  9. package/dist/src/scripts/background.js +0 -866
  10. package/dist/src/scripts/content.js +0 -22029
  11. package/dist/src/static/options.b1269179.js +0 -22033
  12. package/dist/src/static/options.html +0 -9
  13. package/dist/src/static/popup.e3c8c7b7.js +0 -22043
  14. package/dist/src/static/popup.html +0 -9
  15. package/dist/webext-prod/assets/icon128.png +0 -0
  16. package/dist/webext-prod/assets/icon16.png +0 -0
  17. package/dist/webext-prod/assets/icon32.png +0 -0
  18. package/dist/webext-prod/assets/icon48.png +0 -0
  19. package/dist/webext-prod/manifest.json +0 -36
  20. package/dist/webext-prod/src/scripts/background.js +0 -2
  21. package/dist/webext-prod/src/scripts/background.js.map +0 -1
  22. package/dist/webext-prod/src/scripts/content.js +0 -35
  23. package/dist/webext-prod/src/scripts/content.js.map +0 -1
  24. package/dist/webext-prod/src/static/options.a111dcd9.js +0 -2
  25. package/dist/webext-prod/src/static/options.a111dcd9.js.map +0 -1
  26. package/dist/webext-prod/src/static/options.html +0 -1
  27. package/dist/webext-prod/src/static/popup.70071e3e.js +0 -35
  28. package/dist/webext-prod/src/static/popup.70071e3e.js.map +0 -1
  29. package/dist/webext-prod/src/static/popup.cc04f56e.js +0 -2
  30. package/dist/webext-prod/src/static/popup.cc04f56e.js.map +0 -1
  31. package/dist/webext-prod/src/static/popup.e8a65b8a.js +0 -35
  32. package/dist/webext-prod/src/static/popup.e8a65b8a.js.map +0 -1
  33. package/dist/webext-prod/src/static/popup.html +0 -1
package/package.json CHANGED
@@ -1,13 +1,15 @@
1
1
  {
2
2
  "name": "@verified-network/verified-custody",
3
- "version": "0.1.8",
3
+ "version": "0.1.9",
4
4
  "description": "React submodule for Custody of digital assets",
5
5
  "main": "dist/main.js",
6
6
  "scripts": {
7
7
  "test": "echo \"Error: no test specified\" && exit 1",
8
8
  "build": "webpack"
9
9
  },
10
- "files": ["dist"],
10
+ "files": [
11
+ "dist"
12
+ ],
11
13
  "keywords": [],
12
14
  "author": "",
13
15
  "license": "MIT",
@@ -15,6 +17,8 @@
15
17
  "@babel/core": "^7.24.5",
16
18
  "@babel/preset-env": "^7.24.5",
17
19
  "@babel/preset-react": "^7.24.1",
20
+ "@types/webextension-polyfill": "^0.12.3",
21
+ "webextension-polyfill": "^0.12.0",
18
22
  "webpack": "^5.90.3",
19
23
  "webpack-cli": "^5.1.4"
20
24
  },
Binary file
Binary file
Binary file
Binary file
@@ -1,392 +0,0 @@
1
- // modules are defined as an array
2
- // [ module function, map of requires ]
3
- //
4
- // map of requires is short require name -> numeric require
5
- //
6
- // anything defined in a previous bundle is accessed via the
7
- // orig method which is the require for previous bundles
8
-
9
- (function(modules, entry, mainEntry, parcelRequireName, globalName) {
10
- /* eslint-disable no-undef */
11
- var globalObject =
12
- typeof globalThis !== 'undefined'
13
- ? globalThis
14
- : typeof self !== 'undefined'
15
- ? self
16
- : typeof window !== 'undefined'
17
- ? window
18
- : typeof global !== 'undefined'
19
- ? global
20
- : {};
21
- /* eslint-enable no-undef */
22
-
23
- // Save the require from previous bundle to this closure if any
24
- var previousRequire =
25
- typeof globalObject[parcelRequireName] === 'function' &&
26
- globalObject[parcelRequireName];
27
-
28
- var cache = previousRequire.cache || {};
29
- // Do not use `require` to prevent Webpack from trying to bundle this call
30
- var nodeRequire =
31
- typeof module !== 'undefined' &&
32
- typeof module.require === 'function' &&
33
- module.require.bind(module);
34
-
35
- function newRequire(name, jumped) {
36
- if (!cache[name]) {
37
- if (!modules[name]) {
38
- // if we cannot find the module within our internal map or
39
- // cache jump to the current global require ie. the last bundle
40
- // that was added to the page.
41
- var currentRequire =
42
- typeof globalObject[parcelRequireName] === 'function' &&
43
- globalObject[parcelRequireName];
44
- if (!jumped && currentRequire) {
45
- return currentRequire(name, true);
46
- }
47
-
48
- // If there are other bundles on this page the require from the
49
- // previous one is saved to 'previousRequire'. Repeat this as
50
- // many times as there are bundles until the module is found or
51
- // we exhaust the require chain.
52
- if (previousRequire) {
53
- return previousRequire(name, true);
54
- }
55
-
56
- // Try the node require function if it exists.
57
- if (nodeRequire && typeof name === 'string') {
58
- return nodeRequire(name);
59
- }
60
-
61
- var err = new Error("Cannot find module '" + name + "'");
62
- err.code = 'MODULE_NOT_FOUND';
63
- throw err;
64
- }
65
-
66
- localRequire.resolve = resolve;
67
- localRequire.cache = {};
68
-
69
- var module = (cache[name] = new newRequire.Module(name));
70
-
71
- modules[name][0].call(
72
- module.exports,
73
- localRequire,
74
- module,
75
- module.exports,
76
- this,
77
- );
78
- }
79
-
80
- return cache[name].exports;
81
-
82
- function localRequire(x) {
83
- return newRequire(localRequire.resolve(x));
84
- }
85
-
86
- function resolve(x) {
87
- return modules[name][1][x] || x;
88
- }
89
- }
90
-
91
- function Module(moduleName) {
92
- this.id = moduleName;
93
- this.bundle = newRequire;
94
- this.exports = {};
95
- }
96
-
97
- newRequire.isParcelRequire = true;
98
- newRequire.Module = Module;
99
- newRequire.modules = modules;
100
- newRequire.cache = cache;
101
- newRequire.parent = previousRequire;
102
- newRequire.register = function(id, exports) {
103
- modules[id] = [
104
- function(require, module) {
105
- module.exports = exports;
106
- },
107
- {},
108
- ];
109
- };
110
-
111
- Object.defineProperty(newRequire, 'root', {
112
- get: function() {
113
- return globalObject[parcelRequireName];
114
- },
115
- });
116
-
117
- globalObject[parcelRequireName] = newRequire;
118
-
119
- for (var i = 0; i < entry.length; i++) {
120
- newRequire(entry[i]);
121
- }
122
-
123
- if (mainEntry) {
124
- // Expose entry point to Node, AMD or browser globals
125
- // Based on https://github.com/ForbesLindesay/umd/blob/master/template.js
126
- var mainExports = newRequire(mainEntry);
127
-
128
- // CommonJS
129
- if (typeof exports === 'object' && typeof module !== 'undefined') {
130
- module.exports = mainExports;
131
-
132
- // RequireJS
133
- } else if (typeof define === 'function' && define.amd) {
134
- define(function() {
135
- return mainExports;
136
- });
137
-
138
- // <script>
139
- } else if (globalName) {
140
- this[globalName] = mainExports;
141
- }
142
- }
143
- })({"2LQkc":[function(require,module,exports) {
144
- var HMR_HOST = "localhost";
145
- var HMR_PORT = null;
146
- var HMR_SECURE = false;
147
- var HMR_ENV_HASH = "d751713988987e9331980363e24189ce";
148
- module.bundle.HMR_BUNDLE_ID = "fea19916c1436d4f3e8a348b1777342b"; // @flow
149
- /* global HMR_HOST, HMR_PORT, HMR_ENV_HASH, HMR_SECURE */ /*::
150
- import type {
151
- HMRAsset,
152
- HMRMessage,
153
- } from '@parcel/reporter-dev-server/src/HMRServer.js';
154
- interface ParcelRequire {
155
- (string): mixed;
156
- cache: {|[string]: ParcelModule|};
157
- hotData: mixed;
158
- Module: any;
159
- parent: ?ParcelRequire;
160
- isParcelRequire: true;
161
- modules: {|[string]: [Function, {|[string]: string|}]|};
162
- HMR_BUNDLE_ID: string;
163
- root: ParcelRequire;
164
- }
165
- interface ParcelModule {
166
- hot: {|
167
- data: mixed,
168
- accept(cb: (Function) => void): void,
169
- dispose(cb: (mixed) => void): void,
170
- // accept(deps: Array<string> | string, cb: (Function) => void): void,
171
- // decline(): void,
172
- _acceptCallbacks: Array<(Function) => void>,
173
- _disposeCallbacks: Array<(mixed) => void>,
174
- |};
175
- }
176
- declare var module: {bundle: ParcelRequire, ...};
177
- declare var HMR_HOST: string;
178
- declare var HMR_PORT: string;
179
- declare var HMR_ENV_HASH: string;
180
- declare var HMR_SECURE: boolean;
181
- */ var OVERLAY_ID = '__parcel__error__overlay__';
182
- var OldModule = module.bundle.Module;
183
- function Module(moduleName) {
184
- OldModule.call(this, moduleName);
185
- this.hot = {
186
- data: module.bundle.hotData,
187
- _acceptCallbacks: [],
188
- _disposeCallbacks: [],
189
- accept: function(fn) {
190
- this._acceptCallbacks.push(fn || function() {
191
- });
192
- },
193
- dispose: function(fn) {
194
- this._disposeCallbacks.push(fn);
195
- }
196
- };
197
- module.bundle.hotData = undefined;
198
- }
199
- module.bundle.Module = Module;
200
- var checkedAssets/*: {|[string]: boolean|} */ , acceptedAssets/*: {|[string]: boolean|} */ , assetsToAccept/*: Array<[ParcelRequire, string]> */ ;
201
- function getHostname() {
202
- return HMR_HOST || (location.protocol.indexOf('http') === 0 ? location.hostname : 'localhost');
203
- }
204
- function getPort() {
205
- return HMR_PORT || location.port;
206
- }
207
- // eslint-disable-next-line no-redeclare
208
- var parent = module.bundle.parent;
209
- if ((!parent || !parent.isParcelRequire) && typeof WebSocket !== 'undefined') {
210
- var hostname = getHostname();
211
- var port = getPort();
212
- var protocol = HMR_SECURE || location.protocol == 'https:' && !/localhost|127.0.0.1|0.0.0.0/.test(hostname) ? 'wss' : 'ws';
213
- var ws = new WebSocket(protocol + '://' + hostname + (port ? ':' + port : '') + '/');
214
- // $FlowFixMe
215
- ws.onmessage = function(event/*: {data: string, ...} */ ) {
216
- checkedAssets = {
217
- };
218
- acceptedAssets = {
219
- };
220
- assetsToAccept = [];
221
- var data = JSON.parse(event.data);
222
- if (data.type === 'update') {
223
- // Remove error overlay if there is one
224
- removeErrorOverlay();
225
- let assets = data.assets.filter((asset)=>asset.envHash === HMR_ENV_HASH
226
- );
227
- // Handle HMR Update
228
- var handled = false;
229
- assets.forEach((asset)=>{
230
- var didAccept = asset.type === 'css' || asset.type === 'js' && hmrAcceptCheck(module.bundle.root, asset.id, asset.depsByBundle);
231
- if (didAccept) handled = true;
232
- });
233
- if (handled) {
234
- console.clear();
235
- assets.forEach(function(asset) {
236
- hmrApply(module.bundle.root, asset);
237
- });
238
- for(var i = 0; i < assetsToAccept.length; i++){
239
- var id = assetsToAccept[i][1];
240
- if (!acceptedAssets[id]) hmrAcceptRun(assetsToAccept[i][0], id);
241
- }
242
- } else window.location.reload();
243
- }
244
- if (data.type === 'error') {
245
- // Log parcel errors to console
246
- for (let ansiDiagnostic of data.diagnostics.ansi){
247
- let stack = ansiDiagnostic.codeframe ? ansiDiagnostic.codeframe : ansiDiagnostic.stack;
248
- console.error('🚨 [parcel]: ' + ansiDiagnostic.message + '\n' + stack + '\n\n' + ansiDiagnostic.hints.join('\n'));
249
- }
250
- // Render the fancy html overlay
251
- removeErrorOverlay();
252
- var overlay = createErrorOverlay(data.diagnostics.html);
253
- // $FlowFixMe
254
- document.body.appendChild(overlay);
255
- }
256
- };
257
- ws.onerror = function(e) {
258
- console.error(e.message);
259
- };
260
- ws.onclose = function(e) {
261
- console.warn('[parcel] 🚨 Connection to the HMR server was lost');
262
- };
263
- }
264
- function removeErrorOverlay() {
265
- var overlay = document.getElementById(OVERLAY_ID);
266
- if (overlay) {
267
- overlay.remove();
268
- console.log('[parcel] ✨ Error resolved');
269
- }
270
- }
271
- function createErrorOverlay(diagnostics) {
272
- var overlay = document.createElement('div');
273
- overlay.id = OVERLAY_ID;
274
- let errorHTML = '<div style="background: black; opacity: 0.85; font-size: 16px; color: white; position: fixed; height: 100%; width: 100%; top: 0px; left: 0px; padding: 30px; font-family: Menlo, Consolas, monospace; z-index: 9999;">';
275
- for (let diagnostic of diagnostics){
276
- let stack = diagnostic.codeframe ? diagnostic.codeframe : diagnostic.stack;
277
- errorHTML += `\n <div>\n <div style="font-size: 18px; font-weight: bold; margin-top: 20px;">\n 🚨 ${diagnostic.message}\n </div>\n <pre>\n ${stack}\n </pre>\n <div>\n ${diagnostic.hints.map((hint)=>'<div>' + hint + '</div>'
278
- ).join('')}\n </div>\n </div>\n `;
279
- }
280
- errorHTML += '</div>';
281
- overlay.innerHTML = errorHTML;
282
- return overlay;
283
- }
284
- function getParents(bundle, id) /*: Array<[ParcelRequire, string]> */ {
285
- var modules = bundle.modules;
286
- if (!modules) return [];
287
- var parents = [];
288
- var k, d, dep;
289
- for(k in modules)for(d in modules[k][1]){
290
- dep = modules[k][1][d];
291
- if (dep === id || Array.isArray(dep) && dep[dep.length - 1] === id) parents.push([
292
- bundle,
293
- k
294
- ]);
295
- }
296
- if (bundle.parent) parents = parents.concat(getParents(bundle.parent, id));
297
- return parents;
298
- }
299
- function updateLink(link) {
300
- var newLink = link.cloneNode();
301
- newLink.onload = function() {
302
- if (link.parentNode !== null) // $FlowFixMe
303
- link.parentNode.removeChild(link);
304
- };
305
- newLink.setAttribute('href', // $FlowFixMe
306
- link.getAttribute('href').split('?')[0] + '?' + Date.now());
307
- // $FlowFixMe
308
- link.parentNode.insertBefore(newLink, link.nextSibling);
309
- }
310
- var cssTimeout = null;
311
- function reloadCSS() {
312
- if (cssTimeout) return;
313
- cssTimeout = setTimeout(function() {
314
- var links = document.querySelectorAll('link[rel="stylesheet"]');
315
- for(var i = 0; i < links.length; i++){
316
- // $FlowFixMe[incompatible-type]
317
- var href = links[i].getAttribute('href');
318
- var hostname = getHostname();
319
- var servedFromHMRServer = hostname === 'localhost' ? new RegExp('^(https?:\\/\\/(0.0.0.0|127.0.0.1)|localhost):' + getPort()).test(href) : href.indexOf(hostname + ':' + getPort());
320
- var absolute = /^https?:\/\//i.test(href) && href.indexOf(window.location.origin) !== 0 && !servedFromHMRServer;
321
- if (!absolute) updateLink(links[i]);
322
- }
323
- cssTimeout = null;
324
- }, 50);
325
- }
326
- function hmrApply(bundle/*: ParcelRequire */ , asset/*: HMRAsset */ ) {
327
- var modules = bundle.modules;
328
- if (!modules) return;
329
- if (asset.type === 'css') {
330
- reloadCSS();
331
- return;
332
- }
333
- let deps = asset.depsByBundle[bundle.HMR_BUNDLE_ID];
334
- if (deps) {
335
- var fn = new Function('require', 'module', 'exports', asset.output);
336
- modules[asset.id] = [
337
- fn,
338
- deps
339
- ];
340
- } else if (bundle.parent) hmrApply(bundle.parent, asset);
341
- }
342
- function hmrAcceptCheck(bundle/*: ParcelRequire */ , id/*: string */ , depsByBundle/*: ?{ [string]: { [string]: string } }*/ ) {
343
- var modules = bundle.modules;
344
- if (!modules) return;
345
- if (depsByBundle && !depsByBundle[bundle.HMR_BUNDLE_ID]) {
346
- // If we reached the root bundle without finding where the asset should go,
347
- // there's nothing to do. Mark as "accepted" so we don't reload the page.
348
- if (!bundle.parent) return true;
349
- return hmrAcceptCheck(bundle.parent, id, depsByBundle);
350
- }
351
- if (checkedAssets[id]) return;
352
- checkedAssets[id] = true;
353
- var cached = bundle.cache[id];
354
- assetsToAccept.push([
355
- bundle,
356
- id
357
- ]);
358
- if (cached && cached.hot && cached.hot._acceptCallbacks.length) return true;
359
- return getParents(module.bundle.root, id).some(function(v) {
360
- return hmrAcceptCheck(v[0], v[1], null);
361
- });
362
- }
363
- function hmrAcceptRun(bundle/*: ParcelRequire */ , id/*: string */ ) {
364
- var cached = bundle.cache[id];
365
- bundle.hotData = {
366
- };
367
- if (cached && cached.hot) cached.hot.data = bundle.hotData;
368
- if (cached && cached.hot && cached.hot._disposeCallbacks.length) cached.hot._disposeCallbacks.forEach(function(cb) {
369
- cb(bundle.hotData);
370
- });
371
- delete bundle.cache[id];
372
- bundle(id);
373
- cached = bundle.cache[id];
374
- if (cached && cached.hot && cached.hot._acceptCallbacks.length) cached.hot._acceptCallbacks.forEach(function(cb) {
375
- var assetsToAlsoAccept = cb(function() {
376
- return getParents(module.bundle.root, id);
377
- });
378
- if (assetsToAlsoAccept && assetsToAccept.length) assetsToAccept.push.apply(assetsToAccept, assetsToAlsoAccept);
379
- });
380
- acceptedAssets[id] = true;
381
- }
382
-
383
- },{}],"2F2EN":[function(require,module,exports) {
384
- "use strict";
385
- /* global window */ var env = window.chrome || window.browser;
386
- env.runtime.onMessage.addListener(function(msg) {
387
- if (msg.__parcel_hmr_reload__) env.runtime.reload();
388
- });
389
-
390
- },{}]},["2LQkc","2F2EN"], "2F2EN", "parcelRequire5c9f")
391
-
392
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,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R0FBRyxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUM1RCxNQUFNLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLE9BQU8sVUFBVSxFQUFFO1lBQ3pDLGtCQUFrQixHQUFHLEVBQUU7bUJBQ2xCLFVBQVUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxFQUFFOztZQUV0QyxrQkFBa0IsSUFBSSxjQUFjLENBQUMsTUFBTSxFQUM3QyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLEVBQUUsa0JBQWtCOztJQUlsRSxjQUFjLENBQUMsRUFBRSxJQUFJLElBQUk7Ozs7Q0M3VzNCLFVBQVk7QUFFWixFQUFBLGVBQUEsRUFBbUIsS0FDZixHQUFHLEdBQUcsTUFBTSxDQUFDLE1BQU0sSUFBSSxNQUFNLENBQUMsT0FBTztBQUN6QyxHQUFHLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxXQUFXLFVBQVcsR0FBRztRQUN6QyxHQUFHLENBQUMscUJBQXFCLEVBQzNCLEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSIsInNvdXJjZXMiOlsibm9kZV9tb2R1bGVzL0BwYXJjZWwvY29uZmlnLXdlYmV4dGVuc2lvbi9ub2RlX21vZHVsZXMvQHBhcmNlbC9ydW50aW1lLWJyb3dzZXItaG1yL2xpYi9ydW50aW1lLTE3NjhkMmNiZTEzOTE0NGY1MzNjZGRiMzlmZmJmMjk4LmpzIiwibm9kZV9tb2R1bGVzL0BwYXJjZWwvdHJhbnNmb3JtZXItd2ViZXh0ZW5zaW9uL2xpYi9ydW50aW1lL2F1dG9yZWxvYWQtYmcuanMiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIEhNUl9IT1NUID0gXCJsb2NhbGhvc3RcIjt2YXIgSE1SX1BPUlQgPSBudWxsO3ZhciBITVJfU0VDVVJFID0gZmFsc2U7dmFyIEhNUl9FTlZfSEFTSCA9IFwiZDc1MTcxMzk4ODk4N2U5MzMxOTgwMzYzZTI0MTg5Y2VcIjttb2R1bGUuYnVuZGxlLkhNUl9CVU5ETEVfSUQgPSBcImZlYTE5OTE2YzE0MzZkNGYzZThhMzQ4YjE3NzczNDJiXCI7Ly8gQGZsb3dcbi8qIGdsb2JhbCBITVJfSE9TVCwgSE1SX1BPUlQsIEhNUl9FTlZfSEFTSCwgSE1SX1NFQ1VSRSAqL1xuXG4vKjo6XG5pbXBvcnQgdHlwZSB7XG4gIEhNUkFzc2V0LFxuICBITVJNZXNzYWdlLFxufSBmcm9tICdAcGFyY2VsL3JlcG9ydGVyLWRldi1zZXJ2ZXIvc3JjL0hNUlNlcnZlci5qcyc7XG5pbnRlcmZhY2UgUGFyY2VsUmVxdWlyZSB7XG4gIChzdHJpbmcpOiBtaXhlZDtcbiAgY2FjaGU6IHt8W3N0cmluZ106IFBhcmNlbE1vZHVsZXx9O1xuICBob3REYXRhOiBtaXhlZDtcbiAgTW9kdWxlOiBhbnk7XG4gIHBhcmVudDogP1BhcmNlbFJlcXVpcmU7XG4gIGlzUGFyY2VsUmVxdWlyZTogdHJ1ZTtcbiAgbW9kdWxlczoge3xbc3RyaW5nXTogW0Z1bmN0aW9uLCB7fFtzdHJpbmddOiBzdHJpbmd8fV18fTtcbiAgSE1SX0JVTkRMRV9JRDogc3RyaW5nO1xuICByb290OiBQYXJjZWxSZXF1aXJlO1xufVxuaW50ZXJmYWNlIFBhcmNlbE1vZHVsZSB7XG4gIGhvdDoge3xcbiAgICBkYXRhOiBtaXhlZCxcbiAgICBhY2NlcHQoY2I6IChGdW5jdGlvbikgPT4gdm9pZCk6IHZvaWQsXG4gICAgZGlzcG9zZShjYjogKG1peGVkKSA9PiB2b2lkKTogdm9pZCxcbiAgICAvLyBhY2NlcHQoZGVwczogQXJyYXk8c3RyaW5nPiB8IHN0cmluZywgY2I6IChGdW5jdGlvbikgPT4gdm9pZCk6IHZvaWQsXG4gICAgLy8gZGVjbGluZSgpOiB2b2lkLFxuICAgIF9hY2NlcHRDYWxsYmFja3M6IEFycmF5PChGdW5jdGlvbikgPT4gdm9pZD4sXG4gICAgX2Rpc3Bvc2VDYWxsYmFja3M6IEFycmF5PChtaXhlZCkgPT4gdm9pZD4sXG4gIHx9O1xufVxuZGVjbGFyZSB2YXIgbW9kdWxlOiB7YnVuZGxlOiBQYXJjZWxSZXF1aXJlLCAuLi59O1xuZGVjbGFyZSB2YXIgSE1SX0hPU1Q6IHN0cmluZztcbmRlY2xhcmUgdmFyIEhNUl9QT1JUOiBzdHJpbmc7XG5kZWNsYXJlIHZhciBITVJfRU5WX0hBU0g6IHN0cmluZztcbmRlY2xhcmUgdmFyIEhNUl9TRUNVUkU6IGJvb2xlYW47XG4qL1xuXG52YXIgT1ZFUkxBWV9JRCA9ICdfX3BhcmNlbF9fZXJyb3JfX292ZXJsYXlfXyc7XG5cbnZhciBPbGRNb2R1bGUgPSBtb2R1bGUuYnVuZGxlLk1vZHVsZTtcblxuZnVuY3Rpb24gTW9kdWxlKG1vZHVsZU5hbWUpIHtcbiAgT2xkTW9kdWxlLmNhbGwodGhpcywgbW9kdWxlTmFtZSk7XG4gIHRoaXMuaG90ID0ge1xuICAgIGRhdGE6IG1vZHVsZS5idW5kbGUuaG90RGF0YSxcbiAgICBfYWNjZXB0Q2FsbGJhY2tzOiBbXSxcbiAgICBfZGlzcG9zZUNhbGxiYWNrczogW10sXG4gICAgYWNjZXB0OiBmdW5jdGlvbihmbikge1xuICAgICAgdGhpcy5fYWNjZXB0Q2FsbGJhY2tzLnB1c2goZm4gfHwgZnVuY3Rpb24oKSB7fSk7XG4gICAgfSxcbiAgICBkaXNwb3NlOiBmdW5jdGlvbihmbikge1xuICAgICAgdGhpcy5fZGlzcG9zZUNhbGxiYWNrcy5wdXNoKGZuKTtcbiAgICB9LFxuICB9O1xuICBtb2R1bGUuYnVuZGxlLmhvdERhdGEgPSB1bmRlZmluZWQ7XG59XG5tb2R1bGUuYnVuZGxlLk1vZHVsZSA9IE1vZHVsZTtcblxudmFyIGNoZWNrZWRBc3NldHMgLyo6IHt8W3N0cmluZ106IGJvb2xlYW58fSAqLyxcbiAgYWNjZXB0ZWRBc3NldHMgLyo6IHt8W3N0cmluZ106IGJvb2xlYW58fSAqLyxcbiAgYXNzZXRzVG9BY2NlcHQgLyo6IEFycmF5PFtQYXJjZWxSZXF1aXJlLCBzdHJpbmddPiAqLztcblxuZnVuY3Rpb24gZ2V0SG9zdG5hbWUoKSB7XG4gIHJldHVybiAoXG4gICAgSE1SX0hPU1QgfHxcbiAgICAobG9jYXRpb24ucHJvdG9jb2wuaW5kZXhPZignaHR0cCcpID09PSAwID8gbG9jYXRpb24uaG9zdG5hbWUgOiAnbG9jYWxob3N0JylcbiAgKTtcbn1cblxuZnVuY3Rpb24gZ2V0UG9ydCgpIHtcbiAgcmV0dXJuIEhNUl9QT1JUIHx8IGxvY2F0aW9uLnBvcnQ7XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZWRlY2xhcmVcbnZhciBwYXJlbnQgPSBtb2R1bGUuYnVuZGxlLnBhcmVudDtcbmlmICgoIXBhcmVudCB8fCAhcGFyZW50LmlzUGFyY2VsUmVxdWlyZSkgJiYgdHlwZW9mIFdlYlNvY2tldCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgdmFyIGhvc3RuYW1lID0gZ2V0SG9zdG5hbWUoKTtcbiAgdmFyIHBvcnQgPSBnZXRQb3J0KCk7XG4gIHZhciBwcm90b2NvbCA9XG4gICAgSE1SX1NFQ1VSRSB8fFxuICAgIChsb2NhdGlvbi5wcm90b2NvbCA9PSAnaHR0cHM6JyAmJlxuICAgICAgIS9sb2NhbGhvc3R8MTI3LjAuMC4xfDAuMC4wLjAvLnRlc3QoaG9zdG5hbWUpKVxuICAgICAgPyAnd3NzJ1xuICAgICAgOiAnd3MnO1xuICB2YXIgd3MgPSBuZXcgV2ViU29ja2V0KFxuICAgIHByb3RvY29sICsgJzovLycgKyBob3N0bmFtZSArIChwb3J0ID8gJzonICsgcG9ydCA6ICcnKSArICcvJyxcbiAgKTtcbiAgLy8gJEZsb3dGaXhNZVxuICB3cy5vbm1lc3NhZ2UgPSBmdW5jdGlvbihldmVudCAvKjoge2RhdGE6IHN0cmluZywgLi4ufSAqLykge1xuICAgIGNoZWNrZWRBc3NldHMgPSAoe30gLyo6IHt8W3N0cmluZ106IGJvb2xlYW58fSAqLyk7XG4gICAgYWNjZXB0ZWRBc3NldHMgPSAoe30gLyo6IHt8W3N0cmluZ106IGJvb2xlYW58fSAqLyk7XG4gICAgYXNzZXRzVG9BY2NlcHQgPSBbXTtcblxuICAgIHZhciBkYXRhIC8qOiBITVJNZXNzYWdlICovID0gSlNPTi5wYXJzZShldmVudC5kYXRhKTtcblxuICAgIGlmIChkYXRhLnR5cGUgPT09ICd1cGRhdGUnKSB7XG4gICAgICAvLyBSZW1vdmUgZXJyb3Igb3ZlcmxheSBpZiB0aGVyZSBpcyBvbmVcbiAgICAgIHJlbW92ZUVycm9yT3ZlcmxheSgpO1xuXG4gICAgICBsZXQgYXNzZXRzID0gZGF0YS5hc3NldHMuZmlsdGVyKGFzc2V0ID0+IGFzc2V0LmVudkhhc2ggPT09IEhNUl9FTlZfSEFTSCk7XG5cbiAgICAgIC8vIEhhbmRsZSBITVIgVXBkYXRlXG4gICAgICB2YXIgaGFuZGxlZCA9IGZhbHNlO1xuICAgICAgYXNzZXRzLmZvckVhY2goYXNzZXQgPT4ge1xuICAgICAgICB2YXIgZGlkQWNjZXB0ID1cbiAgICAgICAgICBhc3NldC50eXBlID09PSAnY3NzJyB8fFxuICAgICAgICAgIChhc3NldC50eXBlID09PSAnanMnICYmXG4gICAgICAgICAgICBobXJBY2NlcHRDaGVjayhtb2R1bGUuYnVuZGxlLnJvb3QsIGFzc2V0LmlkLCBhc3NldC5kZXBzQnlCdW5kbGUpKTtcbiAgICAgICAgaWYgKGRpZEFjY2VwdCkge1xuICAgICAgICAgIGhhbmRsZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgaWYgKGhhbmRsZWQpIHtcbiAgICAgICAgY29uc29sZS5jbGVhcigpO1xuXG4gICAgICAgIGFzc2V0cy5mb3JFYWNoKGZ1bmN0aW9uKGFzc2V0KSB7XG4gICAgICAgICAgaG1yQXBwbHkobW9kdWxlLmJ1bmRsZS5yb290LCBhc3NldCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXNzZXRzVG9BY2NlcHQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICB2YXIgaWQgPSBhc3NldHNUb0FjY2VwdFtpXVsxXTtcbiAgICAgICAgICBpZiAoIWFjY2VwdGVkQXNzZXRzW2lkXSkge1xuICAgICAgICAgICAgaG1yQWNjZXB0UnVuKGFzc2V0c1RvQWNjZXB0W2ldWzBdLCBpZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGRhdGEudHlwZSA9PT0gJ2Vycm9yJykge1xuICAgICAgLy8gTG9nIHBhcmNlbCBlcnJvcnMgdG8gY29uc29sZVxuICAgICAgZm9yIChsZXQgYW5zaURpYWdub3N0aWMgb2YgZGF0YS5kaWFnbm9zdGljcy5hbnNpKSB7XG4gICAgICAgIGxldCBzdGFjayA9IGFuc2lEaWFnbm9zdGljLmNvZGVmcmFtZVxuICAgICAgICAgID8gYW5zaURpYWdub3N0aWMuY29kZWZyYW1lXG4gICAgICAgICAgOiBhbnNpRGlhZ25vc3RpYy5zdGFjaztcblxuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICfwn5qoIFtwYXJjZWxdOiAnICtcbiAgICAgICAgICAgIGFuc2lEaWFnbm9zdGljLm1lc3NhZ2UgK1xuICAgICAgICAgICAgJ1xcbicgK1xuICAgICAgICAgICAgc3RhY2sgK1xuICAgICAgICAgICAgJ1xcblxcbicgK1xuICAgICAgICAgICAgYW5zaURpYWdub3N0aWMuaGludHMuam9pbignXFxuJyksXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIC8vIFJlbmRlciB0aGUgZmFuY3kgaHRtbCBvdmVybGF5XG4gICAgICByZW1vdmVFcnJvck92ZXJsYXkoKTtcbiAgICAgIHZhciBvdmVybGF5ID0gY3JlYXRlRXJyb3JPdmVybGF5KGRhdGEuZGlhZ25vc3RpY3MuaHRtbCk7XG4gICAgICAvLyAkRmxvd0ZpeE1lXG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG92ZXJsYXkpO1xuICAgIH1cbiAgfTtcbiAgd3Mub25lcnJvciA9IGZ1bmN0aW9uKGUpIHtcbiAgICBjb25zb2xlLmVycm9yKGUubWVzc2FnZSk7XG4gIH07XG4gIHdzLm9uY2xvc2UgPSBmdW5jdGlvbihlKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52LlBBUkNFTF9CVUlMRF9FTlYgIT09ICd0ZXN0Jykge1xuICAgICAgY29uc29sZS53YXJuKCdbcGFyY2VsXSDwn5qoIENvbm5lY3Rpb24gdG8gdGhlIEhNUiBzZXJ2ZXIgd2FzIGxvc3QnKTtcbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUVycm9yT3ZlcmxheSgpIHtcbiAgdmFyIG92ZXJsYXkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChPVkVSTEFZX0lEKTtcbiAgaWYgKG92ZXJsYXkpIHtcbiAgICBvdmVybGF5LnJlbW92ZSgpO1xuICAgIGNvbnNvbGUubG9nKCdbcGFyY2VsXSDinKggRXJyb3IgcmVzb2x2ZWQnKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVFcnJvck92ZXJsYXkoZGlhZ25vc3RpY3MpIHtcbiAgdmFyIG92ZXJsYXkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgb3ZlcmxheS5pZCA9IE9WRVJMQVlfSUQ7XG5cbiAgbGV0IGVycm9ySFRNTCA9XG4gICAgJzxkaXYgc3R5bGU9XCJiYWNrZ3JvdW5kOiBibGFjazsgb3BhY2l0eTogMC44NTsgZm9udC1zaXplOiAxNnB4OyBjb2xvcjogd2hpdGU7IHBvc2l0aW9uOiBmaXhlZDsgaGVpZ2h0OiAxMDAlOyB3aWR0aDogMTAwJTsgdG9wOiAwcHg7IGxlZnQ6IDBweDsgcGFkZGluZzogMzBweDsgZm9udC1mYW1pbHk6IE1lbmxvLCBDb25zb2xhcywgbW9ub3NwYWNlOyB6LWluZGV4OiA5OTk5O1wiPic7XG5cbiAgZm9yIChsZXQgZGlhZ25vc3RpYyBvZiBkaWFnbm9zdGljcykge1xuICAgIGxldCBzdGFjayA9IGRpYWdub3N0aWMuY29kZWZyYW1lID8gZGlhZ25vc3RpYy5jb2RlZnJhbWUgOiBkaWFnbm9zdGljLnN0YWNrO1xuXG4gICAgZXJyb3JIVE1MICs9IGBcbiAgICAgIDxkaXY+XG4gICAgICAgIDxkaXYgc3R5bGU9XCJmb250LXNpemU6IDE4cHg7IGZvbnQtd2VpZ2h0OiBib2xkOyBtYXJnaW4tdG9wOiAyMHB4O1wiPlxuICAgICAgICAgIPCfmqggJHtkaWFnbm9zdGljLm1lc3NhZ2V9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8cHJlPlxuICAgICAgICAgICR7c3RhY2t9XG4gICAgICAgIDwvcHJlPlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgICR7ZGlhZ25vc3RpYy5oaW50cy5tYXAoaGludCA9PiAnPGRpdj4nICsgaGludCArICc8L2Rpdj4nKS5qb2luKCcnKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICBgO1xuICB9XG5cbiAgZXJyb3JIVE1MICs9ICc8L2Rpdj4nO1xuXG4gIG92ZXJsYXkuaW5uZXJIVE1MID0gZXJyb3JIVE1MO1xuXG4gIHJldHVybiBvdmVybGF5O1xufVxuXG5mdW5jdGlvbiBnZXRQYXJlbnRzKGJ1bmRsZSwgaWQpIC8qOiBBcnJheTxbUGFyY2VsUmVxdWlyZSwgc3RyaW5nXT4gKi8ge1xuICB2YXIgbW9kdWxlcyA9IGJ1bmRsZS5tb2R1bGVzO1xuICBpZiAoIW1vZHVsZXMpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICB2YXIgcGFyZW50cyA9IFtdO1xuICB2YXIgaywgZCwgZGVwO1xuXG4gIGZvciAoayBpbiBtb2R1bGVzKSB7XG4gICAgZm9yIChkIGluIG1vZHVsZXNba11bMV0pIHtcbiAgICAgIGRlcCA9IG1vZHVsZXNba11bMV1bZF07XG5cbiAgICAgIGlmIChkZXAgPT09IGlkIHx8IChBcnJheS5pc0FycmF5KGRlcCkgJiYgZGVwW2RlcC5sZW5ndGggLSAxXSA9PT0gaWQpKSB7XG4gICAgICAgIHBhcmVudHMucHVzaChbYnVuZGxlLCBrXSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGJ1bmRsZS5wYXJlbnQpIHtcbiAgICBwYXJlbnRzID0gcGFyZW50cy5jb25jYXQoZ2V0UGFyZW50cyhidW5kbGUucGFyZW50LCBpZCkpO1xuICB9XG5cbiAgcmV0dXJuIHBhcmVudHM7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUxpbmsobGluaykge1xuICB2YXIgbmV3TGluayA9IGxpbmsuY2xvbmVOb2RlKCk7XG4gIG5ld0xpbmsub25sb2FkID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKGxpbmsucGFyZW50Tm9kZSAhPT0gbnVsbCkge1xuICAgICAgLy8gJEZsb3dGaXhNZVxuICAgICAgbGluay5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGxpbmspO1xuICAgIH1cbiAgfTtcbiAgbmV3TGluay5zZXRBdHRyaWJ1dGUoXG4gICAgJ2hyZWYnLFxuICAgIC8vICRGbG93Rml4TWVcbiAgICBsaW5rLmdldEF0dHJpYnV0ZSgnaHJlZicpLnNwbGl0KCc/JylbMF0gKyAnPycgKyBEYXRlLm5vdygpLFxuICApO1xuICAvLyAkRmxvd0ZpeE1lXG4gIGxpbmsucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUobmV3TGluaywgbGluay5uZXh0U2libGluZyk7XG59XG5cbnZhciBjc3NUaW1lb3V0ID0gbnVsbDtcbmZ1bmN0aW9uIHJlbG9hZENTUygpIHtcbiAgaWYgKGNzc1RpbWVvdXQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjc3NUaW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICB2YXIgbGlua3MgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdsaW5rW3JlbD1cInN0eWxlc2hlZXRcIl0nKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmtzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS10eXBlXVxuICAgICAgdmFyIGhyZWYgLyo6IHN0cmluZyAqLyA9IGxpbmtzW2ldLmdldEF0dHJpYnV0ZSgnaHJlZicpO1xuICAgICAgdmFyIGhvc3RuYW1lID0gZ2V0SG9zdG5hbWUoKTtcbiAgICAgIHZhciBzZXJ2ZWRGcm9tSE1SU2VydmVyID1cbiAgICAgICAgaG9zdG5hbWUgPT09ICdsb2NhbGhvc3QnXG4gICAgICAgICAgPyBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgICAnXihodHRwcz86XFxcXC9cXFxcLygwLjAuMC4wfDEyNy4wLjAuMSl8bG9jYWxob3N0KTonICsgZ2V0UG9ydCgpLFxuICAgICAgICAgICAgKS50ZXN0KGhyZWYpXG4gICAgICAgICAgOiBocmVmLmluZGV4T2YoaG9zdG5hbWUgKyAnOicgKyBnZXRQb3J0KCkpO1xuICAgICAgdmFyIGFic29sdXRlID1cbiAgICAgICAgL15odHRwcz86XFwvXFwvL2kudGVzdChocmVmKSAmJlxuICAgICAgICBocmVmLmluZGV4T2Yod2luZG93LmxvY2F0aW9uLm9yaWdpbikgIT09IDAgJiZcbiAgICAgICAgIXNlcnZlZEZyb21ITVJTZXJ2ZXI7XG4gICAgICBpZiAoIWFic29sdXRlKSB7XG4gICAgICAgIHVwZGF0ZUxpbmsobGlua3NbaV0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNzc1RpbWVvdXQgPSBudWxsO1xuICB9LCA1MCk7XG59XG5cbmZ1bmN0aW9uIGhtckFwcGx5KGJ1bmRsZSAvKjogUGFyY2VsUmVxdWlyZSAqLywgYXNzZXQgLyo6ICBITVJBc3NldCAqLykge1xuICB2YXIgbW9kdWxlcyA9IGJ1bmRsZS5tb2R1bGVzO1xuICBpZiAoIW1vZHVsZXMpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoYXNzZXQudHlwZSA9PT0gJ2NzcycpIHtcbiAgICByZWxvYWRDU1MoKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBsZXQgZGVwcyA9IGFzc2V0LmRlcHNCeUJ1bmRsZVtidW5kbGUuSE1SX0JVTkRMRV9JRF07XG4gIGlmIChkZXBzKSB7XG4gICAgdmFyIGZuID0gbmV3IEZ1bmN0aW9uKCdyZXF1aXJlJywgJ21vZHVsZScsICdleHBvcnRzJywgYXNzZXQub3V0cHV0KTtcbiAgICBtb2R1bGVzW2Fzc2V0LmlkXSA9IFtmbiwgZGVwc107XG4gIH0gZWxzZSBpZiAoYnVuZGxlLnBhcmVudCkge1xuICAgIGhtckFwcGx5KGJ1bmRsZS5wYXJlbnQsIGFzc2V0KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBobXJBY2NlcHRDaGVjayhcbiAgYnVuZGxlIC8qOiBQYXJjZWxSZXF1aXJlICovLFxuICBpZCAvKjogc3RyaW5nICovLFxuICBkZXBzQnlCdW5kbGUgLyo6ID97IFtzdHJpbmddOiB7IFtzdHJpbmddOiBzdHJpbmcgfSB9Ki8sXG4pIHtcbiAgdmFyIG1vZHVsZXMgPSBidW5kbGUubW9kdWxlcztcbiAgaWYgKCFtb2R1bGVzKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGRlcHNCeUJ1bmRsZSAmJiAhZGVwc0J5QnVuZGxlW2J1bmRsZS5ITVJfQlVORExFX0lEXSkge1xuICAgIC8vIElmIHdlIHJlYWNoZWQgdGhlIHJvb3QgYnVuZGxlIHdpdGhvdXQgZmluZGluZyB3aGVyZSB0aGUgYXNzZXQgc2hvdWxkIGdvLFxuICAgIC8vIHRoZXJlJ3Mgbm90aGluZyB0byBkby4gTWFyayBhcyBcImFjY2VwdGVkXCIgc28gd2UgZG9uJ3QgcmVsb2FkIHRoZSBwYWdlLlxuICAgIGlmICghYnVuZGxlLnBhcmVudCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGhtckFjY2VwdENoZWNrKGJ1bmRsZS5wYXJlbnQsIGlkLCBkZXBzQnlCdW5kbGUpO1xuICB9XG5cbiAgaWYgKGNoZWNrZWRBc3NldHNbaWRdKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY2hlY2tlZEFzc2V0c1tpZF0gPSB0cnVlO1xuXG4gIHZhciBjYWNoZWQgPSBidW5kbGUuY2FjaGVbaWRdO1xuXG4gIGFzc2V0c1RvQWNjZXB0LnB1c2goW2J1bmRsZSwgaWRdKTtcblxuICBpZiAoY2FjaGVkICYmIGNhY2hlZC5ob3QgJiYgY2FjaGVkLmhvdC5fYWNjZXB0Q2FsbGJhY2tzLmxlbmd0aCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGdldFBhcmVudHMobW9kdWxlLmJ1bmRsZS5yb290LCBpZCkuc29tZShmdW5jdGlvbih2KSB7XG4gICAgcmV0dXJuIGhtckFjY2VwdENoZWNrKHZbMF0sIHZbMV0sIG51bGwpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gaG1yQWNjZXB0UnVuKGJ1bmRsZSAvKjogUGFyY2VsUmVxdWlyZSAqLywgaWQgLyo6IHN0cmluZyAqLykge1xuICB2YXIgY2FjaGVkID0gYnVuZGxlLmNhY2hlW2lkXTtcbiAgYnVuZGxlLmhvdERhdGEgPSB7fTtcbiAgaWYgKGNhY2hlZCAmJiBjYWNoZWQuaG90KSB7XG4gICAgY2FjaGVkLmhvdC5kYXRhID0gYnVuZGxlLmhvdERhdGE7XG4gIH1cblxuICBpZiAoY2FjaGVkICYmIGNhY2hlZC5ob3QgJiYgY2FjaGVkLmhvdC5fZGlzcG9zZUNhbGxiYWNrcy5sZW5ndGgpIHtcbiAgICBjYWNoZWQuaG90Ll9kaXNwb3NlQ2FsbGJhY2tzLmZvckVhY2goZnVuY3Rpb24oY2IpIHtcbiAgICAgIGNiKGJ1bmRsZS5ob3REYXRhKTtcbiAgICB9KTtcbiAgfVxuXG4gIGRlbGV0ZSBidW5kbGUuY2FjaGVbaWRdO1xuICBidW5kbGUoaWQpO1xuXG4gIGNhY2hlZCA9IGJ1bmRsZS5jYWNoZVtpZF07XG4gIGlmIChjYWNoZWQgJiYgY2FjaGVkLmhvdCAmJiBjYWNoZWQuaG90Ll9hY2NlcHRDYWxsYmFja3MubGVuZ3RoKSB7XG4gICAgY2FjaGVkLmhvdC5fYWNjZXB0Q2FsbGJhY2tzLmZvckVhY2goZnVuY3Rpb24oY2IpIHtcbiAgICAgIHZhciBhc3NldHNUb0Fsc29BY2NlcHQgPSBjYihmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGdldFBhcmVudHMobW9kdWxlLmJ1bmRsZS5yb290LCBpZCk7XG4gICAgICB9KTtcbiAgICAgIGlmIChhc3NldHNUb0Fsc29BY2NlcHQgJiYgYXNzZXRzVG9BY2NlcHQubGVuZ3RoKSB7XG4gICAgICAgIGFzc2V0c1RvQWNjZXB0LnB1c2guYXBwbHkoYXNzZXRzVG9BY2NlcHQsIGFzc2V0c1RvQWxzb0FjY2VwdCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgYWNjZXB0ZWRBc3NldHNbaWRdID0gdHJ1ZTtcbn1cbiIsIlwidXNlIHN0cmljdFwiO1xuXG4vKiBnbG9iYWwgd2luZG93ICovXG52YXIgZW52ID0gd2luZG93LmNocm9tZSB8fCB3aW5kb3cuYnJvd3NlcjtcbmVudi5ydW50aW1lLm9uTWVzc2FnZS5hZGRMaXN0ZW5lcihmdW5jdGlvbiAobXNnKSB7XG4gIGlmIChtc2cuX19wYXJjZWxfaG1yX3JlbG9hZF9fKSB7XG4gICAgZW52LnJ1bnRpbWUucmVsb2FkKCk7XG4gIH1cbn0pOyJdLCJuYW1lcyI6W10sInZlcnNpb24iOjMsImZpbGUiOiJhdXRvcmVsb2FkLWJnLkhBU0hfUkVGX2ZlYTE5OTE2YzE0MzZkNGYzZThhMzQ4YjE3NzczNDJiLmpzLm1hcCJ9