clientnode 4.0.1436 → 4.0.1438
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.
- package/dist/Lock.js +83 -94
- package/dist/Logger.js +163 -715
- package/dist/Semaphore.js +46 -81
- package/dist/array.js +337 -568
- package/dist/cli.js +37 -71
- package/dist/constants.js +110 -209
- package/dist/context.js +25 -229
- package/dist/cookie.js +48 -226
- package/dist/data-transfer.js +166 -725
- package/dist/datetime.js +241 -1059
- package/dist/domNode.js +277 -441
- package/dist/expression/evaluators.js +234 -1112
- package/dist/expression/helper.js +82 -135
- package/dist/expression/index.js +10 -1245
- package/dist/expression/indicator-functions.js +21 -239
- package/dist/expression/type.js +4 -34
- package/dist/filesystem.js +323 -309
- package/dist/function.js +51 -125
- package/dist/index.js +26 -2709
- package/dist/indicators.js +68 -440
- package/dist/module.js +98 -163
- package/dist/number.js +25 -423
- package/dist/object.js +774 -852
- package/dist/process.js +38 -245
- package/dist/property-types.js +96 -157
- package/dist/scope.js +56 -1825
- package/dist/string.js +603 -909
- package/dist/test-helper.js +171 -541
- package/dist/type.js +8 -37
- package/dist/utility.js +91 -336
- package/package.json +9 -10
- package/dist/Lock.d.ts +0 -39
- package/dist/Logger.d.ts +0 -102
- package/dist/Semaphore.d.ts +0 -29
- package/dist/array.d.ts +0 -150
- package/dist/bundle/Lock.js +0 -111
- package/dist/bundle/Logger.js +0 -705
- package/dist/bundle/Semaphore.js +0 -100
- package/dist/bundle/array.js +0 -648
- package/dist/bundle/cli.js +0 -85
- package/dist/bundle/constants.js +0 -225
- package/dist/bundle/context.js +0 -243
- package/dist/bundle/cookie.js +0 -262
- package/dist/bundle/data-transfer.js +0 -741
- package/dist/bundle/datetime.js +0 -1064
- package/dist/bundle/domNode.js +0 -471
- package/dist/bundle/expression/evaluators.js +0 -1115
- package/dist/bundle/expression/helper.js +0 -106
- package/dist/bundle/expression/index.js +0 -1223
- package/dist/bundle/expression/indicator-functions.js +0 -235
- package/dist/bundle/expression/type.js +0 -50
- package/dist/bundle/filesystem.js +0 -374
- package/dist/bundle/function.js +0 -105
- package/dist/bundle/index.js +0 -2686
- package/dist/bundle/indicators.js +0 -459
- package/dist/bundle/module.js +0 -180
- package/dist/bundle/number.js +0 -425
- package/dist/bundle/object.js +0 -1004
- package/dist/bundle/process.js +0 -275
- package/dist/bundle/property-types.js +0 -167
- package/dist/bundle/scope.js +0 -1808
- package/dist/bundle/string.js +0 -1095
- package/dist/bundle/test-helper.js +0 -690
- package/dist/bundle/type.js +0 -50
- package/dist/bundle/utility.js +0 -362
- package/dist/cli.d.ts +0 -31
- package/dist/compatible/Lock.js +0 -111
- package/dist/compatible/Logger.js +0 -705
- package/dist/compatible/Semaphore.js +0 -100
- package/dist/compatible/array.js +0 -648
- package/dist/compatible/cli.js +0 -85
- package/dist/compatible/constants.js +0 -225
- package/dist/compatible/context.js +0 -243
- package/dist/compatible/cookie.js +0 -262
- package/dist/compatible/data-transfer.js +0 -741
- package/dist/compatible/datetime.js +0 -1064
- package/dist/compatible/domNode.js +0 -471
- package/dist/compatible/expression/evaluators.js +0 -1115
- package/dist/compatible/expression/helper.js +0 -106
- package/dist/compatible/expression/index.js +0 -1223
- package/dist/compatible/expression/indicator-functions.js +0 -235
- package/dist/compatible/expression/type.js +0 -50
- package/dist/compatible/filesystem.js +0 -374
- package/dist/compatible/function.js +0 -105
- package/dist/compatible/index.js +0 -2686
- package/dist/compatible/indicators.js +0 -459
- package/dist/compatible/module.js +0 -180
- package/dist/compatible/number.js +0 -425
- package/dist/compatible/object.js +0 -1004
- package/dist/compatible/process.js +0 -275
- package/dist/compatible/property-types.js +0 -167
- package/dist/compatible/scope.js +0 -1808
- package/dist/compatible/string.js +0 -1095
- package/dist/compatible/test-helper.js +0 -690
- package/dist/compatible/type.js +0 -50
- package/dist/compatible/utility.js +0 -362
- package/dist/constants.d.ts +0 -99
- package/dist/context.d.ts +0 -8
- package/dist/cookie.d.ts +0 -31
- package/dist/data-transfer.d.ts +0 -45
- package/dist/datetime.d.ts +0 -37
- package/dist/domNode.d.ts +0 -82
- package/dist/expression/evaluators.d.ts +0 -55
- package/dist/expression/helper.d.ts +0 -4
- package/dist/expression/index.d.ts +0 -7
- package/dist/expression/indicator-functions.d.ts +0 -14
- package/dist/expression/type.d.ts +0 -70
- package/dist/filesystem.d.ts +0 -143
- package/dist/function.d.ts +0 -20
- package/dist/index.d.ts +0 -23
- package/dist/indicators.d.ts +0 -68
- package/dist/module.d.ts +0 -8
- package/dist/number.d.ts +0 -35
- package/dist/object.d.ts +0 -231
- package/dist/process.d.ts +0 -22
- package/dist/property-types.d.ts +0 -460
- package/dist/scope.d.ts +0 -44
- package/dist/string.d.ts +0 -312
- package/dist/test/Lock.d.ts +0 -1
- package/dist/test/Logger.d.ts +0 -1
- package/dist/test/Semaphore.d.ts +0 -1
- package/dist/test/array.d.ts +0 -1
- package/dist/test/cookie.d.ts +0 -1
- package/dist/test/data-transfer.d.ts +0 -1
- package/dist/test/datetime.d.ts +0 -1
- package/dist/test/domNode.d.ts +0 -1
- package/dist/test/expression/evaluators.d.ts +0 -1
- package/dist/test/expression/helper.d.ts +0 -1
- package/dist/test/expression/indicator-functions.d.ts +0 -1
- package/dist/test/filesystem.d.ts +0 -1
- package/dist/test/function.d.ts +0 -1
- package/dist/test/indicators.d.ts +0 -1
- package/dist/test/number.d.ts +0 -1
- package/dist/test/object.d.ts +0 -1
- package/dist/test/process.d.ts +0 -1
- package/dist/test/property-types.d.ts +0 -1
- package/dist/test/scope.d.ts +0 -1
- package/dist/test/string.d.ts +0 -1
- package/dist/test/utility.d.ts +0 -1
- package/dist/test-helper.d.ts +0 -143
- package/dist/type.d.ts +0 -230
- package/dist/utility.d.ts +0 -44
package/dist/function.js
CHANGED
|
@@ -1,117 +1,9 @@
|
|
|
1
|
-
'use strict';if(typeof module!=='undefined'&&module!==null&&eval('typeof require')!=='undefined'&&eval('require')!==null&&'main'in eval('require')&&eval('typeof require.main')!=='undefined'&&eval('require.main')!==null){var ORIGINAL_MAIN_MODULE=module;if(module!==eval('require.main')&&'paths'in module&&'paths'in eval('require.main')&&typeof __dirname!=='undefined'&&__dirname!==null)module.paths=eval('require.main.paths').concat(module.paths.filter(function(path){return eval('require.main.paths').includes(path)}))};if(typeof window==='undefined'||window===null)var window=(typeof global==='undefined'||global===null)?{}:global;(function webpackUniversalModuleDefinition(root, factory) {
|
|
2
|
-
if(typeof exports === 'object' && typeof module === 'object')
|
|
3
|
-
module.exports = factory(require("core-js/modules/es.array.includes.js"));
|
|
4
|
-
else if(typeof define === 'function' && define.amd)
|
|
5
|
-
define(["core-js/modules/es.array.includes.js"], factory);
|
|
6
|
-
else {
|
|
7
|
-
var a = typeof exports === 'object' ? factory(require("core-js/modules/es.array.includes.js")) : factory(root["core-js/modules/es.array.includes.js"]);
|
|
8
|
-
for(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];
|
|
9
|
-
}
|
|
10
|
-
})(this, function(__WEBPACK_EXTERNAL_MODULE__0__) {
|
|
11
|
-
return /******/ (function() { // webpackBootstrap
|
|
12
|
-
/******/ "use strict";
|
|
13
|
-
/******/ var __webpack_modules__ = ([
|
|
14
|
-
/* 0 */
|
|
15
|
-
/***/ (function(module) {
|
|
16
|
-
|
|
17
|
-
module.exports = __WEBPACK_EXTERNAL_MODULE__0__;
|
|
18
|
-
|
|
19
|
-
/***/ })
|
|
20
|
-
/******/ ]);
|
|
21
|
-
/************************************************************************/
|
|
22
|
-
/******/ // The module cache
|
|
23
|
-
/******/ var __webpack_module_cache__ = {};
|
|
24
|
-
/******/
|
|
25
|
-
/******/ // The require function
|
|
26
|
-
/******/ function __webpack_require__(moduleId) {
|
|
27
|
-
/******/ // Check if module is in cache
|
|
28
|
-
/******/ var cachedModule = __webpack_module_cache__[moduleId];
|
|
29
|
-
/******/ if (cachedModule !== undefined) {
|
|
30
|
-
/******/ return cachedModule.exports;
|
|
31
|
-
/******/ }
|
|
32
|
-
/******/ // Create a new module (and put it into the cache)
|
|
33
|
-
/******/ var module = __webpack_module_cache__[moduleId] = {
|
|
34
|
-
/******/ // no module.id needed
|
|
35
|
-
/******/ // no module.loaded needed
|
|
36
|
-
/******/ exports: {}
|
|
37
|
-
/******/ };
|
|
38
|
-
/******/
|
|
39
|
-
/******/ // Execute the module function
|
|
40
|
-
/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
|
|
41
|
-
/******/
|
|
42
|
-
/******/ // Return the exports of the module
|
|
43
|
-
/******/ return module.exports;
|
|
44
|
-
/******/ }
|
|
45
|
-
/******/
|
|
46
|
-
/************************************************************************/
|
|
47
|
-
/******/ /* webpack/runtime/compat get default export */
|
|
48
|
-
/******/ !function() {
|
|
49
|
-
/******/ // getDefaultExport function for compatibility with non-harmony modules
|
|
50
|
-
/******/ __webpack_require__.n = function(module) {
|
|
51
|
-
/******/ var getter = module && module.__esModule ?
|
|
52
|
-
/******/ function() { return module['default']; } :
|
|
53
|
-
/******/ function() { return module; };
|
|
54
|
-
/******/ __webpack_require__.d(getter, { a: getter });
|
|
55
|
-
/******/ return getter;
|
|
56
|
-
/******/ };
|
|
57
|
-
/******/ }();
|
|
58
|
-
/******/
|
|
59
|
-
/******/ /* webpack/runtime/define property getters */
|
|
60
|
-
/******/ !function() {
|
|
61
|
-
/******/ // define getter/value functions for harmony exports
|
|
62
|
-
/******/ __webpack_require__.d = function(exports, definition) {
|
|
63
|
-
/******/ if(Array.isArray(definition)) {
|
|
64
|
-
/******/ var i = 0;
|
|
65
|
-
/******/ while(i < definition.length) {
|
|
66
|
-
/******/ var key = definition[i++];
|
|
67
|
-
/******/ var binding = definition[i++];
|
|
68
|
-
/******/ if(!__webpack_require__.o(exports, key)) {
|
|
69
|
-
/******/ if(binding === 0) {
|
|
70
|
-
/******/ Object.defineProperty(exports, key, { enumerable: true, value: definition[i++] });
|
|
71
|
-
/******/ } else {
|
|
72
|
-
/******/ Object.defineProperty(exports, key, { enumerable: true, get: binding });
|
|
73
|
-
/******/ }
|
|
74
|
-
/******/ } else if(binding === 0) { i++; }
|
|
75
|
-
/******/ }
|
|
76
|
-
/******/ } else {
|
|
77
|
-
/******/ for(var key in definition) {
|
|
78
|
-
/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
|
|
79
|
-
/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
|
|
80
|
-
/******/ }
|
|
81
|
-
/******/ }
|
|
82
|
-
/******/ }
|
|
83
|
-
/******/ };
|
|
84
|
-
/******/ }();
|
|
85
|
-
/******/
|
|
86
|
-
/******/ /* webpack/runtime/hasOwnProperty shorthand */
|
|
87
|
-
/******/ !function() {
|
|
88
|
-
/******/ __webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }
|
|
89
|
-
/******/ }();
|
|
90
|
-
/******/
|
|
91
|
-
/******/ /* webpack/runtime/make namespace object */
|
|
92
|
-
/******/ !function() {
|
|
93
|
-
/******/ // define __esModule on exports
|
|
94
|
-
/******/ __webpack_require__.r = function(exports) {
|
|
95
|
-
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
|
|
96
|
-
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
97
|
-
/******/ }
|
|
98
|
-
/******/ Object.defineProperty(exports, '__esModule', { value: true });
|
|
99
|
-
/******/ };
|
|
100
|
-
/******/ }();
|
|
101
|
-
/******/
|
|
102
|
-
/************************************************************************/
|
|
103
|
-
var __webpack_exports__ = {};
|
|
104
|
-
__webpack_require__.r(__webpack_exports__);
|
|
105
|
-
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
106
|
-
/* harmony export */ getParameterNames: function() { return /* binding */ _getParameterNames; },
|
|
107
|
-
/* harmony export */ identity: function() { return /* binding */ identity; },
|
|
108
|
-
/* harmony export */ invertArrayFilter: function() { return /* binding */ invertArrayFilter; }
|
|
109
|
-
/* harmony export */ });
|
|
110
|
-
/* harmony import */ var core_js_modules_es_array_includes_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(0);
|
|
111
|
-
/* harmony import */ var core_js_modules_es_array_includes_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_includes_js__WEBPACK_IMPORTED_MODULE_0__);
|
|
112
1
|
// #!/usr/bin/env babel-node
|
|
113
2
|
// -*- coding: utf-8 -*-
|
|
114
|
-
/** @module function
|
|
3
|
+
/** @module function */
|
|
4
|
+
'use strict';
|
|
5
|
+
|
|
6
|
+
/* !
|
|
115
7
|
region header
|
|
116
8
|
[Project page](https://torben.website/clientnode)
|
|
117
9
|
|
|
@@ -124,26 +16,60 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
124
16
|
naming 3.0 unported license.
|
|
125
17
|
See https://creativecommons.org/licenses/by/3.0/deed.de
|
|
126
18
|
endregion
|
|
127
|
-
*/
|
|
19
|
+
*/
|
|
20
|
+
import "core-js/modules/es.array.includes.js";
|
|
21
|
+
import "core-js/modules/es.array.push.js";
|
|
22
|
+
/**
|
|
128
23
|
* Determines all parameter names from given callable (function or class,
|
|
129
24
|
* ...).
|
|
130
25
|
* @param callable - Function or function code to inspect.
|
|
131
26
|
* @returns List of parameter names.
|
|
132
|
-
*/
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
27
|
+
*/
|
|
28
|
+
export const getParameterNames = callable => {
|
|
29
|
+
const functionCode = (typeof callable === 'string' ? callable :
|
|
30
|
+
// Strip comments.
|
|
31
|
+
callable.toString()).replace(/((\/\/.*$)|(\/\*[\s\S]*?\*\/))/mg, '');
|
|
32
|
+
if (functionCode.startsWith('class')) return getParameterNames('function ' + functionCode.replace(/.*(constructor\([^)]+\))/m, '$1'));
|
|
33
|
+
|
|
34
|
+
// Try classic function declaration.
|
|
35
|
+
let parameter = /^function\s*[^(]*\(\s*([^)]*)\)/m.exec(functionCode);
|
|
36
|
+
if (parameter === null)
|
|
37
|
+
// Try arrow function declaration.
|
|
38
|
+
parameter = /^[^(]*\(\s*([^)]*)\) *=>.*/m.exec(functionCode);
|
|
39
|
+
if (parameter === null)
|
|
40
|
+
// Try one argument and without brackets arrow function declaration.
|
|
41
|
+
parameter = /([^= ]+) *=>.*/m.exec(functionCode);
|
|
42
|
+
const names = [];
|
|
43
|
+
if (parameter && parameter.length > 1 && parameter[1].trim().length) {
|
|
44
|
+
for (const name of parameter[1].split(','))
|
|
45
|
+
// Remove default parameter values.
|
|
46
|
+
names.push(name.replace(/=.+$/g, '').trim());
|
|
47
|
+
return names;
|
|
48
|
+
}
|
|
49
|
+
return names;
|
|
50
|
+
};
|
|
51
|
+
/**
|
|
138
52
|
* Implements the identity function.
|
|
139
53
|
* @param value - A value to return.
|
|
140
54
|
* @returns Returns the given value.
|
|
141
|
-
*/
|
|
55
|
+
*/
|
|
56
|
+
export const identity = value => value;
|
|
57
|
+
/**
|
|
142
58
|
* Inverted filter helper to inverse each given filter.
|
|
143
59
|
* @param filter - A function that filters an array.
|
|
144
60
|
* @returns The inverted filter.
|
|
145
|
-
*/
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
61
|
+
*/
|
|
62
|
+
export const invertArrayFilter = filter => {
|
|
63
|
+
return (data, ...additionalParameter) => {
|
|
64
|
+
if (Array.isArray(data)) {
|
|
65
|
+
const filteredData = filter(data, ...additionalParameter);
|
|
66
|
+
let result = [];
|
|
67
|
+
if (filteredData.length) {
|
|
68
|
+
for (const date of data) if (!filteredData.includes(date)) result.push(date);
|
|
69
|
+
} else result = data;
|
|
70
|
+
return result;
|
|
71
|
+
}
|
|
72
|
+
return data;
|
|
73
|
+
};
|
|
74
|
+
};
|
|
75
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vc3JjL2Z1bmN0aW9uLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vICMhL3Vzci9iaW4vZW52IGJhYmVsLW5vZGVcbi8vIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLVxuLyoqIEBtb2R1bGUgZnVuY3Rpb24gKi9cbid1c2Ugc3RyaWN0J1xuLyogIVxuICAgIHJlZ2lvbiBoZWFkZXJcbiAgICBbUHJvamVjdCBwYWdlXShodHRwczovL3RvcmJlbi53ZWJzaXRlL2NsaWVudG5vZGUpXG5cbiAgICBDb3B5cmlnaHQgVG9yYmVuIFNpY2tlcnQgKGluZm9bXCJ+YXR+XCJddG9yYmVuLndlYnNpdGUpIDE2LjEyLjIwMTJcblxuICAgIExpY2Vuc2VcbiAgICAtLS0tLS0tXG5cbiAgICBUaGlzIGxpYnJhcnkgd3JpdHRlbiBieSBUb3JiZW4gU2lja2VydCBzdGFuZHMgdW5kZXIgYSBjcmVhdGl2ZSBjb21tb25zXG4gICAgbmFtaW5nIDMuMCB1bnBvcnRlZCBsaWNlbnNlLlxuICAgIFNlZSBodHRwczovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnkvMy4wL2RlZWQuZGVcbiAgICBlbmRyZWdpb25cbiovXG5pbXBvcnQgdHlwZSB7QW55RnVuY3Rpb24sIEFycmF5VHJhbnNmb3JtZXJ9IGZyb20gJy4vdHlwZSdcblxuLyoqXG4gKiBEZXRlcm1pbmVzIGFsbCBwYXJhbWV0ZXIgbmFtZXMgZnJvbSBnaXZlbiBjYWxsYWJsZSAoZnVuY3Rpb24gb3IgY2xhc3MsXG4gKiAuLi4pLlxuICogQHBhcmFtIGNhbGxhYmxlIC0gRnVuY3Rpb24gb3IgZnVuY3Rpb24gY29kZSB0byBpbnNwZWN0LlxuICogQHJldHVybnMgTGlzdCBvZiBwYXJhbWV0ZXIgbmFtZXMuXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRQYXJhbWV0ZXJOYW1lcyA9IChcbiAgICBjYWxsYWJsZTogQW55RnVuY3Rpb24gfCBzdHJpbmdcbik6IEFycmF5PHN0cmluZz4gPT4ge1xuICAgIGNvbnN0IGZ1bmN0aW9uQ29kZTogc3RyaW5nID0gKFxuICAgICAgICAodHlwZW9mIGNhbGxhYmxlID09PSAnc3RyaW5nJykgP1xuICAgICAgICAgICAgY2FsbGFibGUgOlxuICAgICAgICAgICAgLy8gU3RyaXAgY29tbWVudHMuXG4gICAgICAgICAgICBjYWxsYWJsZS50b1N0cmluZygpXG4gICAgKS5yZXBsYWNlKC8oKFxcL1xcLy4qJCl8KFxcL1xcKltcXHNcXFNdKj9cXCpcXC8pKS9tZywgJycpXG5cbiAgICBpZiAoZnVuY3Rpb25Db2RlLnN0YXJ0c1dpdGgoJ2NsYXNzJykpXG4gICAgICAgIHJldHVybiBnZXRQYXJhbWV0ZXJOYW1lcyhcbiAgICAgICAgICAgICdmdW5jdGlvbiAnICtcbiAgICAgICAgICAgIGZ1bmN0aW9uQ29kZS5yZXBsYWNlKC8uKihjb25zdHJ1Y3RvclxcKFteKV0rXFwpKS9tLCAnJDEnKVxuICAgICAgICApXG5cbiAgICAvLyBUcnkgY2xhc3NpYyBmdW5jdGlvbiBkZWNsYXJhdGlvbi5cbiAgICBsZXQgcGFyYW1ldGVyOiBBcnJheTxzdHJpbmc+IHwgbnVsbCA9XG4gICAgICAgIC9eZnVuY3Rpb25cXHMqW14oXSpcXChcXHMqKFteKV0qKVxcKS9tLmV4ZWMoZnVuY3Rpb25Db2RlKVxuICAgIGlmIChwYXJhbWV0ZXIgPT09IG51bGwpXG4gICAgICAgIC8vIFRyeSBhcnJvdyBmdW5jdGlvbiBkZWNsYXJhdGlvbi5cbiAgICAgICAgcGFyYW1ldGVyID0gL15bXihdKlxcKFxccyooW14pXSopXFwpICo9Pi4qL20uZXhlYyhmdW5jdGlvbkNvZGUpXG4gICAgaWYgKHBhcmFtZXRlciA9PT0gbnVsbClcbiAgICAgICAgLy8gVHJ5IG9uZSBhcmd1bWVudCBhbmQgd2l0aG91dCBicmFja2V0cyBhcnJvdyBmdW5jdGlvbiBkZWNsYXJhdGlvbi5cbiAgICAgICAgcGFyYW1ldGVyID0gLyhbXj0gXSspICo9Pi4qL20uZXhlYyhmdW5jdGlvbkNvZGUpXG5cbiAgICBjb25zdCBuYW1lczogQXJyYXk8c3RyaW5nPiA9IFtdXG4gICAgaWYgKHBhcmFtZXRlciAmJiBwYXJhbWV0ZXIubGVuZ3RoID4gMSAmJiBwYXJhbWV0ZXJbMV0udHJpbSgpLmxlbmd0aCkge1xuICAgICAgICBmb3IgKGNvbnN0IG5hbWUgb2YgcGFyYW1ldGVyWzFdLnNwbGl0KCcsJykpXG4gICAgICAgICAgICAvLyBSZW1vdmUgZGVmYXVsdCBwYXJhbWV0ZXIgdmFsdWVzLlxuICAgICAgICAgICAgbmFtZXMucHVzaChuYW1lLnJlcGxhY2UoLz0uKyQvZywgJycpLnRyaW0oKSlcbiAgICAgICAgcmV0dXJuIG5hbWVzXG4gICAgfVxuXG4gICAgcmV0dXJuIG5hbWVzXG59XG4vKipcbiAqIEltcGxlbWVudHMgdGhlIGlkZW50aXR5IGZ1bmN0aW9uLlxuICogQHBhcmFtIHZhbHVlIC0gQSB2YWx1ZSB0byByZXR1cm4uXG4gKiBAcmV0dXJucyBSZXR1cm5zIHRoZSBnaXZlbiB2YWx1ZS5cbiAqL1xuZXhwb3J0IGNvbnN0IGlkZW50aXR5ID0gPFQ+KHZhbHVlOiBUKTogVCA9PiB2YWx1ZVxuLyoqXG4gKiBJbnZlcnRlZCBmaWx0ZXIgaGVscGVyIHRvIGludmVyc2UgZWFjaCBnaXZlbiBmaWx0ZXIuXG4gKiBAcGFyYW0gZmlsdGVyIC0gQSBmdW5jdGlvbiB0aGF0IGZpbHRlcnMgYW4gYXJyYXkuXG4gKiBAcmV0dXJucyBUaGUgaW52ZXJ0ZWQgZmlsdGVyLlxuICovXG5leHBvcnQgY29uc3QgaW52ZXJ0QXJyYXlGaWx0ZXIgPSA8VCwgRCA9IEFycmF5PHVua25vd24+PihmaWx0ZXI6IFQpOiBUID0+IHtcbiAgICByZXR1cm4gKChkYXRhOiBELCAuLi5hZGRpdGlvbmFsUGFyYW1ldGVyOiBBcnJheTx1bmtub3duPik6IEQgPT4ge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgY29uc3QgZmlsdGVyZWREYXRhOiBBcnJheTx1bmtub3duPiA9IChcbiAgICAgICAgICAgICAgICBmaWx0ZXIgYXMgdW5rbm93biBhcyBBcnJheVRyYW5zZm9ybWVyXG4gICAgICAgICAgICApKGRhdGEsIC4uLmFkZGl0aW9uYWxQYXJhbWV0ZXIpXG5cbiAgICAgICAgICAgIGxldCByZXN1bHQgPSBbXSBhcyBEXG4gICAgICAgICAgICBpZiAoZmlsdGVyZWREYXRhLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZGF0ZSBvZiBkYXRhKVxuICAgICAgICAgICAgICAgICAgICBpZiAoIWZpbHRlcmVkRGF0YS5pbmNsdWRlcyhkYXRlKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIChyZXN1bHQgYXMgQXJyYXk8dW5rbm93bj4pLnB1c2goZGF0ZSlcbiAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGRhdGFcblxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRhdGFcbiAgICB9KSBhcyB1bmtub3duIGFzIFRcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0EsWUFBWTs7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBYkE7QUFBQTtBQWdCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLE1BQU0saUJBQWlCLEdBQzFCLFFBQThCLElBQ2Q7RUFDaEIsTUFBTSxZQUFvQixHQUFHLENBQ3hCLE9BQU8sUUFBUSxLQUFLLFFBQVEsR0FDekIsUUFBUTtFQUNSO0VBQ0EsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQ3pCLE9BQU8sQ0FBQyxrQ0FBa0MsRUFBRSxFQUFFLENBQUM7RUFFakQsSUFBSSxZQUFZLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUNoQyxPQUFPLGlCQUFpQixDQUNwQixXQUFXLEdBQ1gsWUFBWSxDQUFDLE9BQU8sQ0FBQywyQkFBMkIsRUFBRSxJQUFJLENBQzFELENBQUM7O0VBRUw7RUFDQSxJQUFJLFNBQStCLEdBQy9CLGtDQUFrQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUM7RUFDekQsSUFBSSxTQUFTLEtBQUssSUFBSTtJQUNsQjtJQUNBLFNBQVMsR0FBRyw2QkFBNkIsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDO0VBQ2hFLElBQUksU0FBUyxLQUFLLElBQUk7SUFDbEI7SUFDQSxTQUFTLEdBQUcsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQztFQUVwRCxNQUFNLEtBQW9CLEdBQUcsRUFBRTtFQUMvQixJQUFJLFNBQVMsSUFBSSxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUU7SUFDakUsS0FBSyxNQUFNLElBQUksSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQztJQUN0QztJQUNBLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNoRCxPQUFPLEtBQUs7RUFDaEI7RUFFQSxPQUFPLEtBQUs7QUFDaEIsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLE1BQU0sUUFBUSxHQUFPLEtBQVEsSUFBUSxLQUFLO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLE1BQU0saUJBQWlCLEdBQTJCLE1BQVMsSUFBUTtFQUN0RSxPQUFRLENBQUMsSUFBTyxFQUFFLEdBQUcsbUJBQW1DLEtBQVE7SUFDNUQsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO01BQ3JCLE1BQU0sWUFBNEIsR0FDOUIsTUFBTSxDQUNSLElBQUksRUFBRSxHQUFHLG1CQUFtQixDQUFDO01BRS9CLElBQUksTUFBTSxHQUFHLEVBQU87TUFDcEIsSUFBSSxZQUFZLENBQUMsTUFBTSxFQUFFO1FBQ3JCLEtBQUssTUFBTSxJQUFJLElBQUksSUFBSSxFQUNuQixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFDM0IsTUFBTSxDQUFvQixJQUFJLENBQUMsSUFBSSxDQUFDO01BQ2pELENBQUMsTUFDRyxNQUFNLEdBQUcsSUFBSTtNQUVqQixPQUFPLE1BQU07SUFDakI7SUFFQSxPQUFPLElBQUk7RUFDZixDQUFDO0FBQ0wsQ0FBQyIsImlnbm9yZUxpc3QiOltdfQ==
|