clientnode 4.0.1435 → 4.0.1437
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 +78 -164
- package/dist/number.js +25 -423
- package/dist/object.js +771 -852
- package/dist/process.js +39 -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 +2 -2
- 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/Lock.js
CHANGED
|
@@ -1,71 +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();
|
|
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, function() {
|
|
11
|
-
return /******/ (function() { // webpackBootstrap
|
|
12
|
-
/******/ "use strict";
|
|
13
|
-
/******/ // The require scope
|
|
14
|
-
/******/ var __webpack_require__ = {};
|
|
15
|
-
/******/
|
|
16
|
-
/************************************************************************/
|
|
17
|
-
/******/ /* webpack/runtime/define property getters */
|
|
18
|
-
/******/ !function() {
|
|
19
|
-
/******/ // define getter/value functions for harmony exports
|
|
20
|
-
/******/ __webpack_require__.d = function(exports, definition) {
|
|
21
|
-
/******/ if(Array.isArray(definition)) {
|
|
22
|
-
/******/ var i = 0;
|
|
23
|
-
/******/ while(i < definition.length) {
|
|
24
|
-
/******/ var key = definition[i++];
|
|
25
|
-
/******/ var binding = definition[i++];
|
|
26
|
-
/******/ if(!__webpack_require__.o(exports, key)) {
|
|
27
|
-
/******/ if(binding === 0) {
|
|
28
|
-
/******/ Object.defineProperty(exports, key, { enumerable: true, value: definition[i++] });
|
|
29
|
-
/******/ } else {
|
|
30
|
-
/******/ Object.defineProperty(exports, key, { enumerable: true, get: binding });
|
|
31
|
-
/******/ }
|
|
32
|
-
/******/ } else if(binding === 0) { i++; }
|
|
33
|
-
/******/ }
|
|
34
|
-
/******/ } else {
|
|
35
|
-
/******/ for(var key in definition) {
|
|
36
|
-
/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
|
|
37
|
-
/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
|
|
38
|
-
/******/ }
|
|
39
|
-
/******/ }
|
|
40
|
-
/******/ }
|
|
41
|
-
/******/ };
|
|
42
|
-
/******/ }();
|
|
43
|
-
/******/
|
|
44
|
-
/******/ /* webpack/runtime/hasOwnProperty shorthand */
|
|
45
|
-
/******/ !function() {
|
|
46
|
-
/******/ __webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }
|
|
47
|
-
/******/ }();
|
|
48
|
-
/******/
|
|
49
|
-
/******/ /* webpack/runtime/make namespace object */
|
|
50
|
-
/******/ !function() {
|
|
51
|
-
/******/ // define __esModule on exports
|
|
52
|
-
/******/ __webpack_require__.r = function(exports) {
|
|
53
|
-
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
|
|
54
|
-
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
55
|
-
/******/ }
|
|
56
|
-
/******/ Object.defineProperty(exports, '__esModule', { value: true });
|
|
57
|
-
/******/ };
|
|
58
|
-
/******/ }();
|
|
59
|
-
/******/
|
|
60
|
-
/************************************************************************/
|
|
61
|
-
var __webpack_exports__ = {};
|
|
62
|
-
__webpack_require__.r(__webpack_exports__);
|
|
63
|
-
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
64
|
-
/* harmony export */ Lock: function() { return /* binding */ Lock; }
|
|
65
|
-
/* harmony export */ });
|
|
66
1
|
// #!/usr/bin/env babel-node
|
|
67
2
|
// -*- coding: utf-8 -*-
|
|
68
|
-
/** @module Lock
|
|
3
|
+
/** @module Lock */
|
|
4
|
+
'use strict';
|
|
5
|
+
|
|
6
|
+
/* !
|
|
69
7
|
region header
|
|
70
8
|
[Project page](https://torben.website/clientnode)
|
|
71
9
|
|
|
@@ -78,34 +16,85 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
78
16
|
naming 3.0 unported license.
|
|
79
17
|
See https://creativecommons.org/licenses/by/3.0/deed.de
|
|
80
18
|
endregion
|
|
81
|
-
*/
|
|
19
|
+
*/
|
|
20
|
+
import "core-js/modules/es.array.push.js";
|
|
21
|
+
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
|
22
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
23
|
+
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
24
|
+
/**
|
|
82
25
|
* Represents the lock state.
|
|
83
26
|
* @property locks - Mapping of lock descriptions to their corresponding
|
|
84
27
|
* callbacks.
|
|
85
|
-
*/
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
28
|
+
*/
|
|
29
|
+
export class Lock {
|
|
30
|
+
/**
|
|
31
|
+
* Initializes locks.
|
|
32
|
+
* @param locks - Mapping of a lock description to callbacks for calling
|
|
33
|
+
* when given lock should be released.
|
|
34
|
+
*/
|
|
35
|
+
constructor(locks = {}) {
|
|
36
|
+
_defineProperty(this, "lock", void 0);
|
|
37
|
+
_defineProperty(this, "locks", void 0);
|
|
38
|
+
this.locks = locks;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Calling this method introduces a starting point for a critical area with
|
|
42
|
+
* potential race conditions. The area will be bind to given description
|
|
43
|
+
* string. So don't use same names for different areas.
|
|
44
|
+
* @param description - A short string describing the critical areas
|
|
45
|
+
* properties.
|
|
46
|
+
* @param callback - A procedure which should only be executed if the
|
|
47
|
+
* interpreter isn't in the given critical area. The lock description
|
|
48
|
+
* string will be given to the callback function.
|
|
49
|
+
* @param autoRelease - Release the lock after execution of given callback.
|
|
50
|
+
* @returns Returns a promise which will be resolved after releasing lock.
|
|
51
|
+
*/
|
|
52
|
+
acquire(description, callback, autoRelease = false) {
|
|
53
|
+
return new Promise(resolve => {
|
|
54
|
+
const wrappedCallback = description => {
|
|
55
|
+
let result;
|
|
56
|
+
if (callback) result = callback(description);
|
|
57
|
+
const finish = value => {
|
|
58
|
+
if (autoRelease) void this.release(description);
|
|
59
|
+
resolve(value);
|
|
60
|
+
return value;
|
|
61
|
+
};
|
|
62
|
+
if (result?.then) return result.then(finish);
|
|
63
|
+
finish(result);
|
|
64
|
+
return result;
|
|
65
|
+
};
|
|
66
|
+
if (description) {
|
|
67
|
+
if (Object.prototype.hasOwnProperty.call(this.locks, description)) this.locks[description].push(wrappedCallback);else {
|
|
68
|
+
this.locks[description] = [];
|
|
69
|
+
void wrappedCallback(description);
|
|
70
|
+
}
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
if (this.lock) this.lock.push(wrappedCallback);else {
|
|
74
|
+
this.lock = [];
|
|
75
|
+
void wrappedCallback(description);
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Calling this method causes the given critical area to be finished and
|
|
81
|
+
* all functions given to "acquire()" will be executed in right order.
|
|
82
|
+
* @param description - A short string describing the critical areas
|
|
83
|
+
* properties.
|
|
84
|
+
* @returns Returns the return (maybe promise resolved) value of the
|
|
85
|
+
* callback given to the "acquire" method.
|
|
86
|
+
*/
|
|
87
|
+
async release(description) {
|
|
88
|
+
if (description) {
|
|
89
|
+
if (Object.prototype.hasOwnProperty.call(this.locks, description)) {
|
|
90
|
+
const callback = this.locks[description].shift();
|
|
91
|
+
if (callback === undefined) delete this.locks[description];else return await callback(description);
|
|
92
|
+
}
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
const callback = this.lock?.shift();
|
|
96
|
+
if (callback === undefined) this.lock = undefined;else return await callback();
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
export default Lock;
|
|
100
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vc3JjL0xvY2sudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gIyEvdXNyL2Jpbi9lbnYgYmFiZWwtbm9kZVxuLy8gLSotIGNvZGluZzogdXRmLTggLSotXG4vKiogQG1vZHVsZSBMb2NrICovXG4ndXNlIHN0cmljdCdcbi8qICFcbiAgICByZWdpb24gaGVhZGVyXG4gICAgW1Byb2plY3QgcGFnZV0oaHR0cHM6Ly90b3JiZW4ud2Vic2l0ZS9jbGllbnRub2RlKVxuXG4gICAgQ29weXJpZ2h0IFRvcmJlbiBTaWNrZXJ0IChpbmZvW1wifmF0flwiXXRvcmJlbi53ZWJzaXRlKSAxNi4xMi4yMDEyXG5cbiAgICBMaWNlbnNlXG4gICAgLS0tLS0tLVxuXG4gICAgVGhpcyBsaWJyYXJ5IHdyaXR0ZW4gYnkgVG9yYmVuIFNpY2tlcnQgc3RhbmRzIHVuZGVyIGEgY3JlYXRpdmUgY29tbW9uc1xuICAgIG5hbWluZyAzLjAgdW5wb3J0ZWQgbGljZW5zZS5cbiAgICBTZWUgaHR0cHM6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LzMuMC9kZWVkLmRlXG4gICAgZW5kcmVnaW9uXG4qL1xuaW1wb3J0IHR5cGUge0xvY2tDYWxsYmFja0Z1bmN0aW9uLCBNYXBwaW5nfSBmcm9tICcuL3R5cGUnXG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgbG9jayBzdGF0ZS5cbiAqIEBwcm9wZXJ0eSBsb2NrcyAtIE1hcHBpbmcgb2YgbG9jayBkZXNjcmlwdGlvbnMgdG8gdGhlaXIgY29ycmVzcG9uZGluZ1xuICogY2FsbGJhY2tzLlxuICovXG5leHBvcnQgY2xhc3MgTG9jazxUeXBlID0gc3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gICAgbG9jaz86IEFycmF5PExvY2tDYWxsYmFja0Z1bmN0aW9uPFR5cGU+PlxuICAgIGxvY2tzOiBNYXBwaW5nPEFycmF5PExvY2tDYWxsYmFja0Z1bmN0aW9uPFR5cGU+Pj5cbiAgICAvKipcbiAgICAgKiBJbml0aWFsaXplcyBsb2Nrcy5cbiAgICAgKiBAcGFyYW0gbG9ja3MgLSBNYXBwaW5nIG9mIGEgbG9jayBkZXNjcmlwdGlvbiB0byBjYWxsYmFja3MgZm9yIGNhbGxpbmdcbiAgICAgKiB3aGVuIGdpdmVuIGxvY2sgc2hvdWxkIGJlIHJlbGVhc2VkLlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKGxvY2tzOiBNYXBwaW5nPEFycmF5PExvY2tDYWxsYmFja0Z1bmN0aW9uPFR5cGU+Pj4gPSB7fSkge1xuICAgICAgICB0aGlzLmxvY2tzID0gbG9ja3NcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2FsbGluZyB0aGlzIG1ldGhvZCBpbnRyb2R1Y2VzIGEgc3RhcnRpbmcgcG9pbnQgZm9yIGEgY3JpdGljYWwgYXJlYSB3aXRoXG4gICAgICogcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucy4gVGhlIGFyZWEgd2lsbCBiZSBiaW5kIHRvIGdpdmVuIGRlc2NyaXB0aW9uXG4gICAgICogc3RyaW5nLiBTbyBkb24ndCB1c2Ugc2FtZSBuYW1lcyBmb3IgZGlmZmVyZW50IGFyZWFzLlxuICAgICAqIEBwYXJhbSBkZXNjcmlwdGlvbiAtIEEgc2hvcnQgc3RyaW5nIGRlc2NyaWJpbmcgdGhlIGNyaXRpY2FsIGFyZWFzXG4gICAgICogcHJvcGVydGllcy5cbiAgICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBBIHByb2NlZHVyZSB3aGljaCBzaG91bGQgb25seSBiZSBleGVjdXRlZCBpZiB0aGVcbiAgICAgKiBpbnRlcnByZXRlciBpc24ndCBpbiB0aGUgZ2l2ZW4gY3JpdGljYWwgYXJlYS4gVGhlIGxvY2sgZGVzY3JpcHRpb25cbiAgICAgKiBzdHJpbmcgd2lsbCBiZSBnaXZlbiB0byB0aGUgY2FsbGJhY2sgZnVuY3Rpb24uXG4gICAgICogQHBhcmFtIGF1dG9SZWxlYXNlIC0gUmVsZWFzZSB0aGUgbG9jayBhZnRlciBleGVjdXRpb24gb2YgZ2l2ZW4gY2FsbGJhY2suXG4gICAgICogQHJldHVybnMgUmV0dXJucyBhIHByb21pc2Ugd2hpY2ggd2lsbCBiZSByZXNvbHZlZCBhZnRlciByZWxlYXNpbmcgbG9jay5cbiAgICAgKi9cbiAgICBhY3F1aXJlKFxuICAgICAgICBkZXNjcmlwdGlvbj86IHN0cmluZyxcbiAgICAgICAgY2FsbGJhY2s/OiBMb2NrQ2FsbGJhY2tGdW5jdGlvbjxUeXBlPixcbiAgICAgICAgYXV0b1JlbGVhc2UgPSBmYWxzZVxuICAgICk6IFByb21pc2U8VHlwZT4ge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8VHlwZT4oKHJlc29sdmU6ICh2YWx1ZTogVHlwZSkgPT4gdm9pZCk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgY29uc3Qgd3JhcHBlZENhbGxiYWNrOiBMb2NrQ2FsbGJhY2tGdW5jdGlvbjxUeXBlPiA9IChcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbj86IHN0cmluZ1xuICAgICAgICAgICAgKTogUHJvbWlzZTxUeXBlPiB8IFR5cGUgPT4ge1xuICAgICAgICAgICAgICAgIGxldCByZXN1bHQ6IFByb21pc2U8VHlwZT4gfCBUeXBlIHwgdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKVxuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBjYWxsYmFjayhkZXNjcmlwdGlvbilcblxuICAgICAgICAgICAgICAgIGNvbnN0IGZpbmlzaCA9ICh2YWx1ZTogVHlwZSk6IFR5cGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoYXV0b1JlbGVhc2UpXG4gICAgICAgICAgICAgICAgICAgICAgICB2b2lkIHRoaXMucmVsZWFzZShkZXNjcmlwdGlvbilcblxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHZhbHVlKVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICgocmVzdWx0IGFzIG51bGwgfCBQcm9taXNlPFR5cGU+KT8udGhlbilcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChyZXN1bHQgYXMgUHJvbWlzZTxUeXBlPikudGhlbihmaW5pc2gpXG5cbiAgICAgICAgICAgICAgICBmaW5pc2gocmVzdWx0IGFzIFR5cGUpXG5cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0IGFzIFR5cGVcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGRlc2NyaXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2NrcywgZGVzY3JpcHRpb24pXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvY2tzW2Rlc2NyaXB0aW9uXS5wdXNoKHdyYXBwZWRDYWxsYmFjaylcbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2Nrc1tkZXNjcmlwdGlvbl0gPSBbXVxuXG4gICAgICAgICAgICAgICAgICAgIHZvaWQgd3JhcHBlZENhbGxiYWNrKGRlc2NyaXB0aW9uKVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5sb2NrKVxuICAgICAgICAgICAgICAgIHRoaXMubG9jay5wdXNoKHdyYXBwZWRDYWxsYmFjaylcbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMubG9jayA9IFtdXG5cbiAgICAgICAgICAgICAgICB2b2lkIHdyYXBwZWRDYWxsYmFjayhkZXNjcmlwdGlvbilcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2FsbGluZyB0aGlzIG1ldGhvZCBjYXVzZXMgdGhlIGdpdmVuIGNyaXRpY2FsIGFyZWEgdG8gYmUgZmluaXNoZWQgYW5kXG4gICAgICogYWxsIGZ1bmN0aW9ucyBnaXZlbiB0byBcImFjcXVpcmUoKVwiIHdpbGwgYmUgZXhlY3V0ZWQgaW4gcmlnaHQgb3JkZXIuXG4gICAgICogQHBhcmFtIGRlc2NyaXB0aW9uIC0gQSBzaG9ydCBzdHJpbmcgZGVzY3JpYmluZyB0aGUgY3JpdGljYWwgYXJlYXNcbiAgICAgKiBwcm9wZXJ0aWVzLlxuICAgICAqIEByZXR1cm5zIFJldHVybnMgdGhlIHJldHVybiAobWF5YmUgcHJvbWlzZSByZXNvbHZlZCkgdmFsdWUgb2YgdGhlXG4gICAgICogY2FsbGJhY2sgZ2l2ZW4gdG8gdGhlIFwiYWNxdWlyZVwiIG1ldGhvZC5cbiAgICAgKi9cbiAgICBhc3luYyByZWxlYXNlKGRlc2NyaXB0aW9uPzogc3RyaW5nKTogUHJvbWlzZTxUeXBlIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIGlmIChkZXNjcmlwdGlvbikge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChcbiAgICAgICAgICAgICAgICB0aGlzLmxvY2tzLCBkZXNjcmlwdGlvblxuICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNhbGxiYWNrOiBMb2NrQ2FsbGJhY2tGdW5jdGlvbjxUeXBlPiB8IHVuZGVmaW5lZCA9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9ja3NbZGVzY3JpcHRpb25dLnNoaWZ0KClcblxuICAgICAgICAgICAgICAgIGlmIChjYWxsYmFjayA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5sb2Nrc1tkZXNjcmlwdGlvbl1cbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCBjYWxsYmFjayhkZXNjcmlwdGlvbilcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjYWxsYmFjazogTG9ja0NhbGxiYWNrRnVuY3Rpb248VHlwZT4gfCB1bmRlZmluZWQgPVxuICAgICAgICAgICAgdGhpcy5sb2NrPy5zaGlmdCgpXG5cbiAgICAgICAgaWYgKGNhbGxiYWNrID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICB0aGlzLmxvY2sgPSB1bmRlZmluZWRcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IGNhbGxiYWNrKClcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IExvY2tcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0EsWUFBWTs7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBYkE7QUFBQTtBQUFBO0FBQUE7QUFnQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sTUFBTSxJQUFJLENBQTRCO0VBR3pDO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7RUFDSSxXQUFXLENBQUMsS0FBaUQsR0FBRyxDQUFDLENBQUMsRUFBRTtJQUFBO0lBQUE7SUFDaEUsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLO0VBQ3RCO0VBQ0E7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0ksT0FBTyxDQUNILFdBQW9CLEVBQ3BCLFFBQXFDLEVBQ3JDLFdBQVcsR0FBRyxLQUFLLEVBQ047SUFDYixPQUFPLElBQUksT0FBTyxDQUFRLE9BQThCLElBQVc7TUFDL0QsTUFBTSxlQUEyQyxHQUM3QyxXQUFvQixJQUNHO1FBQ3ZCLElBQUksTUFBd0M7UUFDNUMsSUFBSSxRQUFRLEVBQ1IsTUFBTSxHQUFHLFFBQVEsQ0FBQyxXQUFXLENBQUM7UUFFbEMsTUFBTSxNQUFNLEdBQUksS0FBVyxJQUFXO1VBQ2xDLElBQUksV0FBVyxFQUNYLEtBQUssSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUM7VUFFbEMsT0FBTyxDQUFDLEtBQUssQ0FBQztVQUVkLE9BQU8sS0FBSztRQUNoQixDQUFDO1FBRUQsSUFBSyxNQUFNLEVBQTJCLElBQUksRUFDdEMsT0FBUSxNQUFNLENBQW1CLElBQUksQ0FBQyxNQUFNLENBQUM7UUFFakQsTUFBTSxDQUFDLE1BQWMsQ0FBQztRQUV0QixPQUFPLE1BQU07TUFDakIsQ0FBQztNQUVELElBQUksV0FBVyxFQUFFO1FBQ2IsSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQ3BDLElBQUksQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLEVBRXhCLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUM1QztVQUNELElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRTtVQUU1QixLQUFLLGVBQWUsQ0FBQyxXQUFXLENBQUM7UUFDckM7UUFFQTtNQUNKO01BRUEsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUNULElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUM5QjtRQUNELElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRTtRQUVkLEtBQUssZUFBZSxDQUFDLFdBQVcsQ0FBQztNQUNyQztJQUNKLENBQUMsQ0FBQztFQUNOO0VBQ0E7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNJLE1BQU0sT0FBTyxDQUFDLFdBQW9CLEVBQTZCO0lBQzNELElBQUksV0FBVyxFQUFFO01BQ2IsSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQ3BDLElBQUksQ0FBQyxLQUFLLEVBQUUsV0FDaEIsQ0FBQyxFQUFFO1FBQ0MsTUFBTSxRQUFnRCxHQUNsRCxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRW5DLElBQUksUUFBUSxLQUFLLFNBQVMsRUFDdEIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxNQUU5QixPQUFPLE1BQU0sUUFBUSxDQUFDLFdBQVcsQ0FBQztNQUMxQztNQUVBO0lBQ0o7SUFFQSxNQUFNLFFBQWdELEdBQ2xELElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFFdEIsSUFBSSxRQUFRLEtBQUssU0FBUyxFQUN0QixJQUFJLENBQUMsSUFBSSxHQUFHLFNBQVMsTUFFckIsT0FBTyxNQUFNLFFBQVEsQ0FBQyxDQUFDO0VBQy9CO0FBQ0o7QUFFQSxlQUFlLElBQUkiLCJpZ25vcmVMaXN0IjpbXX0=
|