necessary 17.1.0 → 17.1.2
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/.aiignore +11 -0
- package/.swcrc +3 -0
- package/lib/browser.js +17 -17
- package/lib/characters.js +68 -68
- package/lib/constants.js +13 -13
- package/lib/contentTypes.js +20 -20
- package/lib/defaults.js +11 -11
- package/lib/encodings.js +8 -8
- package/lib/headers.js +30 -30
- package/lib/keyCodes.js +22 -22
- package/lib/levels.js +14 -14
- package/lib/main.js +23 -23
- package/lib/methods.js +12 -12
- package/lib/statusCodes.js +40 -40
- package/lib/statusMessages.js +40 -40
- package/lib/utilities/ajax.js +30 -34
- package/lib/utilities/array.js +175 -200
- package/lib/utilities/asynchronous.js +34 -34
- package/lib/utilities/configuration.js +60 -74
- package/lib/utilities/fileSystem.js +47 -49
- package/lib/utilities/http.js +26 -26
- package/lib/utilities/logging.js +57 -65
- package/lib/utilities/package.js +19 -19
- package/lib/utilities/path.js +44 -75
- package/lib/utilities/request.js +22 -22
- package/lib/utilities/shell.js +24 -24
- package/lib/utilities/string.js +24 -25
- package/lib/utilities/template.js +19 -22
- package/lib/utilities/version.js +6 -6
- package/package.json +1 -1
package/lib/utilities/logging.js
CHANGED
|
@@ -16,26 +16,19 @@ _export(exports, {
|
|
|
16
16
|
return log;
|
|
17
17
|
}
|
|
18
18
|
});
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
function _instanceof(left, right) {
|
|
27
|
-
if (right != null && typeof Symbol !== "undefined" && right[Symbol.hasInstance]) {
|
|
28
|
-
return !!right[Symbol.hasInstance](left);
|
|
29
|
-
} else {
|
|
30
|
-
return left instanceof right;
|
|
31
|
-
}
|
|
32
|
-
}
|
|
19
|
+
const _path = /*#__PURE__*/ _interop_require_default(require("path"));
|
|
20
|
+
const _array = require("../utilities/array");
|
|
21
|
+
const _path1 = require("../utilities/path");
|
|
22
|
+
const _constants = require("../constants");
|
|
23
|
+
const _fileSystem = require("../utilities/fileSystem");
|
|
24
|
+
const _defaults = require("../defaults");
|
|
25
|
+
const _levels = require("../levels");
|
|
33
26
|
function _interop_require_default(obj) {
|
|
34
27
|
return obj && obj.__esModule ? obj : {
|
|
35
28
|
default: obj
|
|
36
29
|
};
|
|
37
30
|
}
|
|
38
|
-
|
|
31
|
+
const levels = [
|
|
39
32
|
_levels.TRACE_LEVEL,
|
|
40
33
|
_levels.DEBUG_LEVEL,
|
|
41
34
|
_levels.INFO_LEVEL,
|
|
@@ -43,38 +36,37 @@ var levels = [
|
|
|
43
36
|
_levels.ERROR_LEVEL,
|
|
44
37
|
_levels.FATAL_LEVEL
|
|
45
38
|
];
|
|
46
|
-
|
|
47
|
-
function log(messageOrError) {
|
|
48
|
-
|
|
49
|
-
var salientStackMessageIndex = 1;
|
|
39
|
+
let logLevel = _defaults.DEFAULT_LOG_LEVEL, logFileBaseName = _defaults.DEFAULT_LOG_FILE_BASE_NAME, logDirectoryPath = _defaults.DEFAULT_LOG_DIRECTORY_PATH;
|
|
40
|
+
function log(messageOrError, level = _constants.EMPTY_STRING) {
|
|
41
|
+
let salientStackMessageIndex = 1;
|
|
50
42
|
if (level !== _constants.EMPTY_STRING) {
|
|
51
|
-
|
|
43
|
+
const levelIndex = levels.indexOf(level), logLevelIndex = levels.indexOf(logLevel);
|
|
52
44
|
if (levelIndex < logLevelIndex) {
|
|
53
45
|
return;
|
|
54
46
|
}
|
|
55
47
|
salientStackMessageIndex += 2;
|
|
56
|
-
level =
|
|
48
|
+
level = `${level}`; ///
|
|
57
49
|
}
|
|
58
|
-
|
|
59
|
-
if (
|
|
60
|
-
|
|
61
|
-
message =
|
|
50
|
+
let error, message;
|
|
51
|
+
if (messageOrError instanceof Error) {
|
|
52
|
+
error = messageOrError; ///
|
|
53
|
+
({ message } = error);
|
|
62
54
|
} else {
|
|
63
55
|
message = messageOrError; ///
|
|
64
|
-
|
|
56
|
+
error = new Error(message);
|
|
65
57
|
}
|
|
66
|
-
|
|
67
|
-
message =
|
|
58
|
+
const { stack } = error, stackMessages = stackMessagesFromStack(stack), salientStackMessage = stackMessages[salientStackMessageIndex], stackMessage = salientStackMessage, upperCaseLevel = level.toUpperCase(), currentDateAndTimeString = getCurrentDateAndTimeString(), filePath = filePathFromStackMessage(stackMessage), lineNumber = lineNumberFromStackMessage(stackMessage);
|
|
59
|
+
message = `${upperCaseLevel} ${currentDateAndTimeString} ${filePath}(${lineNumber}) ${message}`;
|
|
68
60
|
console.log(message);
|
|
69
61
|
if (logDirectoryPath !== null) {
|
|
70
62
|
rollOverLogFile();
|
|
71
|
-
|
|
63
|
+
const logFilePath = getLogFilePath(), logFileContent = `${message}\n`;
|
|
72
64
|
(0, _fileSystem.appendToFile)(logFilePath, logFileContent);
|
|
73
65
|
}
|
|
74
66
|
return message;
|
|
75
67
|
}
|
|
76
|
-
|
|
77
|
-
log
|
|
68
|
+
const _default = {
|
|
69
|
+
log
|
|
78
70
|
};
|
|
79
71
|
function trace(message) {
|
|
80
72
|
return log(message, _levels.TRACE_LEVEL);
|
|
@@ -98,13 +90,13 @@ function setLogLevel(level) {
|
|
|
98
90
|
logLevel = level;
|
|
99
91
|
}
|
|
100
92
|
function setLogOptions(logOptions) {
|
|
101
|
-
|
|
93
|
+
const { level, fileBaseName, directoryPath } = logOptions;
|
|
102
94
|
setLogLevel(level);
|
|
103
95
|
setLogFileBaseName(fileBaseName);
|
|
104
96
|
setLogDirectoryPath(directoryPath);
|
|
105
97
|
}
|
|
106
98
|
function getLogFileContent() {
|
|
107
|
-
|
|
99
|
+
const logFilePath = getLogFilePath(), logFileContent = (0, _fileSystem.readFile)(logFilePath);
|
|
108
100
|
return logFileContent;
|
|
109
101
|
}
|
|
110
102
|
function setLogFileBaseName(fileBaseName) {
|
|
@@ -114,59 +106,59 @@ function setLogDirectoryPath(directoryPath) {
|
|
|
114
106
|
logDirectoryPath = directoryPath;
|
|
115
107
|
}
|
|
116
108
|
Object.assign(log, {
|
|
117
|
-
trace
|
|
118
|
-
debug
|
|
119
|
-
info
|
|
120
|
-
warning
|
|
121
|
-
error
|
|
122
|
-
fatal
|
|
123
|
-
setLogLevel
|
|
124
|
-
setLogOptions
|
|
125
|
-
getLogFileContent
|
|
126
|
-
setLogFileBaseName
|
|
127
|
-
setLogDirectoryPath
|
|
109
|
+
trace,
|
|
110
|
+
debug,
|
|
111
|
+
info,
|
|
112
|
+
warning,
|
|
113
|
+
error,
|
|
114
|
+
fatal,
|
|
115
|
+
setLogLevel,
|
|
116
|
+
setLogOptions,
|
|
117
|
+
getLogFileContent,
|
|
118
|
+
setLogFileBaseName,
|
|
119
|
+
setLogDirectoryPath
|
|
128
120
|
});
|
|
129
121
|
function getLogFilePath() {
|
|
130
|
-
|
|
122
|
+
const logFileName = `${logFileBaseName}.log`, logFilePath = (0, _path1.concatenatePaths)(logDirectoryPath, logFileName);
|
|
131
123
|
return logFilePath;
|
|
132
124
|
}
|
|
133
125
|
function getRolledOverLogFilePath() {
|
|
134
|
-
|
|
126
|
+
const currentDateString = getCurrentDateString(), rolledOverLogFileName = `${logFileBaseName}.${currentDateString}.log`, rolledOverLogFilePath = (0, _path1.concatenatePaths)(logDirectoryPath, rolledOverLogFileName);
|
|
135
127
|
return rolledOverLogFilePath;
|
|
136
128
|
}
|
|
137
129
|
function getLogFileLastModifiedDate() {
|
|
138
|
-
|
|
130
|
+
const logFilePath = getLogFilePath(), logFileStats = (0, _fileSystem.getStats)(logFilePath), { mtime } = logFileStats, logFileLastModifiedDate = new Date(mtime); ///
|
|
139
131
|
return logFileLastModifiedDate;
|
|
140
132
|
}
|
|
141
133
|
function rollOverLogFile() {
|
|
142
|
-
|
|
134
|
+
const logFilePath = getLogFilePath(), logFileExists = (0, _fileSystem.checkFileExists)(logFilePath);
|
|
143
135
|
if (!logFileExists) {
|
|
144
136
|
return;
|
|
145
137
|
}
|
|
146
|
-
|
|
138
|
+
const logFileLastModifiedDate = getLogFileLastModifiedDate(), logFileLastModifiedDateCurrentDate = isDateCurrentDate(logFileLastModifiedDate);
|
|
147
139
|
if (!logFileLastModifiedDateCurrentDate) {
|
|
148
|
-
|
|
140
|
+
const rolledOverLogFilePath = getRolledOverLogFilePath();
|
|
149
141
|
(0, _fileSystem.renameFile)(logFilePath, rolledOverLogFilePath);
|
|
150
142
|
}
|
|
151
143
|
}
|
|
152
144
|
function isDateCurrentDate(date) {
|
|
153
|
-
|
|
145
|
+
const currentDate = new Date(), dateString = date.toDateString(), currentDateString = currentDate.toDateString(), dateCurrentDate = dateString === currentDateString;
|
|
154
146
|
return dateCurrentDate;
|
|
155
147
|
}
|
|
156
148
|
function getCurrentDateString() {
|
|
157
|
-
|
|
149
|
+
const date = new Date(), day = padStartWithZeroes(date.getDate(), 2), month = padStartWithZeroes(date.getMonth() + 1, 2), year = date.getFullYear(), currentDateAndTimeString = `${day}-${month}-${year}`;
|
|
158
150
|
return currentDateAndTimeString;
|
|
159
151
|
}
|
|
160
152
|
function getCurrentDateAndTimeString() {
|
|
161
|
-
|
|
153
|
+
const date = new Date(), day = padStartWithZeroes(date.getDate(), 2), month = padStartWithZeroes(date.getMonth() + 1, 2), year = date.getFullYear(), hours = padStartWithZeroes(date.getHours(), 2), minutes = padStartWithZeroes(date.getMinutes(), 2), seconds = padStartWithZeroes(date.getSeconds(), 2), milliseconds = padStartWithZeroes(date.getMilliseconds(), 3), currentDateAndTimeString = `${day}-${month}-${year} ${hours}:${minutes}:${seconds}.${milliseconds}`;
|
|
162
154
|
return currentDateAndTimeString;
|
|
163
155
|
}
|
|
164
156
|
function stackMessagesFromStack(stack) {
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
stackLines.forEach(
|
|
168
|
-
|
|
169
|
-
stackMessage = stackMessage === _constants.EMPTY_STRING ? stackLine :
|
|
157
|
+
const stackMessages = [], stackLines = stack.split(/\r\n|\n/);
|
|
158
|
+
let stackMessage = _constants.EMPTY_STRING;
|
|
159
|
+
stackLines.forEach((stackLine)=>{
|
|
160
|
+
const matches = /^\s*at.*/.test(stackLine);
|
|
161
|
+
stackMessage = stackMessage === _constants.EMPTY_STRING ? stackLine : `${stackMessage}\n${stackLine}`;
|
|
170
162
|
if (matches) {
|
|
171
163
|
stackMessages.push(stackMessage);
|
|
172
164
|
stackMessage = _constants.EMPTY_STRING;
|
|
@@ -175,24 +167,24 @@ function stackMessagesFromStack(stack) {
|
|
|
175
167
|
return stackMessages;
|
|
176
168
|
}
|
|
177
169
|
function filePathFromStackMessage(stackMessage) {
|
|
178
|
-
|
|
170
|
+
const matches = stackMessage.match(/(\/.+):\d+:\d+/m), secondMatch = (0, _array.second)(matches), absoluteFilePath = secondMatch, currentWorkingDirectoryPath = _path.default.resolve("."), currentWorkingDirectoryPathLength = currentWorkingDirectoryPath.length, start = currentWorkingDirectoryPathLength + 1, filePath = absoluteFilePath.substr(start);
|
|
179
171
|
return filePath;
|
|
180
172
|
}
|
|
181
173
|
function lineNumberFromStackMessage(stackMessage) {
|
|
182
|
-
|
|
174
|
+
const matches = stackMessage.match(/:(\d+)/m), secondMatch = (0, _array.second)(matches), lineNumber = secondMatch; ///
|
|
183
175
|
return lineNumber;
|
|
184
176
|
}
|
|
185
177
|
function padStartWithZeroes(string, length) {
|
|
186
|
-
|
|
178
|
+
const padString = _constants.ZERO, paddedString = padStart(string, length, padString);
|
|
187
179
|
return paddedString;
|
|
188
180
|
}
|
|
189
181
|
function padStart(string, length, padString) {
|
|
190
|
-
|
|
191
|
-
for(
|
|
182
|
+
let padding = _constants.EMPTY_STRING;
|
|
183
|
+
for(let index = 0; index < length; index++){
|
|
192
184
|
padding += padString;
|
|
193
185
|
}
|
|
194
|
-
|
|
186
|
+
const paddedString = `${padding}${string}`.substr(-length);
|
|
195
187
|
return paddedString;
|
|
196
188
|
}
|
|
197
189
|
|
|
198
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvbG9nZ2luZy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcblxuaW1wb3J0IHsgc2Vjb25kIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9hcnJheVwiO1xuaW1wb3J0IHsgY29uY2F0ZW5hdGVQYXRocyB9IGZyb20gXCIuLi91dGlsaXRpZXMvcGF0aFwiO1xuaW1wb3J0IHsgWkVSTywgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgY2hlY2tGaWxlRXhpc3RzLCByZWFkRmlsZSwgYXBwZW5kVG9GaWxlLCByZW5hbWVGaWxlLCBnZXRTdGF0cyB9IGZyb20gXCIuLi91dGlsaXRpZXMvZmlsZVN5c3RlbVwiO1xuaW1wb3J0IHsgREVGQVVMVF9MT0dfTEVWRUwsIERFRkFVTFRfTE9HX0ZJTEVfQkFTRV9OQU1FLCBERUZBVUxUX0xPR19ESVJFQ1RPUllfUEFUSCB9IGZyb20gXCIuLi9kZWZhdWx0c1wiO1xuaW1wb3J0IHsgVFJBQ0VfTEVWRUwsIERFQlVHX0xFVkVMLCBJTkZPX0xFVkVMLCBXQVJOSU5HX0xFVkVMLCBFUlJPUl9MRVZFTCwgRkFUQUxfTEVWRUwgfSBmcm9tIFwiLi4vbGV2ZWxzXCI7XG5cbmNvbnN0IGxldmVscyA9IFtcbiAgVFJBQ0VfTEVWRUwsXG4gIERFQlVHX0xFVkVMLFxuICBJTkZPX0xFVkVMLFxuICBXQVJOSU5HX0xFVkVMLFxuICBFUlJPUl9MRVZFTCxcbiAgRkFUQUxfTEVWRUwsXG5dO1xuXG5sZXQgbG9nTGV2ZWwgPSBERUZBVUxUX0xPR19MRVZFTCxcbiAgICBsb2dGaWxlQmFzZU5hbWUgPSBERUZBVUxUX0xPR19GSUxFX0JBU0VfTkFNRSxcbiAgICBsb2dEaXJlY3RvcnlQYXRoID0gREVGQVVMVF9MT0dfRElSRUNUT1JZX1BBVEg7XG5cbmV4cG9ydCBmdW5jdGlvbiBsb2cobWVzc2FnZU9yRXJyb3IsIGxldmVsID0gRU1QVFlfU1RSSU5HKSB7XG4gIGxldCBzYWxpZW50U3RhY2tNZXNzYWdlSW5kZXggPSAxO1xuXG4gIGlmIChsZXZlbCAhPT0gRU1QVFlfU1RSSU5HKSB7XG4gICAgY29uc3QgbGV2ZWxJbmRleCA9IGxldmVscy5pbmRleE9mKGxldmVsKSxcbiAgICAgICAgICBsb2dMZXZlbEluZGV4ID0gbGV2ZWxzLmluZGV4T2YobG9nTGV2ZWwpO1xuXG4gICAgaWYgKGxldmVsSW5kZXggPCBsb2dMZXZlbEluZGV4KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc2FsaWVudFN0YWNrTWVzc2FnZUluZGV4ICs9IDI7XG5cbiAgICBsZXZlbCA9IGAke2xldmVsfWA7ICAvLy9cbiAgfVxuXG4gIGxldCBlcnJvcixcbiAgICAgIG1lc3NhZ2U7XG5cbiAgaWYgKG1lc3NhZ2VPckVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICBlcnJvciA9IG1lc3NhZ2VPckVycm9yOyAvLy9cblxuICAgICh7IG1lc3NhZ2UgfSA9IGVycm9yKTtcbiAgfSBlbHNlIHtcbiAgICBtZXNzYWdlID0gbWVzc2FnZU9yRXJyb3I7IC8vL1xuXG4gICAgZXJyb3IgPSBuZXcgRXJyb3IobWVzc2FnZSk7XG4gIH1cblxuICBjb25zdCB7IHN0YWNrIH0gPSBlcnJvcixcbiAgICAgICAgc3RhY2tNZXNzYWdlcyA9IHN0YWNrTWVzc2FnZXNGcm9tU3RhY2soc3RhY2spLFxuICAgICAgICBzYWxpZW50U3RhY2tNZXNzYWdlID0gc3RhY2tNZXNzYWdlc1tzYWxpZW50U3RhY2tNZXNzYWdlSW5kZXhdLFxuICAgICAgICBzdGFja01lc3NhZ2UgPSBzYWxpZW50U3RhY2tNZXNzYWdlLCAvLy9cbiAgICAgICAgdXBwZXJDYXNlTGV2ZWwgPSBsZXZlbC50b1VwcGVyQ2FzZSgpLFxuICAgICAgICBjdXJyZW50RGF0ZUFuZFRpbWVTdHJpbmcgPSBnZXRDdXJyZW50RGF0ZUFuZFRpbWVTdHJpbmcoKSxcbiAgICAgICAgZmlsZVBhdGggPSBmaWxlUGF0aEZyb21TdGFja01lc3NhZ2Uoc3RhY2tNZXNzYWdlKSxcbiAgICAgICAgbGluZU51bWJlciA9IGxpbmVOdW1iZXJGcm9tU3RhY2tNZXNzYWdlKHN0YWNrTWVzc2FnZSk7XG5cbiAgbWVzc2FnZSA9IGAke3VwcGVyQ2FzZUxldmVsfSAke2N1cnJlbnREYXRlQW5kVGltZVN0cmluZ30gJHtmaWxlUGF0aH0oJHtsaW5lTnVtYmVyfSkgJHttZXNzYWdlfWA7XG5cbiAgY29uc29sZS5sb2cobWVzc2FnZSk7XG5cbiAgaWYgKGxvZ0RpcmVjdG9yeVBhdGggIT09IG51bGwpIHtcbiAgICByb2xsT3ZlckxvZ0ZpbGUoKTtcblxuICAgIGNvbnN0IGxvZ0ZpbGVQYXRoID0gZ2V0TG9nRmlsZVBhdGgoKSxcbiAgICAgICAgICBsb2dGaWxlQ29udGVudCA9IGAke21lc3NhZ2V9XFxuYDtcblxuICAgIGFwcGVuZFRvRmlsZShsb2dGaWxlUGF0aCwgbG9nRmlsZUNvbnRlbnQpO1xuICB9XG5cbiAgcmV0dXJuIG1lc3NhZ2U7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbG9nXG59XG5cbmZ1bmN0aW9uIHRyYWNlKG1lc3NhZ2UpIHsgcmV0dXJuIGxvZyhtZXNzYWdlLCBUUkFDRV9MRVZFTCk7IH1cblxuZnVuY3Rpb24gZGVidWcobWVzc2FnZSkgeyByZXR1cm4gbG9nKG1lc3NhZ2UsIERFQlVHX0xFVkVMKTsgfVxuXG5mdW5jdGlvbiBpbmZvKG1lc3NhZ2UpIHsgcmV0dXJuIGxvZyhtZXNzYWdlLCBJTkZPX0xFVkVMKTsgfVxuXG5mdW5jdGlvbiB3YXJuaW5nKG1lc3NhZ2UpIHsgcmV0dXJuIGxvZyhtZXNzYWdlLCBXQVJOSU5HX0xFVkVMKTsgfVxuXG5mdW5jdGlvbiBlcnJvcihtZXNzYWdlKSB7IHJldHVybiBsb2cobWVzc2FnZSwgRVJST1JfTEVWRUwpOyB9XG5cbmZ1bmN0aW9uIGZhdGFsKG1lc3NhZ2UpIHsgcmV0dXJuIGxvZyhtZXNzYWdlLCBGQVRBTF9MRVZFTCk7IH1cblxuZnVuY3Rpb24gc2V0TG9nTGV2ZWwobGV2ZWwpIHsgbG9nTGV2ZWwgPSBsZXZlbDsgfVxuXG5mdW5jdGlvbiBzZXRMb2dPcHRpb25zKGxvZ09wdGlvbnMpIHtcbiAgY29uc3QgeyBsZXZlbCwgZmlsZUJhc2VOYW1lLCBkaXJlY3RvcnlQYXRoIH0gPSBsb2dPcHRpb25zO1xuXG4gIHNldExvZ0xldmVsKGxldmVsKTtcblxuICBzZXRMb2dGaWxlQmFzZU5hbWUoZmlsZUJhc2VOYW1lKTtcblxuICBzZXRMb2dEaXJlY3RvcnlQYXRoKGRpcmVjdG9yeVBhdGgpO1xufVxuXG5mdW5jdGlvbiBnZXRMb2dGaWxlQ29udGVudCgpIHtcbiAgY29uc3QgbG9nRmlsZVBhdGggPSBnZXRMb2dGaWxlUGF0aCgpLFxuICAgICAgICBsb2dGaWxlQ29udGVudCA9IHJlYWRGaWxlKGxvZ0ZpbGVQYXRoKTtcblxuICByZXR1cm4gbG9nRmlsZUNvbnRlbnQ7XG59XG5cbmZ1bmN0aW9uIHNldExvZ0ZpbGVCYXNlTmFtZShmaWxlQmFzZU5hbWUpIHsgbG9nRmlsZUJhc2VOYW1lID0gZmlsZUJhc2VOYW1lOyB9XG5cbmZ1bmN0aW9uIHNldExvZ0RpcmVjdG9yeVBhdGgoZGlyZWN0b3J5UGF0aCkgeyBsb2dEaXJlY3RvcnlQYXRoID0gZGlyZWN0b3J5UGF0aDsgfVxuXG5PYmplY3QuYXNzaWduKGxvZywge1xuICB0cmFjZSxcbiAgZGVidWcsXG4gIGluZm8sXG4gIHdhcm5pbmcsXG4gIGVycm9yLFxuICBmYXRhbCxcbiAgc2V0TG9nTGV2ZWwsXG4gIHNldExvZ09wdGlvbnMsXG4gIGdldExvZ0ZpbGVDb250ZW50LFxuICBzZXRMb2dGaWxlQmFzZU5hbWUsXG4gIHNldExvZ0RpcmVjdG9yeVBhdGhcbn0pO1xuXG5mdW5jdGlvbiBnZXRMb2dGaWxlUGF0aCgpIHtcbiAgY29uc3QgbG9nRmlsZU5hbWUgPSBgJHtsb2dGaWxlQmFzZU5hbWV9LmxvZ2AsXG4gICAgICAgIGxvZ0ZpbGVQYXRoID0gY29uY2F0ZW5hdGVQYXRocyhsb2dEaXJlY3RvcnlQYXRoLCBsb2dGaWxlTmFtZSk7XG5cbiAgcmV0dXJuIGxvZ0ZpbGVQYXRoO1xufVxuXG5mdW5jdGlvbiBnZXRSb2xsZWRPdmVyTG9nRmlsZVBhdGgoKSB7XG4gIGNvbnN0IGN1cnJlbnREYXRlU3RyaW5nID0gZ2V0Q3VycmVudERhdGVTdHJpbmcoKSxcbiAgICAgICAgcm9sbGVkT3ZlckxvZ0ZpbGVOYW1lID0gYCR7bG9nRmlsZUJhc2VOYW1lfS4ke2N1cnJlbnREYXRlU3RyaW5nfS5sb2dgLFxuICAgICAgICByb2xsZWRPdmVyTG9nRmlsZVBhdGggPSBjb25jYXRlbmF0ZVBhdGhzKGxvZ0RpcmVjdG9yeVBhdGgsIHJvbGxlZE92ZXJMb2dGaWxlTmFtZSk7XG5cbiAgcmV0dXJuIHJvbGxlZE92ZXJMb2dGaWxlUGF0aDtcbn1cblxuZnVuY3Rpb24gZ2V0TG9nRmlsZUxhc3RNb2RpZmllZERhdGUoKSB7XG4gIGNvbnN0IGxvZ0ZpbGVQYXRoID0gZ2V0TG9nRmlsZVBhdGgoKSxcbiAgICAgICAgbG9nRmlsZVN0YXRzID0gZ2V0U3RhdHMobG9nRmlsZVBhdGgpLFxuICAgICAgICB7IG10aW1lIH0gPSBsb2dGaWxlU3RhdHMsXG4gICAgICAgIGxvZ0ZpbGVMYXN0TW9kaWZpZWREYXRlID0gbmV3IERhdGUobXRpbWUpOyAgLy8vXG5cbiAgcmV0dXJuIGxvZ0ZpbGVMYXN0TW9kaWZpZWREYXRlO1xufVxuXG5mdW5jdGlvbiByb2xsT3ZlckxvZ0ZpbGUoKSB7XG4gIGNvbnN0IGxvZ0ZpbGVQYXRoID0gZ2V0TG9nRmlsZVBhdGgoKSxcbiAgICAgICAgbG9nRmlsZUV4aXN0cyA9IGNoZWNrRmlsZUV4aXN0cyhsb2dGaWxlUGF0aCk7XG5cbiAgaWYgKCFsb2dGaWxlRXhpc3RzKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgbG9nRmlsZUxhc3RNb2RpZmllZERhdGUgPSBnZXRMb2dGaWxlTGFzdE1vZGlmaWVkRGF0ZSgpLFxuICAgICAgICBsb2dGaWxlTGFzdE1vZGlmaWVkRGF0ZUN1cnJlbnREYXRlID0gaXNEYXRlQ3VycmVudERhdGUobG9nRmlsZUxhc3RNb2RpZmllZERhdGUpO1xuXG4gIGlmICghbG9nRmlsZUxhc3RNb2RpZmllZERhdGVDdXJyZW50RGF0ZSkge1xuICAgIGNvbnN0IHJvbGxlZE92ZXJMb2dGaWxlUGF0aCA9IGdldFJvbGxlZE92ZXJMb2dGaWxlUGF0aCgpO1xuXG4gICAgcmVuYW1lRmlsZShsb2dGaWxlUGF0aCwgcm9sbGVkT3ZlckxvZ0ZpbGVQYXRoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc0RhdGVDdXJyZW50RGF0ZShkYXRlKSB7XG4gIGNvbnN0IGN1cnJlbnREYXRlID0gbmV3IERhdGUoKSxcbiAgICAgICAgZGF0ZVN0cmluZyA9IGRhdGUudG9EYXRlU3RyaW5nKCksXG4gICAgICAgIGN1cnJlbnREYXRlU3RyaW5nID0gY3VycmVudERhdGUudG9EYXRlU3RyaW5nKCksXG4gICAgICAgIGRhdGVDdXJyZW50RGF0ZSA9IChkYXRlU3RyaW5nID09PSBjdXJyZW50RGF0ZVN0cmluZyk7XG5cbiAgcmV0dXJuIGRhdGVDdXJyZW50RGF0ZTtcbn1cblxuZnVuY3Rpb24gZ2V0Q3VycmVudERhdGVTdHJpbmcoKSB7XG4gIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgpLFxuICAgICAgICBkYXkgPSBwYWRTdGFydFdpdGhaZXJvZXMoZGF0ZS5nZXREYXRlKCksIDIpLCAgLy8vXG4gICAgICAgIG1vbnRoID0gcGFkU3RhcnRXaXRoWmVyb2VzKGRhdGUuZ2V0TW9udGgoKSArIDEsIDIpLCAvLy9cbiAgICAgICAgeWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKSxcbiAgICAgICAgY3VycmVudERhdGVBbmRUaW1lU3RyaW5nID0gYCR7ZGF5fS0ke21vbnRofS0ke3llYXJ9YDtcblxuICByZXR1cm4gY3VycmVudERhdGVBbmRUaW1lU3RyaW5nO1xufVxuXG5mdW5jdGlvbiBnZXRDdXJyZW50RGF0ZUFuZFRpbWVTdHJpbmcoKSB7XG4gIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgpLFxuICAgICAgICBkYXkgPSBwYWRTdGFydFdpdGhaZXJvZXMoZGF0ZS5nZXREYXRlKCksIDIpLCAgLy8vXG4gICAgICAgIG1vbnRoID0gcGFkU3RhcnRXaXRoWmVyb2VzKGRhdGUuZ2V0TW9udGgoKSArIDEsIDIpLCAvLy9cbiAgICAgICAgeWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKSxcbiAgICAgICAgaG91cnMgPSBwYWRTdGFydFdpdGhaZXJvZXMoZGF0ZS5nZXRIb3VycygpLCAyKSxcbiAgICAgICAgbWludXRlcyA9IHBhZFN0YXJ0V2l0aFplcm9lcyhkYXRlLmdldE1pbnV0ZXMoKSwgMiksXG4gICAgICAgIHNlY29uZHMgPSBwYWRTdGFydFdpdGhaZXJvZXMoZGF0ZS5nZXRTZWNvbmRzKCksIDIpLFxuICAgICAgICBtaWxsaXNlY29uZHMgPSBwYWRTdGFydFdpdGhaZXJvZXMoZGF0ZS5nZXRNaWxsaXNlY29uZHMoKSwgMyksXG4gICAgICAgIGN1cnJlbnREYXRlQW5kVGltZVN0cmluZyA9IGAke2RheX0tJHttb250aH0tJHt5ZWFyfSAke2hvdXJzfToke21pbnV0ZXN9OiR7c2Vjb25kc30uJHttaWxsaXNlY29uZHN9YDtcblxuICByZXR1cm4gY3VycmVudERhdGVBbmRUaW1lU3RyaW5nO1xufVxuXG5mdW5jdGlvbiBzdGFja01lc3NhZ2VzRnJvbVN0YWNrKHN0YWNrKSB7XG4gIGNvbnN0IHN0YWNrTWVzc2FnZXMgPSBbXSxcbiAgICAgICAgc3RhY2tMaW5lcyA9IHN0YWNrLnNwbGl0KC9cXHJcXG58XFxuLyk7XG5cbiAgbGV0IHN0YWNrTWVzc2FnZSA9IEVNUFRZX1NUUklORztcblxuICBzdGFja0xpbmVzLmZvckVhY2goKHN0YWNrTGluZSkgPT4ge1xuICAgIGNvbnN0IG1hdGNoZXMgPSAvXlxccyphdC4qLy50ZXN0KHN0YWNrTGluZSk7XG5cbiAgICBzdGFja01lc3NhZ2UgPSAoc3RhY2tNZXNzYWdlID09PSBFTVBUWV9TVFJJTkcpID9cbiAgICAgICAgICAgICAgICAgICAgICBzdGFja0xpbmUgOlxuICAgICAgICAgICAgICAgICAgICAgICAgYCR7c3RhY2tNZXNzYWdlfVxcbiR7c3RhY2tMaW5lfWA7XG5cbiAgICBpZiAobWF0Y2hlcykge1xuICAgICAgc3RhY2tNZXNzYWdlcy5wdXNoKHN0YWNrTWVzc2FnZSk7XG5cbiAgICAgIHN0YWNrTWVzc2FnZSA9IEVNUFRZX1NUUklORztcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBzdGFja01lc3NhZ2VzO1xufVxuXG5mdW5jdGlvbiBmaWxlUGF0aEZyb21TdGFja01lc3NhZ2Uoc3RhY2tNZXNzYWdlKSB7XG4gIGNvbnN0IG1hdGNoZXMgPSBzdGFja01lc3NhZ2UubWF0Y2goLyhcXC8uKyk6XFxkKzpcXGQrL20pLFxuICAgICAgICBzZWNvbmRNYXRjaCA9IHNlY29uZChtYXRjaGVzKSxcbiAgICAgICAgYWJzb2x1dGVGaWxlUGF0aCA9IHNlY29uZE1hdGNoLCAgLy8vXG4gICAgICAgIGN1cnJlbnRXb3JraW5nRGlyZWN0b3J5UGF0aCA9IHBhdGgucmVzb2x2ZShcIi5cIiksICAvLy9cbiAgICAgICAgY3VycmVudFdvcmtpbmdEaXJlY3RvcnlQYXRoTGVuZ3RoID0gY3VycmVudFdvcmtpbmdEaXJlY3RvcnlQYXRoLmxlbmd0aCxcbiAgICAgICAgc3RhcnQgPSBjdXJyZW50V29ya2luZ0RpcmVjdG9yeVBhdGhMZW5ndGggKyAxLCAgLy8vXG4gICAgICAgIGZpbGVQYXRoID0gYWJzb2x1dGVGaWxlUGF0aC5zdWJzdHIoc3RhcnQpO1xuXG4gIHJldHVybiBmaWxlUGF0aDtcbn1cblxuZnVuY3Rpb24gbGluZU51bWJlckZyb21TdGFja01lc3NhZ2Uoc3RhY2tNZXNzYWdlKSB7XG4gIGNvbnN0IG1hdGNoZXMgPSBzdGFja01lc3NhZ2UubWF0Y2goLzooXFxkKykvbSksXG4gICAgICAgIHNlY29uZE1hdGNoID0gc2Vjb25kKG1hdGNoZXMpLFxuICAgICAgICBsaW5lTnVtYmVyID0gc2Vjb25kTWF0Y2g7IC8vL1xuXG4gIHJldHVybiBsaW5lTnVtYmVyO1xufVxuXG5mdW5jdGlvbiBwYWRTdGFydFdpdGhaZXJvZXMoc3RyaW5nLCBsZW5ndGgpIHtcbiAgY29uc3QgcGFkU3RyaW5nID0gWkVSTywgLy8vXG4gICAgICAgIHBhZGRlZFN0cmluZyA9IHBhZFN0YXJ0KHN0cmluZywgbGVuZ3RoLCBwYWRTdHJpbmcpO1xuXG4gIHJldHVybiBwYWRkZWRTdHJpbmc7XG59XG5cbmZ1bmN0aW9uIHBhZFN0YXJ0KHN0cmluZywgbGVuZ3RoLCBwYWRTdHJpbmcpIHtcbiAgbGV0IHBhZGRpbmcgPSBFTVBUWV9TVFJJTkc7XG5cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgIHBhZGRpbmcgKz0gcGFkU3RyaW5nO1xuICB9XG5cbiAgY29uc3QgcGFkZGVkU3RyaW5nID0gYCR7cGFkZGluZ30ke3N0cmluZ31gLnN1YnN0cigtbGVuZ3RoKTtcblxuICByZXR1cm4gcGFkZGVkU3RyaW5nO1xufVxuIl0sIm5hbWVzIjpbImxvZyIsImxldmVscyIsIlRSQUNFX0xFVkVMIiwiREVCVUdfTEVWRUwiLCJJTkZPX0xFVkVMIiwiV0FSTklOR19MRVZFTCIsIkVSUk9SX0xFVkVMIiwiRkFUQUxfTEVWRUwiLCJsb2dMZXZlbCIsIkRFRkFVTFRfTE9HX0xFVkVMIiwibG9nRmlsZUJhc2VOYW1lIiwiREVGQVVMVF9MT0dfRklMRV9CQVNFX05BTUUiLCJsb2dEaXJlY3RvcnlQYXRoIiwiREVGQVVMVF9MT0dfRElSRUNUT1JZX1BBVEgiLCJtZXNzYWdlT3JFcnJvciIsImxldmVsIiwiRU1QVFlfU1RSSU5HIiwic2FsaWVudFN0YWNrTWVzc2FnZUluZGV4IiwibGV2ZWxJbmRleCIsImluZGV4T2YiLCJsb2dMZXZlbEluZGV4IiwiZXJyb3IiLCJtZXNzYWdlIiwiRXJyb3IiLCJzdGFjayIsInN0YWNrTWVzc2FnZXMiLCJzdGFja01lc3NhZ2VzRnJvbVN0YWNrIiwic2FsaWVudFN0YWNrTWVzc2FnZSIsInN0YWNrTWVzc2FnZSIsInVwcGVyQ2FzZUxldmVsIiwidG9VcHBlckNhc2UiLCJjdXJyZW50RGF0ZUFuZFRpbWVTdHJpbmciLCJnZXRDdXJyZW50RGF0ZUFuZFRpbWVTdHJpbmciLCJmaWxlUGF0aCIsImZpbGVQYXRoRnJvbVN0YWNrTWVzc2FnZSIsImxpbmVOdW1iZXIiLCJsaW5lTnVtYmVyRnJvbVN0YWNrTWVzc2FnZSIsImNvbnNvbGUiLCJyb2xsT3ZlckxvZ0ZpbGUiLCJsb2dGaWxlUGF0aCIsImdldExvZ0ZpbGVQYXRoIiwibG9nRmlsZUNvbnRlbnQiLCJhcHBlbmRUb0ZpbGUiLCJ0cmFjZSIsImRlYnVnIiwiaW5mbyIsIndhcm5pbmciLCJmYXRhbCIsInNldExvZ0xldmVsIiwic2V0TG9nT3B0aW9ucyIsImxvZ09wdGlvbnMiLCJmaWxlQmFzZU5hbWUiLCJkaXJlY3RvcnlQYXRoIiwic2V0TG9nRmlsZUJhc2VOYW1lIiwic2V0TG9nRGlyZWN0b3J5UGF0aCIsImdldExvZ0ZpbGVDb250ZW50IiwicmVhZEZpbGUiLCJPYmplY3QiLCJhc3NpZ24iLCJsb2dGaWxlTmFtZSIsImNvbmNhdGVuYXRlUGF0aHMiLCJnZXRSb2xsZWRPdmVyTG9nRmlsZVBhdGgiLCJjdXJyZW50RGF0ZVN0cmluZyIsImdldEN1cnJlbnREYXRlU3RyaW5nIiwicm9sbGVkT3ZlckxvZ0ZpbGVOYW1lIiwicm9sbGVkT3ZlckxvZ0ZpbGVQYXRoIiwiZ2V0TG9nRmlsZUxhc3RNb2RpZmllZERhdGUiLCJsb2dGaWxlU3RhdHMiLCJnZXRTdGF0cyIsIm10aW1lIiwibG9nRmlsZUxhc3RNb2RpZmllZERhdGUiLCJEYXRlIiwibG9nRmlsZUV4aXN0cyIsImNoZWNrRmlsZUV4aXN0cyIsImxvZ0ZpbGVMYXN0TW9kaWZpZWREYXRlQ3VycmVudERhdGUiLCJpc0RhdGVDdXJyZW50RGF0ZSIsInJlbmFtZUZpbGUiLCJkYXRlIiwiY3VycmVudERhdGUiLCJkYXRlU3RyaW5nIiwidG9EYXRlU3RyaW5nIiwiZGF0ZUN1cnJlbnREYXRlIiwiZGF5IiwicGFkU3RhcnRXaXRoWmVyb2VzIiwiZ2V0RGF0ZSIsIm1vbnRoIiwiZ2V0TW9udGgiLCJ5ZWFyIiwiZ2V0RnVsbFllYXIiLCJob3VycyIsImdldEhvdXJzIiwibWludXRlcyIsImdldE1pbnV0ZXMiLCJzZWNvbmRzIiwiZ2V0U2Vjb25kcyIsIm1pbGxpc2Vjb25kcyIsImdldE1pbGxpc2Vjb25kcyIsInN0YWNrTGluZXMiLCJzcGxpdCIsImZvckVhY2giLCJzdGFja0xpbmUiLCJtYXRjaGVzIiwidGVzdCIsInB1c2giLCJtYXRjaCIsInNlY29uZE1hdGNoIiwic2Vjb25kIiwiYWJzb2x1dGVGaWxlUGF0aCIsImN1cnJlbnRXb3JraW5nRGlyZWN0b3J5UGF0aCIsInBhdGgiLCJyZXNvbHZlIiwiY3VycmVudFdvcmtpbmdEaXJlY3RvcnlQYXRoTGVuZ3RoIiwibGVuZ3RoIiwic3RhcnQiLCJzdWJzdHIiLCJzdHJpbmciLCJwYWRTdHJpbmciLCJaRVJPIiwicGFkZGVkU3RyaW5nIiwicGFkU3RhcnQiLCJwYWRkaW5nIiwiaW5kZXgiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OztRQThFQTtlQUFBOztRQXREZ0JBO2VBQUFBOzs7MkRBdEJDO3FCQUVNO3FCQUNVO3lCQUNFOzBCQUMyQzt3QkFDWTtzQkFDSTs7Ozs7Ozs7Ozs7OztBQUU5RixJQUFNQyxTQUFTO0lBQ2JDLG1CQUFXO0lBQ1hDLG1CQUFXO0lBQ1hDLGtCQUFVO0lBQ1ZDLHFCQUFhO0lBQ2JDLG1CQUFXO0lBQ1hDLG1CQUFXO0NBQ1o7QUFFRCxJQUFJQyxXQUFXQywyQkFBaUIsRUFDNUJDLGtCQUFrQkMsb0NBQTBCLEVBQzVDQyxtQkFBbUJDLG9DQUEwQjtBQUUxQyxTQUFTYixJQUFJYyxjQUFjO1FBQUVDLFFBQUFBLGlFQUFRQyx1QkFBWTtJQUN0RCxJQUFJQywyQkFBMkI7SUFFL0IsSUFBSUYsVUFBVUMsdUJBQVksRUFBRTtRQUMxQixJQUFNRSxhQUFhakIsT0FBT2tCLE9BQU8sQ0FBQ0osUUFDNUJLLGdCQUFnQm5CLE9BQU9rQixPQUFPLENBQUNYO1FBRXJDLElBQUlVLGFBQWFFLGVB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
|
|
190
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvbG9nZ2luZy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcblxuaW1wb3J0IHsgc2Vjb25kIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9hcnJheVwiO1xuaW1wb3J0IHsgY29uY2F0ZW5hdGVQYXRocyB9IGZyb20gXCIuLi91dGlsaXRpZXMvcGF0aFwiO1xuaW1wb3J0IHsgWkVSTywgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgY2hlY2tGaWxlRXhpc3RzLCByZWFkRmlsZSwgYXBwZW5kVG9GaWxlLCByZW5hbWVGaWxlLCBnZXRTdGF0cyB9IGZyb20gXCIuLi91dGlsaXRpZXMvZmlsZVN5c3RlbVwiO1xuaW1wb3J0IHsgREVGQVVMVF9MT0dfTEVWRUwsIERFRkFVTFRfTE9HX0ZJTEVfQkFTRV9OQU1FLCBERUZBVUxUX0xPR19ESVJFQ1RPUllfUEFUSCB9IGZyb20gXCIuLi9kZWZhdWx0c1wiO1xuaW1wb3J0IHsgVFJBQ0VfTEVWRUwsIERFQlVHX0xFVkVMLCBJTkZPX0xFVkVMLCBXQVJOSU5HX0xFVkVMLCBFUlJPUl9MRVZFTCwgRkFUQUxfTEVWRUwgfSBmcm9tIFwiLi4vbGV2ZWxzXCI7XG5cbmNvbnN0IGxldmVscyA9IFtcbiAgVFJBQ0VfTEVWRUwsXG4gIERFQlVHX0xFVkVMLFxuICBJTkZPX0xFVkVMLFxuICBXQVJOSU5HX0xFVkVMLFxuICBFUlJPUl9MRVZFTCxcbiAgRkFUQUxfTEVWRUwsXG5dO1xuXG5sZXQgbG9nTGV2ZWwgPSBERUZBVUxUX0xPR19MRVZFTCxcbiAgICBsb2dGaWxlQmFzZU5hbWUgPSBERUZBVUxUX0xPR19GSUxFX0JBU0VfTkFNRSxcbiAgICBsb2dEaXJlY3RvcnlQYXRoID0gREVGQVVMVF9MT0dfRElSRUNUT1JZX1BBVEg7XG5cbmV4cG9ydCBmdW5jdGlvbiBsb2cobWVzc2FnZU9yRXJyb3IsIGxldmVsID0gRU1QVFlfU1RSSU5HKSB7XG4gIGxldCBzYWxpZW50U3RhY2tNZXNzYWdlSW5kZXggPSAxO1xuXG4gIGlmIChsZXZlbCAhPT0gRU1QVFlfU1RSSU5HKSB7XG4gICAgY29uc3QgbGV2ZWxJbmRleCA9IGxldmVscy5pbmRleE9mKGxldmVsKSxcbiAgICAgICAgICBsb2dMZXZlbEluZGV4ID0gbGV2ZWxzLmluZGV4T2YobG9nTGV2ZWwpO1xuXG4gICAgaWYgKGxldmVsSW5kZXggPCBsb2dMZXZlbEluZGV4KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc2FsaWVudFN0YWNrTWVzc2FnZUluZGV4ICs9IDI7XG5cbiAgICBsZXZlbCA9IGAke2xldmVsfWA7ICAvLy9cbiAgfVxuXG4gIGxldCBlcnJvcixcbiAgICAgIG1lc3NhZ2U7XG5cbiAgaWYgKG1lc3NhZ2VPckVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICBlcnJvciA9IG1lc3NhZ2VPckVycm9yOyAvLy9cblxuICAgICh7IG1lc3NhZ2UgfSA9IGVycm9yKTtcbiAgfSBlbHNlIHtcbiAgICBtZXNzYWdlID0gbWVzc2FnZU9yRXJyb3I7IC8vL1xuXG4gICAgZXJyb3IgPSBuZXcgRXJyb3IobWVzc2FnZSk7XG4gIH1cblxuICBjb25zdCB7IHN0YWNrIH0gPSBlcnJvcixcbiAgICAgICAgc3RhY2tNZXNzYWdlcyA9IHN0YWNrTWVzc2FnZXNGcm9tU3RhY2soc3RhY2spLFxuICAgICAgICBzYWxpZW50U3RhY2tNZXNzYWdlID0gc3RhY2tNZXNzYWdlc1tzYWxpZW50U3RhY2tNZXNzYWdlSW5kZXhdLFxuICAgICAgICBzdGFja01lc3NhZ2UgPSBzYWxpZW50U3RhY2tNZXNzYWdlLCAvLy9cbiAgICAgICAgdXBwZXJDYXNlTGV2ZWwgPSBsZXZlbC50b1VwcGVyQ2FzZSgpLFxuICAgICAgICBjdXJyZW50RGF0ZUFuZFRpbWVTdHJpbmcgPSBnZXRDdXJyZW50RGF0ZUFuZFRpbWVTdHJpbmcoKSxcbiAgICAgICAgZmlsZVBhdGggPSBmaWxlUGF0aEZyb21TdGFja01lc3NhZ2Uoc3RhY2tNZXNzYWdlKSxcbiAgICAgICAgbGluZU51bWJlciA9IGxpbmVOdW1iZXJGcm9tU3RhY2tNZXNzYWdlKHN0YWNrTWVzc2FnZSk7XG5cbiAgbWVzc2FnZSA9IGAke3VwcGVyQ2FzZUxldmVsfSAke2N1cnJlbnREYXRlQW5kVGltZVN0cmluZ30gJHtmaWxlUGF0aH0oJHtsaW5lTnVtYmVyfSkgJHttZXNzYWdlfWA7XG5cbiAgY29uc29sZS5sb2cobWVzc2FnZSk7XG5cbiAgaWYgKGxvZ0RpcmVjdG9yeVBhdGggIT09IG51bGwpIHtcbiAgICByb2xsT3ZlckxvZ0ZpbGUoKTtcblxuICAgIGNvbnN0IGxvZ0ZpbGVQYXRoID0gZ2V0TG9nRmlsZVBhdGgoKSxcbiAgICAgICAgICBsb2dGaWxlQ29udGVudCA9IGAke21lc3NhZ2V9XFxuYDtcblxuICAgIGFwcGVuZFRvRmlsZShsb2dGaWxlUGF0aCwgbG9nRmlsZUNvbnRlbnQpO1xuICB9XG5cbiAgcmV0dXJuIG1lc3NhZ2U7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbG9nXG59XG5cbmZ1bmN0aW9uIHRyYWNlKG1lc3NhZ2UpIHsgcmV0dXJuIGxvZyhtZXNzYWdlLCBUUkFDRV9MRVZFTCk7IH1cblxuZnVuY3Rpb24gZGVidWcobWVzc2FnZSkgeyByZXR1cm4gbG9nKG1lc3NhZ2UsIERFQlVHX0xFVkVMKTsgfVxuXG5mdW5jdGlvbiBpbmZvKG1lc3NhZ2UpIHsgcmV0dXJuIGxvZyhtZXNzYWdlLCBJTkZPX0xFVkVMKTsgfVxuXG5mdW5jdGlvbiB3YXJuaW5nKG1lc3NhZ2UpIHsgcmV0dXJuIGxvZyhtZXNzYWdlLCBXQVJOSU5HX0xFVkVMKTsgfVxuXG5mdW5jdGlvbiBlcnJvcihtZXNzYWdlKSB7IHJldHVybiBsb2cobWVzc2FnZSwgRVJST1JfTEVWRUwpOyB9XG5cbmZ1bmN0aW9uIGZhdGFsKG1lc3NhZ2UpIHsgcmV0dXJuIGxvZyhtZXNzYWdlLCBGQVRBTF9MRVZFTCk7IH1cblxuZnVuY3Rpb24gc2V0TG9nTGV2ZWwobGV2ZWwpIHsgbG9nTGV2ZWwgPSBsZXZlbDsgfVxuXG5mdW5jdGlvbiBzZXRMb2dPcHRpb25zKGxvZ09wdGlvbnMpIHtcbiAgY29uc3QgeyBsZXZlbCwgZmlsZUJhc2VOYW1lLCBkaXJlY3RvcnlQYXRoIH0gPSBsb2dPcHRpb25zO1xuXG4gIHNldExvZ0xldmVsKGxldmVsKTtcblxuICBzZXRMb2dGaWxlQmFzZU5hbWUoZmlsZUJhc2VOYW1lKTtcblxuICBzZXRMb2dEaXJlY3RvcnlQYXRoKGRpcmVjdG9yeVBhdGgpO1xufVxuXG5mdW5jdGlvbiBnZXRMb2dGaWxlQ29udGVudCgpIHtcbiAgY29uc3QgbG9nRmlsZVBhdGggPSBnZXRMb2dGaWxlUGF0aCgpLFxuICAgICAgICBsb2dGaWxlQ29udGVudCA9IHJlYWRGaWxlKGxvZ0ZpbGVQYXRoKTtcblxuICByZXR1cm4gbG9nRmlsZUNvbnRlbnQ7XG59XG5cbmZ1bmN0aW9uIHNldExvZ0ZpbGVCYXNlTmFtZShmaWxlQmFzZU5hbWUpIHsgbG9nRmlsZUJhc2VOYW1lID0gZmlsZUJhc2VOYW1lOyB9XG5cbmZ1bmN0aW9uIHNldExvZ0RpcmVjdG9yeVBhdGgoZGlyZWN0b3J5UGF0aCkgeyBsb2dEaXJlY3RvcnlQYXRoID0gZGlyZWN0b3J5UGF0aDsgfVxuXG5PYmplY3QuYXNzaWduKGxvZywge1xuICB0cmFjZSxcbiAgZGVidWcsXG4gIGluZm8sXG4gIHdhcm5pbmcsXG4gIGVycm9yLFxuICBmYXRhbCxcbiAgc2V0TG9nTGV2ZWwsXG4gIHNldExvZ09wdGlvbnMsXG4gIGdldExvZ0ZpbGVDb250ZW50LFxuICBzZXRMb2dGaWxlQmFzZU5hbWUsXG4gIHNldExvZ0RpcmVjdG9yeVBhdGhcbn0pO1xuXG5mdW5jdGlvbiBnZXRMb2dGaWxlUGF0aCgpIHtcbiAgY29uc3QgbG9nRmlsZU5hbWUgPSBgJHtsb2dGaWxlQmFzZU5hbWV9LmxvZ2AsXG4gICAgICAgIGxvZ0ZpbGVQYXRoID0gY29uY2F0ZW5hdGVQYXRocyhsb2dEaXJlY3RvcnlQYXRoLCBsb2dGaWxlTmFtZSk7XG5cbiAgcmV0dXJuIGxvZ0ZpbGVQYXRoO1xufVxuXG5mdW5jdGlvbiBnZXRSb2xsZWRPdmVyTG9nRmlsZVBhdGgoKSB7XG4gIGNvbnN0IGN1cnJlbnREYXRlU3RyaW5nID0gZ2V0Q3VycmVudERhdGVTdHJpbmcoKSxcbiAgICAgICAgcm9sbGVkT3ZlckxvZ0ZpbGVOYW1lID0gYCR7bG9nRmlsZUJhc2VOYW1lfS4ke2N1cnJlbnREYXRlU3RyaW5nfS5sb2dgLFxuICAgICAgICByb2xsZWRPdmVyTG9nRmlsZVBhdGggPSBjb25jYXRlbmF0ZVBhdGhzKGxvZ0RpcmVjdG9yeVBhdGgsIHJvbGxlZE92ZXJMb2dGaWxlTmFtZSk7XG5cbiAgcmV0dXJuIHJvbGxlZE92ZXJMb2dGaWxlUGF0aDtcbn1cblxuZnVuY3Rpb24gZ2V0TG9nRmlsZUxhc3RNb2RpZmllZERhdGUoKSB7XG4gIGNvbnN0IGxvZ0ZpbGVQYXRoID0gZ2V0TG9nRmlsZVBhdGgoKSxcbiAgICAgICAgbG9nRmlsZVN0YXRzID0gZ2V0U3RhdHMobG9nRmlsZVBhdGgpLFxuICAgICAgICB7IG10aW1lIH0gPSBsb2dGaWxlU3RhdHMsXG4gICAgICAgIGxvZ0ZpbGVMYXN0TW9kaWZpZWREYXRlID0gbmV3IERhdGUobXRpbWUpOyAgLy8vXG5cbiAgcmV0dXJuIGxvZ0ZpbGVMYXN0TW9kaWZpZWREYXRlO1xufVxuXG5mdW5jdGlvbiByb2xsT3ZlckxvZ0ZpbGUoKSB7XG4gIGNvbnN0IGxvZ0ZpbGVQYXRoID0gZ2V0TG9nRmlsZVBhdGgoKSxcbiAgICAgICAgbG9nRmlsZUV4aXN0cyA9IGNoZWNrRmlsZUV4aXN0cyhsb2dGaWxlUGF0aCk7XG5cbiAgaWYgKCFsb2dGaWxlRXhpc3RzKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgbG9nRmlsZUxhc3RNb2RpZmllZERhdGUgPSBnZXRMb2dGaWxlTGFzdE1vZGlmaWVkRGF0ZSgpLFxuICAgICAgICBsb2dGaWxlTGFzdE1vZGlmaWVkRGF0ZUN1cnJlbnREYXRlID0gaXNEYXRlQ3VycmVudERhdGUobG9nRmlsZUxhc3RNb2RpZmllZERhdGUpO1xuXG4gIGlmICghbG9nRmlsZUxhc3RNb2RpZmllZERhdGVDdXJyZW50RGF0ZSkge1xuICAgIGNvbnN0IHJvbGxlZE92ZXJMb2dGaWxlUGF0aCA9IGdldFJvbGxlZE92ZXJMb2dGaWxlUGF0aCgpO1xuXG4gICAgcmVuYW1lRmlsZShsb2dGaWxlUGF0aCwgcm9sbGVkT3ZlckxvZ0ZpbGVQYXRoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc0RhdGVDdXJyZW50RGF0ZShkYXRlKSB7XG4gIGNvbnN0IGN1cnJlbnREYXRlID0gbmV3IERhdGUoKSxcbiAgICAgICAgZGF0ZVN0cmluZyA9IGRhdGUudG9EYXRlU3RyaW5nKCksXG4gICAgICAgIGN1cnJlbnREYXRlU3RyaW5nID0gY3VycmVudERhdGUudG9EYXRlU3RyaW5nKCksXG4gICAgICAgIGRhdGVDdXJyZW50RGF0ZSA9IChkYXRlU3RyaW5nID09PSBjdXJyZW50RGF0ZVN0cmluZyk7XG5cbiAgcmV0dXJuIGRhdGVDdXJyZW50RGF0ZTtcbn1cblxuZnVuY3Rpb24gZ2V0Q3VycmVudERhdGVTdHJpbmcoKSB7XG4gIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgpLFxuICAgICAgICBkYXkgPSBwYWRTdGFydFdpdGhaZXJvZXMoZGF0ZS5nZXREYXRlKCksIDIpLCAgLy8vXG4gICAgICAgIG1vbnRoID0gcGFkU3RhcnRXaXRoWmVyb2VzKGRhdGUuZ2V0TW9udGgoKSArIDEsIDIpLCAvLy9cbiAgICAgICAgeWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKSxcbiAgICAgICAgY3VycmVudERhdGVBbmRUaW1lU3RyaW5nID0gYCR7ZGF5fS0ke21vbnRofS0ke3llYXJ9YDtcblxuICByZXR1cm4gY3VycmVudERhdGVBbmRUaW1lU3RyaW5nO1xufVxuXG5mdW5jdGlvbiBnZXRDdXJyZW50RGF0ZUFuZFRpbWVTdHJpbmcoKSB7XG4gIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgpLFxuICAgICAgICBkYXkgPSBwYWRTdGFydFdpdGhaZXJvZXMoZGF0ZS5nZXREYXRlKCksIDIpLCAgLy8vXG4gICAgICAgIG1vbnRoID0gcGFkU3RhcnRXaXRoWmVyb2VzKGRhdGUuZ2V0TW9udGgoKSArIDEsIDIpLCAvLy9cbiAgICAgICAgeWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKSxcbiAgICAgICAgaG91cnMgPSBwYWRTdGFydFdpdGhaZXJvZXMoZGF0ZS5nZXRIb3VycygpLCAyKSxcbiAgICAgICAgbWludXRlcyA9IHBhZFN0YXJ0V2l0aFplcm9lcyhkYXRlLmdldE1pbnV0ZXMoKSwgMiksXG4gICAgICAgIHNlY29uZHMgPSBwYWRTdGFydFdpdGhaZXJvZXMoZGF0ZS5nZXRTZWNvbmRzKCksIDIpLFxuICAgICAgICBtaWxsaXNlY29uZHMgPSBwYWRTdGFydFdpdGhaZXJvZXMoZGF0ZS5nZXRNaWxsaXNlY29uZHMoKSwgMyksXG4gICAgICAgIGN1cnJlbnREYXRlQW5kVGltZVN0cmluZyA9IGAke2RheX0tJHttb250aH0tJHt5ZWFyfSAke2hvdXJzfToke21pbnV0ZXN9OiR7c2Vjb25kc30uJHttaWxsaXNlY29uZHN9YDtcblxuICByZXR1cm4gY3VycmVudERhdGVBbmRUaW1lU3RyaW5nO1xufVxuXG5mdW5jdGlvbiBzdGFja01lc3NhZ2VzRnJvbVN0YWNrKHN0YWNrKSB7XG4gIGNvbnN0IHN0YWNrTWVzc2FnZXMgPSBbXSxcbiAgICAgICAgc3RhY2tMaW5lcyA9IHN0YWNrLnNwbGl0KC9cXHJcXG58XFxuLyk7XG5cbiAgbGV0IHN0YWNrTWVzc2FnZSA9IEVNUFRZX1NUUklORztcblxuICBzdGFja0xpbmVzLmZvckVhY2goKHN0YWNrTGluZSkgPT4ge1xuICAgIGNvbnN0IG1hdGNoZXMgPSAvXlxccyphdC4qLy50ZXN0KHN0YWNrTGluZSk7XG5cbiAgICBzdGFja01lc3NhZ2UgPSAoc3RhY2tNZXNzYWdlID09PSBFTVBUWV9TVFJJTkcpID9cbiAgICAgICAgICAgICAgICAgICAgICBzdGFja0xpbmUgOlxuICAgICAgICAgICAgICAgICAgICAgICAgYCR7c3RhY2tNZXNzYWdlfVxcbiR7c3RhY2tMaW5lfWA7XG5cbiAgICBpZiAobWF0Y2hlcykge1xuICAgICAgc3RhY2tNZXNzYWdlcy5wdXNoKHN0YWNrTWVzc2FnZSk7XG5cbiAgICAgIHN0YWNrTWVzc2FnZSA9IEVNUFRZX1NUUklORztcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBzdGFja01lc3NhZ2VzO1xufVxuXG5mdW5jdGlvbiBmaWxlUGF0aEZyb21TdGFja01lc3NhZ2Uoc3RhY2tNZXNzYWdlKSB7XG4gIGNvbnN0IG1hdGNoZXMgPSBzdGFja01lc3NhZ2UubWF0Y2goLyhcXC8uKyk6XFxkKzpcXGQrL20pLFxuICAgICAgICBzZWNvbmRNYXRjaCA9IHNlY29uZChtYXRjaGVzKSxcbiAgICAgICAgYWJzb2x1dGVGaWxlUGF0aCA9IHNlY29uZE1hdGNoLCAgLy8vXG4gICAgICAgIGN1cnJlbnRXb3JraW5nRGlyZWN0b3J5UGF0aCA9IHBhdGgucmVzb2x2ZShcIi5cIiksICAvLy9cbiAgICAgICAgY3VycmVudFdvcmtpbmdEaXJlY3RvcnlQYXRoTGVuZ3RoID0gY3VycmVudFdvcmtpbmdEaXJlY3RvcnlQYXRoLmxlbmd0aCxcbiAgICAgICAgc3RhcnQgPSBjdXJyZW50V29ya2luZ0RpcmVjdG9yeVBhdGhMZW5ndGggKyAxLCAgLy8vXG4gICAgICAgIGZpbGVQYXRoID0gYWJzb2x1dGVGaWxlUGF0aC5zdWJzdHIoc3RhcnQpO1xuXG4gIHJldHVybiBmaWxlUGF0aDtcbn1cblxuZnVuY3Rpb24gbGluZU51bWJlckZyb21TdGFja01lc3NhZ2Uoc3RhY2tNZXNzYWdlKSB7XG4gIGNvbnN0IG1hdGNoZXMgPSBzdGFja01lc3NhZ2UubWF0Y2goLzooXFxkKykvbSksXG4gICAgICAgIHNlY29uZE1hdGNoID0gc2Vjb25kKG1hdGNoZXMpLFxuICAgICAgICBsaW5lTnVtYmVyID0gc2Vjb25kTWF0Y2g7IC8vL1xuXG4gIHJldHVybiBsaW5lTnVtYmVyO1xufVxuXG5mdW5jdGlvbiBwYWRTdGFydFdpdGhaZXJvZXMoc3RyaW5nLCBsZW5ndGgpIHtcbiAgY29uc3QgcGFkU3RyaW5nID0gWkVSTywgLy8vXG4gICAgICAgIHBhZGRlZFN0cmluZyA9IHBhZFN0YXJ0KHN0cmluZywgbGVuZ3RoLCBwYWRTdHJpbmcpO1xuXG4gIHJldHVybiBwYWRkZWRTdHJpbmc7XG59XG5cbmZ1bmN0aW9uIHBhZFN0YXJ0KHN0cmluZywgbGVuZ3RoLCBwYWRTdHJpbmcpIHtcbiAgbGV0IHBhZGRpbmcgPSBFTVBUWV9TVFJJTkc7XG5cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgIHBhZGRpbmcgKz0gcGFkU3RyaW5nO1xuICB9XG5cbiAgY29uc3QgcGFkZGVkU3RyaW5nID0gYCR7cGFkZGluZ30ke3N0cmluZ31gLnN1YnN0cigtbGVuZ3RoKTtcblxuICByZXR1cm4gcGFkZGVkU3RyaW5nO1xufVxuIl0sIm5hbWVzIjpbImxvZyIsImxldmVscyIsIlRSQUNFX0xFVkVMIiwiREVCVUdfTEVWRUwiLCJJTkZPX0xFVkVMIiwiV0FSTklOR19MRVZFTCIsIkVSUk9SX0xFVkVMIiwiRkFUQUxfTEVWRUwiLCJsb2dMZXZlbCIsIkRFRkFVTFRfTE9HX0xFVkVMIiwibG9nRmlsZUJhc2VOYW1lIiwiREVGQVVMVF9MT0dfRklMRV9CQVNFX05BTUUiLCJsb2dEaXJlY3RvcnlQYXRoIiwiREVGQVVMVF9MT0dfRElSRUNUT1JZX1BBVEgiLCJtZXNzYWdlT3JFcnJvciIsImxldmVsIiwiRU1QVFlfU1RSSU5HIiwic2FsaWVudFN0YWNrTWVzc2FnZUluZGV4IiwibGV2ZWxJbmRleCIsImluZGV4T2YiLCJsb2dMZXZlbEluZGV4IiwiZXJyb3IiLCJtZXNzYWdlIiwiRXJyb3IiLCJzdGFjayIsInN0YWNrTWVzc2FnZXMiLCJzdGFja01lc3NhZ2VzRnJvbVN0YWNrIiwic2FsaWVudFN0YWNrTWVzc2FnZSIsInN0YWNrTWVzc2FnZSIsInVwcGVyQ2FzZUxldmVsIiwidG9VcHBlckNhc2UiLCJjdXJyZW50RGF0ZUFuZFRpbWVTdHJpbmciLCJnZXRDdXJyZW50RGF0ZUFuZFRpbWVTdHJpbmciLCJmaWxlUGF0aCIsImZpbGVQYXRoRnJvbVN0YWNrTWVzc2FnZSIsImxpbmVOdW1iZXIiLCJsaW5lTnVtYmVyRnJvbVN0YWNrTWVzc2FnZSIsImNvbnNvbGUiLCJyb2xsT3ZlckxvZ0ZpbGUiLCJsb2dGaWxlUGF0aCIsImdldExvZ0ZpbGVQYXRoIiwibG9nRmlsZUNvbnRlbnQiLCJhcHBlbmRUb0ZpbGUiLCJ0cmFjZSIsImRlYnVnIiwiaW5mbyIsIndhcm5pbmciLCJmYXRhbCIsInNldExvZ0xldmVsIiwic2V0TG9nT3B0aW9ucyIsImxvZ09wdGlvbnMiLCJmaWxlQmFzZU5hbWUiLCJkaXJlY3RvcnlQYXRoIiwic2V0TG9nRmlsZUJhc2VOYW1lIiwic2V0TG9nRGlyZWN0b3J5UGF0aCIsImdldExvZ0ZpbGVDb250ZW50IiwicmVhZEZpbGUiLCJPYmplY3QiLCJhc3NpZ24iLCJsb2dGaWxlTmFtZSIsImNvbmNhdGVuYXRlUGF0aHMiLCJnZXRSb2xsZWRPdmVyTG9nRmlsZVBhdGgiLCJjdXJyZW50RGF0ZVN0cmluZyIsImdldEN1cnJlbnREYXRlU3RyaW5nIiwicm9sbGVkT3ZlckxvZ0ZpbGVOYW1lIiwicm9sbGVkT3ZlckxvZ0ZpbGVQYXRoIiwiZ2V0TG9nRmlsZUxhc3RNb2RpZmllZERhdGUiLCJsb2dGaWxlU3RhdHMiLCJnZXRTdGF0cyIsIm10aW1lIiwibG9nRmlsZUxhc3RNb2RpZmllZERhdGUiLCJEYXRlIiwibG9nRmlsZUV4aXN0cyIsImNoZWNrRmlsZUV4aXN0cyIsImxvZ0ZpbGVMYXN0TW9kaWZpZWREYXRlQ3VycmVudERhdGUiLCJpc0RhdGVDdXJyZW50RGF0ZSIsInJlbmFtZUZpbGUiLCJkYXRlIiwiY3VycmVudERhdGUiLCJkYXRlU3RyaW5nIiwidG9EYXRlU3RyaW5nIiwiZGF0ZUN1cnJlbnREYXRlIiwiZGF5IiwicGFkU3RhcnRXaXRoWmVyb2VzIiwiZ2V0RGF0ZSIsIm1vbnRoIiwiZ2V0TW9udGgiLCJ5ZWFyIiwiZ2V0RnVsbFllYXIiLCJob3VycyIsImdldEhvdXJzIiwibWludXRlcyIsImdldE1pbnV0ZXMiLCJzZWNvbmRzIiwiZ2V0U2Vjb25kcyIsIm1pbGxpc2Vjb25kcyIsImdldE1pbGxpc2Vjb25kcyIsInN0YWNrTGluZXMiLCJzcGxpdCIsImZvckVhY2giLCJzdGFja0xpbmUiLCJtYXRjaGVzIiwidGVzdCIsInB1c2giLCJtYXRjaCIsInNlY29uZE1hdGNoIiwic2Vjb25kIiwiYWJzb2x1dGVGaWxlUGF0aCIsImN1cnJlbnRXb3JraW5nRGlyZWN0b3J5UGF0aCIsInBhdGgiLCJyZXNvbHZlIiwiY3VycmVudFdvcmtpbmdEaXJlY3RvcnlQYXRoTGVuZ3RoIiwibGVuZ3RoIiwic3RhcnQiLCJzdWJzdHIiLCJzdHJpbmciLCJwYWRTdHJpbmciLCJaRVJPIiwicGFkZGVkU3RyaW5nIiwicGFkU3RhcnQiLCJwYWRkaW5nIiwiaW5kZXgiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OztRQThFQTtlQUFBOztRQXREZ0JBO2VBQUFBOzs7NkRBdEJDO3VCQUVNO3VCQUNVOzJCQUNFOzRCQUMyQzswQkFDWTt3QkFDSTs7Ozs7O0FBRTlGLE1BQU1DLFNBQVM7SUFDYkMsbUJBQVc7SUFDWEMsbUJBQVc7SUFDWEMsa0JBQVU7SUFDVkMscUJBQWE7SUFDYkMsbUJBQVc7SUFDWEMsbUJBQVc7Q0FDWjtBQUVELElBQUlDLFdBQVdDLDJCQUFpQixFQUM1QkMsa0JBQWtCQyxvQ0FBMEIsRUFDNUNDLG1CQUFtQkMsb0NBQTBCO0FBRTFDLFNBQVNiLElBQUljLGNBQWMsRUFBRUMsUUFBUUMsdUJBQVk7SUFDdEQsSUFBSUMsMkJBQTJCO0lBRS9CLElBQUlGLFVBQVVDLHVCQUFZLEVBQUU7UUFDMUIsTUFBTUUsYUFBYWpCLE9BQU9rQixPQUFPLENBQUNKLFFBQzVCSyxnQkFBZ0JuQixPQUFPa0IsT0FBTyxDQUFDWDtRQUVyQyxJQUFJVSxhQUFhRSxlQUFlO1lBQzlCO1FBQ0Y7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
|
package/lib/utilities/package.js
CHANGED
|
@@ -31,45 +31,45 @@ _export(exports, {
|
|
|
31
31
|
return getVersion;
|
|
32
32
|
}
|
|
33
33
|
});
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
34
|
+
const _array = require("../utilities/array");
|
|
35
|
+
const _fileSystem = require("../utilities/fileSystem");
|
|
36
|
+
const _path = require("../utilities/path");
|
|
37
|
+
const { PACKAGE_JSON } = require("../constants");
|
|
38
|
+
let packageJSON = null;
|
|
39
39
|
function getName() {
|
|
40
|
-
|
|
40
|
+
const packageJSON = getPackageJSON(), { name = null } = packageJSON;
|
|
41
41
|
return name;
|
|
42
42
|
}
|
|
43
43
|
function getAuthor() {
|
|
44
|
-
|
|
44
|
+
const packageJSON = getPackageJSON(), { author = null } = packageJSON;
|
|
45
45
|
return author;
|
|
46
46
|
}
|
|
47
47
|
function getVersion() {
|
|
48
|
-
|
|
48
|
+
const packageJSON = getPackageJSON(), { version = null } = packageJSON;
|
|
49
49
|
return version;
|
|
50
50
|
}
|
|
51
51
|
function getLicense() {
|
|
52
|
-
|
|
52
|
+
const packageJSON = getPackageJSON(), { license = null } = packageJSON;
|
|
53
53
|
return license;
|
|
54
54
|
}
|
|
55
55
|
function getPackagePath() {
|
|
56
|
-
|
|
56
|
+
const matches = __dirname.match(/^(.+)[\/\\]node_modules/), secondMatch = (0, _array.second)(matches), packagePath = secondMatch; ///
|
|
57
57
|
return packagePath;
|
|
58
58
|
}
|
|
59
59
|
function getPackageJSON() {
|
|
60
60
|
if (packageJSON === null) {
|
|
61
|
-
|
|
61
|
+
const packagePath = getPackagePath(), packageJSONFilePath = (0, _path.concatenatePaths)(packagePath, PACKAGE_JSON), packageJSONFileContent = (0, _fileSystem.readFile)(packageJSONFilePath);
|
|
62
62
|
packageJSON = JSON.parse(packageJSONFileContent);
|
|
63
63
|
}
|
|
64
64
|
return packageJSON;
|
|
65
65
|
}
|
|
66
|
-
|
|
67
|
-
getName
|
|
68
|
-
getAuthor
|
|
69
|
-
getVersion
|
|
70
|
-
getLicense
|
|
71
|
-
getPackagePath
|
|
72
|
-
getPackageJSON
|
|
66
|
+
const _default = {
|
|
67
|
+
getName,
|
|
68
|
+
getAuthor,
|
|
69
|
+
getVersion,
|
|
70
|
+
getLicense,
|
|
71
|
+
getPackagePath,
|
|
72
|
+
getPackageJSON
|
|
73
73
|
};
|
|
74
74
|
|
|
75
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
75
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvcGFja2FnZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgeyBQQUNLQUdFX0pTT04gfSA9IHJlcXVpcmUoXCIuLi9jb25zdGFudHNcIik7XG5cbmltcG9ydCB7IHNlY29uZCB9IGZyb20gXCIuLi91dGlsaXRpZXMvYXJyYXlcIjtcbmltcG9ydCB7IHJlYWRGaWxlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9maWxlU3lzdGVtXCI7XG5pbXBvcnQgeyBjb25jYXRlbmF0ZVBhdGhzIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9wYXRoXCI7XG5cbmxldCBwYWNrYWdlSlNPTiA9IG51bGw7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXROYW1lKCkge1xuICBjb25zdCBwYWNrYWdlSlNPTiA9IGdldFBhY2thZ2VKU09OKCksXG4gICAgICAgIHsgbmFtZSA9IG51bGwgfSA9IHBhY2thZ2VKU09OO1xuXG4gIHJldHVybiBuYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0QXV0aG9yKCkge1xuICBjb25zdCBwYWNrYWdlSlNPTiA9IGdldFBhY2thZ2VKU09OKCksXG4gICAgICAgIHsgYXV0aG9yID0gbnVsbCB9ID0gcGFja2FnZUpTT047XG5cbiAgcmV0dXJuIGF1dGhvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFZlcnNpb24oKSB7XG4gIGNvbnN0IHBhY2thZ2VKU09OID0gZ2V0UGFja2FnZUpTT04oKSxcbiAgICAgICAgeyB2ZXJzaW9uID0gbnVsbCB9ID0gcGFja2FnZUpTT047XG5cbiAgcmV0dXJuIHZlcnNpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRMaWNlbnNlKCkge1xuICBjb25zdCBwYWNrYWdlSlNPTiA9IGdldFBhY2thZ2VKU09OKCksXG4gICAgICAgIHsgbGljZW5zZSA9IG51bGwgfSA9IHBhY2thZ2VKU09OO1xuXG4gIHJldHVybiBsaWNlbnNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFja2FnZVBhdGgoKSB7XG4gIGNvbnN0IG1hdGNoZXMgPSBfX2Rpcm5hbWUubWF0Y2goL14oLispW1xcL1xcXFxdbm9kZV9tb2R1bGVzLyksXG4gICAgICAgIHNlY29uZE1hdGNoID0gc2Vjb25kKG1hdGNoZXMpLFxuICAgICAgICBwYWNrYWdlUGF0aCA9IHNlY29uZE1hdGNoOyAvLy9cblxuICByZXR1cm4gcGFja2FnZVBhdGg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYWNrYWdlSlNPTigpIHtcbiAgaWYgKHBhY2thZ2VKU09OID09PSBudWxsKSB7XG4gICAgY29uc3QgcGFja2FnZVBhdGggPSBnZXRQYWNrYWdlUGF0aCgpLFxuICAgICAgICAgIHBhY2thZ2VKU09ORmlsZVBhdGggPSBjb25jYXRlbmF0ZVBhdGhzKHBhY2thZ2VQYXRoLCBQQUNLQUdFX0pTT04pLFxuICAgICAgICAgIHBhY2thZ2VKU09ORmlsZUNvbnRlbnQgPSByZWFkRmlsZShwYWNrYWdlSlNPTkZpbGVQYXRoKTtcblxuICAgIHBhY2thZ2VKU09OID0gSlNPTi5wYXJzZShwYWNrYWdlSlNPTkZpbGVDb250ZW50KTtcbiAgfVxuXG4gIHJldHVybiBwYWNrYWdlSlNPTjtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBnZXROYW1lLFxuICBnZXRBdXRob3IsXG4gIGdldFZlcnNpb24sXG4gIGdldExpY2Vuc2UsXG4gIGdldFBhY2thZ2VQYXRoLFxuICBnZXRQYWNrYWdlSlNPTlxufTtcbiJdLCJuYW1lcyI6WyJnZXRBdXRob3IiLCJnZXRMaWNlbnNlIiwiZ2V0TmFtZSIsImdldFBhY2thZ2VKU09OIiwiZ2V0UGFja2FnZVBhdGgiLCJnZXRWZXJzaW9uIiwiUEFDS0FHRV9KU09OIiwicmVxdWlyZSIsInBhY2thZ2VKU09OIiwibmFtZSIsImF1dGhvciIsInZlcnNpb24iLCJsaWNlbnNlIiwibWF0Y2hlcyIsIl9fZGlybmFtZSIsIm1hdGNoIiwic2Vjb25kTWF0Y2giLCJzZWNvbmQiLCJwYWNrYWdlUGF0aCIsInBhY2thZ2VKU09ORmlsZVBhdGgiLCJjb25jYXRlbmF0ZVBhdGhzIiwicGFja2FnZUpTT05GaWxlQ29udGVudCIsInJlYWRGaWxlIiwiSlNPTiIsInBhcnNlIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7UUEwREE7ZUFBQTs7UUF6Q2dCQTtlQUFBQTs7UUFjQUM7ZUFBQUE7O1FBckJBQztlQUFBQTs7UUFvQ0FDO2VBQUFBOztRQVJBQztlQUFBQTs7UUFkQUM7ZUFBQUE7Ozt1QkFwQk87NEJBQ0U7c0JBQ1E7QUFKakMsTUFBTSxFQUFFQyxZQUFZLEVBQUUsR0FBR0MsUUFBUTtBQU1qQyxJQUFJQyxjQUFjO0FBRVgsU0FBU047SUFDZCxNQUFNTSxjQUFjTCxrQkFDZCxFQUFFTSxPQUFPLElBQUksRUFBRSxHQUFHRDtJQUV4QixPQUFPQztBQUNUO0FBRU8sU0FBU1Q7SUFDZCxNQUFNUSxjQUFjTCxrQkFDZCxFQUFFTyxTQUFTLElBQUksRUFBRSxHQUFHRjtJQUUxQixPQUFPRTtBQUNUO0FBRU8sU0FBU0w7SUFDZCxNQUFNRyxjQUFjTCxrQkFDZCxFQUFFUSxVQUFVLElBQUksRUFBRSxHQUFHSDtJQUUzQixPQUFPRztBQUNUO0FBRU8sU0FBU1Y7SUFDZCxNQUFNTyxjQUFjTCxrQkFDZCxFQUFFUyxVQUFVLElBQUksRUFBRSxHQUFHSjtJQUUzQixPQUFPSTtBQUNUO0FBRU8sU0FBU1I7SUFDZCxNQUFNUyxVQUFVQyxVQUFVQyxLQUFLLENBQUMsNEJBQzFCQyxjQUFjQyxJQUFBQSxhQUFNLEVBQUNKLFVBQ3JCSyxjQUFjRixhQUFhLEdBQUc7SUFFcEMsT0FBT0U7QUFDVDtBQUVPLFNBQVNmO0lBQ2QsSUFBSUssZ0JBQWdCLE1BQU07UUFDeEIsTUFBTVUsY0FBY2Qsa0JBQ2RlLHNCQUFzQkMsSUFBQUEsc0JBQWdCLEVBQUNGLGFBQWFaLGVBQ3BEZSx5QkFBeUJDLElBQUFBLG9CQUFRLEVBQUNIO1FBRXhDWCxjQUFjZSxLQUFLQyxLQUFLLENBQUNIO0lBQzNCO0lBRUEsT0FBT2I7QUFDVDtNQUVBLFdBQWU7SUFDYk47SUFDQUY7SUFDQUs7SUFDQUo7SUFDQUc7SUFDQUQ7QUFDRiJ9
|
package/lib/utilities/path.js
CHANGED
|
@@ -49,58 +49,33 @@ _export(exports, {
|
|
|
49
49
|
return topmostDirectoryPathFromPath;
|
|
50
50
|
}
|
|
51
51
|
});
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
function _array_like_to_array(arr, len) {
|
|
55
|
-
if (len == null || len > arr.length) len = arr.length;
|
|
56
|
-
for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
|
|
57
|
-
return arr2;
|
|
58
|
-
}
|
|
59
|
-
function _array_without_holes(arr) {
|
|
60
|
-
if (Array.isArray(arr)) return _array_like_to_array(arr);
|
|
61
|
-
}
|
|
62
|
-
function _iterable_to_array(iter) {
|
|
63
|
-
if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
|
|
64
|
-
}
|
|
65
|
-
function _non_iterable_spread() {
|
|
66
|
-
throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
|
67
|
-
}
|
|
68
|
-
function _to_consumable_array(arr) {
|
|
69
|
-
return _array_without_holes(arr) || _iterable_to_array(arr) || _unsupported_iterable_to_array(arr) || _non_iterable_spread();
|
|
70
|
-
}
|
|
71
|
-
function _unsupported_iterable_to_array(o, minLen) {
|
|
72
|
-
if (!o) return;
|
|
73
|
-
if (typeof o === "string") return _array_like_to_array(o, minLen);
|
|
74
|
-
var n = Object.prototype.toString.call(o).slice(8, -1);
|
|
75
|
-
if (n === "Object" && o.constructor) n = o.constructor.name;
|
|
76
|
-
if (n === "Map" || n === "Set") return Array.from(n);
|
|
77
|
-
if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
|
|
78
|
-
}
|
|
52
|
+
const _constants = require("../constants");
|
|
53
|
+
const _array = require("../utilities/array");
|
|
79
54
|
function isPathName(path) {
|
|
80
55
|
path = path.replace(/^\//, _constants.EMPTY_STRING).replace(/\/$/, _constants.EMPTY_STRING); ///
|
|
81
|
-
|
|
56
|
+
const pathName = /\//.test(path) === false;
|
|
82
57
|
return pathName;
|
|
83
58
|
}
|
|
84
59
|
function isPathTopmostName(path) {
|
|
85
|
-
|
|
60
|
+
const pathName = isPathName(path), pathAbsolutePath = isPathAbsolutePath(path), pathTopmostName = pathName && pathAbsolutePath;
|
|
86
61
|
return pathTopmostName;
|
|
87
62
|
}
|
|
88
63
|
function isPathRelativePath(path) {
|
|
89
|
-
|
|
64
|
+
const pathRelativePath = !/^\//.test(path);
|
|
90
65
|
return pathRelativePath;
|
|
91
66
|
}
|
|
92
67
|
function isPathAbsolutePath(path) {
|
|
93
|
-
|
|
68
|
+
const pathAbsolutePath = /^\//.test(path);
|
|
94
69
|
return pathAbsolutePath;
|
|
95
70
|
}
|
|
96
71
|
function isTopmostNameInAbsolutePath(topmostName, absolutePath) {
|
|
97
|
-
|
|
72
|
+
const regExp = new RegExp(`^${topmostName}(?:\\/.+)?$`), topmostNameInAbsolutePath = regExp.test(absolutePath);
|
|
98
73
|
return topmostNameInAbsolutePath;
|
|
99
74
|
}
|
|
100
75
|
function combinePaths(path, relativePath) {
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
76
|
+
let combinedPath = null;
|
|
77
|
+
const pathNames = path.split(/\//), relativePathNames = relativePath.split(/\//);
|
|
78
|
+
let lastPathName, firstRelativePathName = (0, _array.first)(relativePathNames);
|
|
104
79
|
if (firstRelativePathName === ".") {
|
|
105
80
|
relativePathNames.shift();
|
|
106
81
|
}
|
|
@@ -113,81 +88,75 @@ function combinePaths(path, relativePath) {
|
|
|
113
88
|
lastPathName = (0, _array.last)(pathNames);
|
|
114
89
|
}
|
|
115
90
|
if (lastPathName !== undefined) {
|
|
116
|
-
|
|
91
|
+
const combinedPathNames = [].concat(pathNames).concat(relativePathNames);
|
|
117
92
|
combinedPath = combinedPathNames.join("/");
|
|
118
93
|
}
|
|
119
94
|
return combinedPath;
|
|
120
95
|
}
|
|
121
|
-
function concatenatePaths(path, relativePath) {
|
|
122
|
-
|
|
123
|
-
remainingArguments[_key - 2] = arguments[_key];
|
|
124
|
-
}
|
|
125
|
-
var concatenatedPath;
|
|
96
|
+
function concatenatePaths(path, relativePath, ...remainingArguments) {
|
|
97
|
+
let concatenatedPath;
|
|
126
98
|
path = path.replace(/\/$/, _constants.EMPTY_STRING); ///
|
|
127
|
-
concatenatedPath =
|
|
128
|
-
|
|
99
|
+
concatenatedPath = `${path}/${relativePath}`;
|
|
100
|
+
const remainingAArgumentsLength = remainingArguments.length;
|
|
129
101
|
if (remainingAArgumentsLength > 0) {
|
|
130
|
-
|
|
131
|
-
concatenatedPath = concatenatePaths
|
|
132
|
-
_$path,
|
|
133
|
-
_$relativePath
|
|
134
|
-
].concat(_to_consumable_array(remainingArguments)));
|
|
102
|
+
const path = concatenatedPath, relativePath = remainingArguments.shift();
|
|
103
|
+
concatenatedPath = concatenatePaths(path, relativePath, ...remainingArguments);
|
|
135
104
|
}
|
|
136
105
|
return concatenatedPath;
|
|
137
106
|
}
|
|
138
107
|
function bottommostNameFromPath(path) {
|
|
139
|
-
|
|
140
|
-
|
|
108
|
+
let bottommostName = null;
|
|
109
|
+
const matches = path.match(/^.*\/([^\/]+\/?)$/);
|
|
141
110
|
if (matches !== null) {
|
|
142
|
-
|
|
111
|
+
const secondMatch = (0, _array.second)(matches);
|
|
143
112
|
bottommostName = secondMatch; ///
|
|
144
113
|
}
|
|
145
114
|
return bottommostName;
|
|
146
115
|
}
|
|
147
116
|
function topmostDirectoryPathFromPath(path) {
|
|
148
|
-
|
|
117
|
+
const matches = path.match(/^(.+)\/[^\/]+\/?$/), secondMatch = (0, _array.second)(matches), topmostDirectoryPath = secondMatch; ///
|
|
149
118
|
return topmostDirectoryPath;
|
|
150
119
|
}
|
|
151
120
|
function topmostDirectoryNameFromPath(path) {
|
|
152
|
-
|
|
153
|
-
|
|
121
|
+
let topmostDirectoryName = null;
|
|
122
|
+
const matches = path.match(/^([^\/]+)\/.+$/);
|
|
154
123
|
if (matches !== null) {
|
|
155
|
-
|
|
124
|
+
const secondMatch = (0, _array.second)(matches);
|
|
156
125
|
topmostDirectoryName = secondMatch; ///
|
|
157
126
|
}
|
|
158
127
|
return topmostDirectoryName;
|
|
159
128
|
}
|
|
160
129
|
function pathWithoutBottommostNameFromPath(path) {
|
|
161
|
-
|
|
162
|
-
|
|
130
|
+
let pathWithoutBottommostName = null;
|
|
131
|
+
const matches = path.match(/^(.*)\/[^\/]+\/?$/);
|
|
163
132
|
if (matches !== null) {
|
|
164
|
-
|
|
133
|
+
const secondMatch = (0, _array.second)(matches);
|
|
165
134
|
pathWithoutBottommostName = secondMatch; ///
|
|
166
135
|
}
|
|
167
136
|
return pathWithoutBottommostName;
|
|
168
137
|
}
|
|
169
138
|
function pathWithoutTopmostDirectoryNameFromPath(path) {
|
|
170
|
-
|
|
171
|
-
|
|
139
|
+
let pathWithoutTopmostDirectoryName = null;
|
|
140
|
+
const matches = path.match(/^[^\/]+\/(.+)$/);
|
|
172
141
|
if (matches !== null) {
|
|
173
|
-
|
|
142
|
+
const secondMatch = (0, _array.second)(matches);
|
|
174
143
|
pathWithoutTopmostDirectoryName = secondMatch;
|
|
175
144
|
}
|
|
176
145
|
return pathWithoutTopmostDirectoryName;
|
|
177
146
|
}
|
|
178
|
-
|
|
179
|
-
isPathName
|
|
180
|
-
isPathTopmostName
|
|
181
|
-
isPathRelativePath
|
|
182
|
-
isPathAbsolutePath
|
|
183
|
-
isTopmostNameInAbsolutePath
|
|
184
|
-
combinePaths
|
|
185
|
-
concatenatePaths
|
|
186
|
-
bottommostNameFromPath
|
|
187
|
-
topmostDirectoryPathFromPath
|
|
188
|
-
topmostDirectoryNameFromPath
|
|
189
|
-
pathWithoutBottommostNameFromPath
|
|
190
|
-
pathWithoutTopmostDirectoryNameFromPath
|
|
147
|
+
const _default = {
|
|
148
|
+
isPathName,
|
|
149
|
+
isPathTopmostName,
|
|
150
|
+
isPathRelativePath,
|
|
151
|
+
isPathAbsolutePath,
|
|
152
|
+
isTopmostNameInAbsolutePath,
|
|
153
|
+
combinePaths,
|
|
154
|
+
concatenatePaths,
|
|
155
|
+
bottommostNameFromPath,
|
|
156
|
+
topmostDirectoryPathFromPath,
|
|
157
|
+
topmostDirectoryNameFromPath,
|
|
158
|
+
pathWithoutBottommostNameFromPath,
|
|
159
|
+
pathWithoutTopmostDirectoryNameFromPath
|
|
191
160
|
};
|
|
192
161
|
|
|
193
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvcGF0aC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgZmlyc3QsIHNlY29uZCwgbGFzdCB9IGZyb20gXCIuLi91dGlsaXRpZXMvYXJyYXlcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzUGF0aE5hbWUocGF0aCkge1xuICBwYXRoID0gcGF0aC5yZXBsYWNlKC9eXFwvLywgRU1QVFlfU1RSSU5HKS5yZXBsYWNlKC9cXC8kLywgRU1QVFlfU1RSSU5HKTsgLy8vXG5cbiAgY29uc3QgcGF0aE5hbWUgPSAoL1xcLy8udGVzdChwYXRoKSA9PT0gZmFsc2UpO1xuXG4gIHJldHVybiBwYXRoTmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUGF0aFRvcG1vc3ROYW1lKHBhdGgpIHtcbiAgY29uc3QgcGF0aE5hbWUgPSBpc1BhdGhOYW1lKHBhdGgpLFxuICAgICAgICBwYXRoQWJzb2x1dGVQYXRoID0gaXNQYXRoQWJzb2x1dGVQYXRoKHBhdGgpLFxuICAgICAgICBwYXRoVG9wbW9zdE5hbWUgPSAocGF0aE5hbWUgJiYgcGF0aEFic29sdXRlUGF0aCk7XG5cbiAgcmV0dXJuIHBhdGhUb3Btb3N0TmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUGF0aFJlbGF0aXZlUGF0aChwYXRoKSB7XG4gIGNvbnN0IHBhdGhSZWxhdGl2ZVBhdGggPSAhL15cXC8vLnRlc3QocGF0aCk7XG5cbiAgcmV0dXJuIHBhdGhSZWxhdGl2ZVBhdGg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1BhdGhBYnNvbHV0ZVBhdGgocGF0aCkge1xuICBjb25zdCBwYXRoQWJzb2x1dGVQYXRoID0gL15cXC8vLnRlc3QocGF0aCk7XG5cbiAgcmV0dXJuIHBhdGhBYnNvbHV0ZVBhdGg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1RvcG1vc3ROYW1lSW5BYnNvbHV0ZVBhdGgodG9wbW9zdE5hbWUsIGFic29sdXRlUGF0aCkge1xuICBjb25zdCByZWdFeHAgPSBuZXcgUmVnRXhwKGBeJHt0b3Btb3N0TmFtZX0oPzpcXFxcLy4rKT8kYCksXG4gICAgICAgIHRvcG1vc3ROYW1lSW5BYnNvbHV0ZVBhdGggPSByZWdFeHAudGVzdChhYnNvbHV0ZVBhdGgpO1xuXG4gIHJldHVybiB0b3Btb3N0TmFtZUluQWJzb2x1dGVQYXRoXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5lUGF0aHMocGF0aCwgcmVsYXRpdmVQYXRoKSB7XG4gIGxldCBjb21iaW5lZFBhdGggPSBudWxsO1xuXG4gIGNvbnN0IHBhdGhOYW1lcyA9IHBhdGguc3BsaXQoL1xcLy8pLFxuICAgICAgICByZWxhdGl2ZVBhdGhOYW1lcyA9IHJlbGF0aXZlUGF0aC5zcGxpdCgvXFwvLyk7XG5cbiAgbGV0IGxhc3RQYXRoTmFtZSxcbiAgICAgIGZpcnN0UmVsYXRpdmVQYXRoTmFtZSA9IGZpcnN0KHJlbGF0aXZlUGF0aE5hbWVzKTtcblxuICBpZiAoZmlyc3RSZWxhdGl2ZVBhdGhOYW1lID09PSBcIi5cIikge1xuICAgIHJlbGF0aXZlUGF0aE5hbWVzLnNoaWZ0KCk7XG4gIH1cblxuICBmaXJzdFJlbGF0aXZlUGF0aE5hbWUgPSBmaXJzdChyZWxhdGl2ZVBhdGhOYW1lcyk7XG4gIGxhc3RQYXRoTmFtZSA9IGxhc3QocGF0aE5hbWVzKTtcblxuICB3aGlsZSAoKGZpcnN0UmVsYXRpdmVQYXRoTmFtZSA9PT0gXCIuLlwiKSAmJiAobGFzdFBhdGhOYW1lICE9PSB1bmRlZmluZWQpKSB7XG4gICAgcmVsYXRpdmVQYXRoTmFtZXMuc2hpZnQoKTtcbiAgICBwYXRoTmFtZXMucG9wKCk7XG5cbiAgICBmaXJzdFJlbGF0aXZlUGF0aE5hbWUgPSBmaXJzdChyZWxhdGl2ZVBhdGhOYW1lcyk7XG4gICAgbGFzdFBhdGhOYW1lID0gbGFzdChwYXRoTmFtZXMpO1xuICB9XG5cbiAgaWYgKGxhc3RQYXRoTmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc3QgY29tYmluZWRQYXRoTmFtZXMgPSBbXS5jb25jYXQocGF0aE5hbWVzKS5jb25jYXQocmVsYXRpdmVQYXRoTmFtZXMpO1xuXG4gICAgY29tYmluZWRQYXRoID0gY29tYmluZWRQYXRoTmFtZXMuam9pbihcIi9cIik7XG4gIH1cblxuICByZXR1cm4gY29tYmluZWRQYXRoO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uY2F0ZW5hdGVQYXRocyhwYXRoLCByZWxhdGl2ZVBhdGgsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cykge1xuICBsZXQgY29uY2F0ZW5hdGVkUGF0aDtcblxuICBwYXRoID0gcGF0aC5yZXBsYWNlKC9cXC8kLywgRU1QVFlfU1RSSU5HKTsgIC8vL1xuXG4gIGNvbmNhdGVuYXRlZFBhdGggPSBgJHtwYXRofS8ke3JlbGF0aXZlUGF0aH1gO1xuXG4gIGNvbnN0IHJlbWFpbmluZ0FBcmd1bWVudHNMZW5ndGggPSByZW1haW5pbmdBcmd1bWVudHMubGVuZ3RoO1xuXG4gIGlmIChyZW1haW5pbmdBQXJndW1lbnRzTGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IHBhdGggPSBjb25jYXRlbmF0ZWRQYXRoLCAgLy8vXG4gICAgICAgICAgcmVsYXRpdmVQYXRoID0gcmVtYWluaW5nQXJndW1lbnRzLnNoaWZ0KCk7XG5cbiAgICBjb25jYXRlbmF0ZWRQYXRoID0gY29uY2F0ZW5hdGVQYXRocyhwYXRoLCByZWxhdGl2ZVBhdGgsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cyk7XG4gIH1cblxuICByZXR1cm4gY29uY2F0ZW5hdGVkUGF0aDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJvdHRvbW1vc3ROYW1lRnJvbVBhdGgocGF0aCkge1xuICBsZXQgYm90dG9tbW9zdE5hbWUgPSBudWxsO1xuXG4gIGNvbnN0IG1hdGNoZXMgPSBwYXRoLm1hdGNoKC9eLipcXC8oW15cXC9dK1xcLz8pJC8pO1xuXG4gIGlmIChtYXRjaGVzICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc2Vjb25kTWF0Y2ggPSBzZWNvbmQobWF0Y2hlcyk7XG5cbiAgICBib3R0b21tb3N0TmFtZSA9IHNlY29uZE1hdGNoOyAgLy8vXG4gIH1cblxuICByZXR1cm4gYm90dG9tbW9zdE5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b3Btb3N0RGlyZWN0b3J5UGF0aEZyb21QYXRoKHBhdGgpIHtcbiAgY29uc3QgbWF0Y2hlcyA9IHBhdGgubWF0Y2goL14oLispXFwvW15cXC9dK1xcLz8kLyksXG4gICAgICAgIHNlY29uZE1hdGNoID0gc2Vjb25kKG1hdGNoZXMpLFxuICAgICAgICB0b3Btb3N0RGlyZWN0b3J5UGF0aCA9IHNlY29uZE1hdGNoOyAvLy9cblxuICByZXR1cm4gdG9wbW9zdERpcmVjdG9yeVBhdGg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b3Btb3N0RGlyZWN0b3J5TmFtZUZyb21QYXRoKHBhdGgpIHtcbiAgbGV0IHRvcG1vc3REaXJlY3RvcnlOYW1lID0gbnVsbDtcblxuICBjb25zdCBtYXRjaGVzID0gcGF0aC5tYXRjaCgvXihbXlxcL10rKVxcLy4rJC8pO1xuXG4gIGlmIChtYXRjaGVzICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc2Vjb25kTWF0Y2ggPSBzZWNvbmQobWF0Y2hlcyk7XG5cbiAgICB0b3Btb3N0RGlyZWN0b3J5TmFtZSA9IHNlY29uZE1hdGNoOyAgLy8vXG4gIH1cblxuICByZXR1cm4gdG9wbW9zdERpcmVjdG9yeU5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXRoV2l0aG91dEJvdHRvbW1vc3ROYW1lRnJvbVBhdGgocGF0aCkge1xuICBsZXQgcGF0aFdpdGhvdXRCb3R0b21tb3N0TmFtZSA9IG51bGw7XG5cbiAgY29uc3QgbWF0Y2hlcyA9IHBhdGgubWF0Y2goL14oLiopXFwvW15cXC9dK1xcLz8kLyk7XG5cbiAgaWYgKG1hdGNoZXMgIT09IG51bGwpIHtcbiAgICBjb25zdCBzZWNvbmRNYXRjaCA9IHNlY29uZChtYXRjaGVzKTtcblxuICAgIHBhdGhXaXRob3V0Qm90dG9tbW9zdE5hbWUgPSBzZWNvbmRNYXRjaDsgLy8vXG4gIH1cblxuICByZXR1cm4gcGF0aFdpdGhvdXRCb3R0b21tb3N0TmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhdGhXaXRob3V0VG9wbW9zdERpcmVjdG9yeU5hbWVGcm9tUGF0aChwYXRoKSB7XG4gIGxldCBwYXRoV2l0aG91dFRvcG1vc3REaXJlY3RvcnlOYW1lID0gbnVsbDtcblxuICBjb25zdCBtYXRjaGVzID0gcGF0aC5tYXRjaCgvXlteXFwvXStcXC8oLispJC8pO1xuXG4gIGlmIChtYXRjaGVzICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc2Vjb25kTWF0Y2ggPSBzZWNvbmQobWF0Y2hlcyk7XG5cbiAgICBwYXRoV2l0aG91dFRvcG1vc3REaXJlY3RvcnlOYW1lID0gc2Vjb25kTWF0Y2g7XG4gIH1cblxuICByZXR1cm4gcGF0aFdpdGhvdXRUb3Btb3N0RGlyZWN0b3J5TmFtZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBpc1BhdGhOYW1lLFxuICBpc1BhdGhUb3Btb3N0TmFtZSxcbiAgaXNQYXRoUmVsYXRpdmVQYXRoLFxuICBpc1BhdGhBYnNvbHV0ZVBhdGgsXG4gIGlzVG9wbW9zdE5hbWVJbkFic29sdXRlUGF0aCxcbiAgY29tYmluZVBhdGhzLFxuICBjb25jYXRlbmF0ZVBhdGhzLFxuICBib3R0b21tb3N0TmFtZUZyb21QYXRoLFxuICB0b3Btb3N0RGlyZWN0b3J5UGF0aEZyb21QYXRoLFxuICB0b3Btb3N0RGlyZWN0b3J5TmFtZUZyb21QYXRoLFxuICBwYXRoV2l0aG91dEJvdHRvbW1vc3ROYW1lRnJvbVBhdGgsXG4gIHBhdGhXaXRob3V0VG9wbW9zdERpcmVjdG9yeU5hbWVGcm9tUGF0aFxufTtcbiJdLCJuYW1lcyI6WyJib3R0b21tb3N0TmFtZUZyb21QYXRoIiwiY29tYmluZVBhdGhzIiwiY29uY2F0ZW5hdGVQYXRocyIsImlzUGF0aEFic29sdXRlUGF0aCIsImlzUGF0aE5hbWUiLCJpc1BhdGhSZWxhdGl2ZVBhdGgiLCJpc1BhdGhUb3Btb3N0TmFtZSIsImlzVG9wbW9zdE5hbWVJbkFic29sdXRlUGF0aCIsInBhdGhXaXRob3V0Qm90dG9tbW9zdE5hbWVGcm9tUGF0aCIsInBhdGhXaXRob3V0VG9wbW9zdERpcmVjdG9yeU5hbWVGcm9tUGF0aCIsInRvcG1vc3REaXJlY3RvcnlOYW1lRnJvbVBhdGgiLCJ0b3Btb3N0RGlyZWN0b3J5UGF0aEZyb21QYXRoIiwicGF0aCIsInJlcGxhY2UiLCJFTVBUWV9TVFJJTkciLCJwYXRoTmFtZSIsInRlc3QiLCJwYXRoQWJzb2x1dGVQYXRoIiwicGF0aFRvcG1vc3ROYW1lIiwicGF0aFJlbGF0aXZlUGF0aCIsInRvcG1vc3ROYW1lIiwiYWJzb2x1dGVQYXRoIiwicmVnRXhwIiwiUmVnRXhwIiwidG9wbW9zdE5hbWVJbkFic29sdXRlUGF0aCIsInJlbGF0aXZlUGF0aCIsImNvbWJpbmVkUGF0aCIsInBhdGhOYW1lcyIsInNwbGl0IiwicmVsYXRpdmVQYXRoTmFtZXMiLCJsYXN0UGF0aE5hbWUiLCJmaXJzdFJlbGF0aXZlUGF0aE5hbWUiLCJmaXJzdCIsInNoaWZ0IiwibGFzdCIsInVuZGVmaW5lZCIsInBvcCIsImNvbWJpbmVkUGF0aE5hbWVzIiwiY29uY2F0Iiwiam9pbiIsInJlbWFpbmluZ0FyZ3VtZW50cyIsImNvbmNhdGVuYXRlZFBhdGgiLCJyZW1haW5pbmdBQXJndW1lbnRzTGVuZ3RoIiwibGVuZ3RoIiwiYm90dG9tbW9zdE5hbWUiLCJtYXRjaGVzIiwibWF0Y2giLCJzZWNvbmRNYXRjaCIsInNlY29uZCIsInRvcG1vc3REaXJlY3RvcnlQYXRoIiwidG9wbW9zdERpcmVjdG9yeU5hbWUiLCJwYXRoV2l0aG91dEJvdHRvbW1vc3ROYW1lIiwicGF0aFdpdGhvdXRUb3Btb3N0RGlyZWN0b3J5TmFtZSJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7O1FBNEZnQkE7ZUFBQUE7O1FBcERBQztlQUFBQTs7UUFpQ0FDO2VBQUFBOztRQW1GaEI7ZUFBQTs7UUFqSWdC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
|
|
162
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvcGF0aC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgZmlyc3QsIHNlY29uZCwgbGFzdCB9IGZyb20gXCIuLi91dGlsaXRpZXMvYXJyYXlcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzUGF0aE5hbWUocGF0aCkge1xuICBwYXRoID0gcGF0aC5yZXBsYWNlKC9eXFwvLywgRU1QVFlfU1RSSU5HKS5yZXBsYWNlKC9cXC8kLywgRU1QVFlfU1RSSU5HKTsgLy8vXG5cbiAgY29uc3QgcGF0aE5hbWUgPSAoL1xcLy8udGVzdChwYXRoKSA9PT0gZmFsc2UpO1xuXG4gIHJldHVybiBwYXRoTmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUGF0aFRvcG1vc3ROYW1lKHBhdGgpIHtcbiAgY29uc3QgcGF0aE5hbWUgPSBpc1BhdGhOYW1lKHBhdGgpLFxuICAgICAgICBwYXRoQWJzb2x1dGVQYXRoID0gaXNQYXRoQWJzb2x1dGVQYXRoKHBhdGgpLFxuICAgICAgICBwYXRoVG9wbW9zdE5hbWUgPSAocGF0aE5hbWUgJiYgcGF0aEFic29sdXRlUGF0aCk7XG5cbiAgcmV0dXJuIHBhdGhUb3Btb3N0TmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUGF0aFJlbGF0aXZlUGF0aChwYXRoKSB7XG4gIGNvbnN0IHBhdGhSZWxhdGl2ZVBhdGggPSAhL15cXC8vLnRlc3QocGF0aCk7XG5cbiAgcmV0dXJuIHBhdGhSZWxhdGl2ZVBhdGg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1BhdGhBYnNvbHV0ZVBhdGgocGF0aCkge1xuICBjb25zdCBwYXRoQWJzb2x1dGVQYXRoID0gL15cXC8vLnRlc3QocGF0aCk7XG5cbiAgcmV0dXJuIHBhdGhBYnNvbHV0ZVBhdGg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1RvcG1vc3ROYW1lSW5BYnNvbHV0ZVBhdGgodG9wbW9zdE5hbWUsIGFic29sdXRlUGF0aCkge1xuICBjb25zdCByZWdFeHAgPSBuZXcgUmVnRXhwKGBeJHt0b3Btb3N0TmFtZX0oPzpcXFxcLy4rKT8kYCksXG4gICAgICAgIHRvcG1vc3ROYW1lSW5BYnNvbHV0ZVBhdGggPSByZWdFeHAudGVzdChhYnNvbHV0ZVBhdGgpO1xuXG4gIHJldHVybiB0b3Btb3N0TmFtZUluQWJzb2x1dGVQYXRoXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5lUGF0aHMocGF0aCwgcmVsYXRpdmVQYXRoKSB7XG4gIGxldCBjb21iaW5lZFBhdGggPSBudWxsO1xuXG4gIGNvbnN0IHBhdGhOYW1lcyA9IHBhdGguc3BsaXQoL1xcLy8pLFxuICAgICAgICByZWxhdGl2ZVBhdGhOYW1lcyA9IHJlbGF0aXZlUGF0aC5zcGxpdCgvXFwvLyk7XG5cbiAgbGV0IGxhc3RQYXRoTmFtZSxcbiAgICAgIGZpcnN0UmVsYXRpdmVQYXRoTmFtZSA9IGZpcnN0KHJlbGF0aXZlUGF0aE5hbWVzKTtcblxuICBpZiAoZmlyc3RSZWxhdGl2ZVBhdGhOYW1lID09PSBcIi5cIikge1xuICAgIHJlbGF0aXZlUGF0aE5hbWVzLnNoaWZ0KCk7XG4gIH1cblxuICBmaXJzdFJlbGF0aXZlUGF0aE5hbWUgPSBmaXJzdChyZWxhdGl2ZVBhdGhOYW1lcyk7XG4gIGxhc3RQYXRoTmFtZSA9IGxhc3QocGF0aE5hbWVzKTtcblxuICB3aGlsZSAoKGZpcnN0UmVsYXRpdmVQYXRoTmFtZSA9PT0gXCIuLlwiKSAmJiAobGFzdFBhdGhOYW1lICE9PSB1bmRlZmluZWQpKSB7XG4gICAgcmVsYXRpdmVQYXRoTmFtZXMuc2hpZnQoKTtcbiAgICBwYXRoTmFtZXMucG9wKCk7XG5cbiAgICBmaXJzdFJlbGF0aXZlUGF0aE5hbWUgPSBmaXJzdChyZWxhdGl2ZVBhdGhOYW1lcyk7XG4gICAgbGFzdFBhdGhOYW1lID0gbGFzdChwYXRoTmFtZXMpO1xuICB9XG5cbiAgaWYgKGxhc3RQYXRoTmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc3QgY29tYmluZWRQYXRoTmFtZXMgPSBbXS5jb25jYXQocGF0aE5hbWVzKS5jb25jYXQocmVsYXRpdmVQYXRoTmFtZXMpO1xuXG4gICAgY29tYmluZWRQYXRoID0gY29tYmluZWRQYXRoTmFtZXMuam9pbihcIi9cIik7XG4gIH1cblxuICByZXR1cm4gY29tYmluZWRQYXRoO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uY2F0ZW5hdGVQYXRocyhwYXRoLCByZWxhdGl2ZVBhdGgsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cykge1xuICBsZXQgY29uY2F0ZW5hdGVkUGF0aDtcblxuICBwYXRoID0gcGF0aC5yZXBsYWNlKC9cXC8kLywgRU1QVFlfU1RSSU5HKTsgIC8vL1xuXG4gIGNvbmNhdGVuYXRlZFBhdGggPSBgJHtwYXRofS8ke3JlbGF0aXZlUGF0aH1gO1xuXG4gIGNvbnN0IHJlbWFpbmluZ0FBcmd1bWVudHNMZW5ndGggPSByZW1haW5pbmdBcmd1bWVudHMubGVuZ3RoO1xuXG4gIGlmIChyZW1haW5pbmdBQXJndW1lbnRzTGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IHBhdGggPSBjb25jYXRlbmF0ZWRQYXRoLCAgLy8vXG4gICAgICAgICAgcmVsYXRpdmVQYXRoID0gcmVtYWluaW5nQXJndW1lbnRzLnNoaWZ0KCk7XG5cbiAgICBjb25jYXRlbmF0ZWRQYXRoID0gY29uY2F0ZW5hdGVQYXRocyhwYXRoLCByZWxhdGl2ZVBhdGgsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cyk7XG4gIH1cblxuICByZXR1cm4gY29uY2F0ZW5hdGVkUGF0aDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJvdHRvbW1vc3ROYW1lRnJvbVBhdGgocGF0aCkge1xuICBsZXQgYm90dG9tbW9zdE5hbWUgPSBudWxsO1xuXG4gIGNvbnN0IG1hdGNoZXMgPSBwYXRoLm1hdGNoKC9eLipcXC8oW15cXC9dK1xcLz8pJC8pO1xuXG4gIGlmIChtYXRjaGVzICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc2Vjb25kTWF0Y2ggPSBzZWNvbmQobWF0Y2hlcyk7XG5cbiAgICBib3R0b21tb3N0TmFtZSA9IHNlY29uZE1hdGNoOyAgLy8vXG4gIH1cblxuICByZXR1cm4gYm90dG9tbW9zdE5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b3Btb3N0RGlyZWN0b3J5UGF0aEZyb21QYXRoKHBhdGgpIHtcbiAgY29uc3QgbWF0Y2hlcyA9IHBhdGgubWF0Y2goL14oLispXFwvW15cXC9dK1xcLz8kLyksXG4gICAgICAgIHNlY29uZE1hdGNoID0gc2Vjb25kKG1hdGNoZXMpLFxuICAgICAgICB0b3Btb3N0RGlyZWN0b3J5UGF0aCA9IHNlY29uZE1hdGNoOyAvLy9cblxuICByZXR1cm4gdG9wbW9zdERpcmVjdG9yeVBhdGg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b3Btb3N0RGlyZWN0b3J5TmFtZUZyb21QYXRoKHBhdGgpIHtcbiAgbGV0IHRvcG1vc3REaXJlY3RvcnlOYW1lID0gbnVsbDtcblxuICBjb25zdCBtYXRjaGVzID0gcGF0aC5tYXRjaCgvXihbXlxcL10rKVxcLy4rJC8pO1xuXG4gIGlmIChtYXRjaGVzICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc2Vjb25kTWF0Y2ggPSBzZWNvbmQobWF0Y2hlcyk7XG5cbiAgICB0b3Btb3N0RGlyZWN0b3J5TmFtZSA9IHNlY29uZE1hdGNoOyAgLy8vXG4gIH1cblxuICByZXR1cm4gdG9wbW9zdERpcmVjdG9yeU5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXRoV2l0aG91dEJvdHRvbW1vc3ROYW1lRnJvbVBhdGgocGF0aCkge1xuICBsZXQgcGF0aFdpdGhvdXRCb3R0b21tb3N0TmFtZSA9IG51bGw7XG5cbiAgY29uc3QgbWF0Y2hlcyA9IHBhdGgubWF0Y2goL14oLiopXFwvW15cXC9dK1xcLz8kLyk7XG5cbiAgaWYgKG1hdGNoZXMgIT09IG51bGwpIHtcbiAgICBjb25zdCBzZWNvbmRNYXRjaCA9IHNlY29uZChtYXRjaGVzKTtcblxuICAgIHBhdGhXaXRob3V0Qm90dG9tbW9zdE5hbWUgPSBzZWNvbmRNYXRjaDsgLy8vXG4gIH1cblxuICByZXR1cm4gcGF0aFdpdGhvdXRCb3R0b21tb3N0TmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhdGhXaXRob3V0VG9wbW9zdERpcmVjdG9yeU5hbWVGcm9tUGF0aChwYXRoKSB7XG4gIGxldCBwYXRoV2l0aG91dFRvcG1vc3REaXJlY3RvcnlOYW1lID0gbnVsbDtcblxuICBjb25zdCBtYXRjaGVzID0gcGF0aC5tYXRjaCgvXlteXFwvXStcXC8oLispJC8pO1xuXG4gIGlmIChtYXRjaGVzICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc2Vjb25kTWF0Y2ggPSBzZWNvbmQobWF0Y2hlcyk7XG5cbiAgICBwYXRoV2l0aG91dFRvcG1vc3REaXJlY3RvcnlOYW1lID0gc2Vjb25kTWF0Y2g7XG4gIH1cblxuICByZXR1cm4gcGF0aFdpdGhvdXRUb3Btb3N0RGlyZWN0b3J5TmFtZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBpc1BhdGhOYW1lLFxuICBpc1BhdGhUb3Btb3N0TmFtZSxcbiAgaXNQYXRoUmVsYXRpdmVQYXRoLFxuICBpc1BhdGhBYnNvbHV0ZVBhdGgsXG4gIGlzVG9wbW9zdE5hbWVJbkFic29sdXRlUGF0aCxcbiAgY29tYmluZVBhdGhzLFxuICBjb25jYXRlbmF0ZVBhdGhzLFxuICBib3R0b21tb3N0TmFtZUZyb21QYXRoLFxuICB0b3Btb3N0RGlyZWN0b3J5UGF0aEZyb21QYXRoLFxuICB0b3Btb3N0RGlyZWN0b3J5TmFtZUZyb21QYXRoLFxuICBwYXRoV2l0aG91dEJvdHRvbW1vc3ROYW1lRnJvbVBhdGgsXG4gIHBhdGhXaXRob3V0VG9wbW9zdERpcmVjdG9yeU5hbWVGcm9tUGF0aFxufTtcbiJdLCJuYW1lcyI6WyJib3R0b21tb3N0TmFtZUZyb21QYXRoIiwiY29tYmluZVBhdGhzIiwiY29uY2F0ZW5hdGVQYXRocyIsImlzUGF0aEFic29sdXRlUGF0aCIsImlzUGF0aE5hbWUiLCJpc1BhdGhSZWxhdGl2ZVBhdGgiLCJpc1BhdGhUb3Btb3N0TmFtZSIsImlzVG9wbW9zdE5hbWVJbkFic29sdXRlUGF0aCIsInBhdGhXaXRob3V0Qm90dG9tbW9zdE5hbWVGcm9tUGF0aCIsInBhdGhXaXRob3V0VG9wbW9zdERpcmVjdG9yeU5hbWVGcm9tUGF0aCIsInRvcG1vc3REaXJlY3RvcnlOYW1lRnJvbVBhdGgiLCJ0b3Btb3N0RGlyZWN0b3J5UGF0aEZyb21QYXRoIiwicGF0aCIsInJlcGxhY2UiLCJFTVBUWV9TVFJJTkciLCJwYXRoTmFtZSIsInRlc3QiLCJwYXRoQWJzb2x1dGVQYXRoIiwicGF0aFRvcG1vc3ROYW1lIiwicGF0aFJlbGF0aXZlUGF0aCIsInRvcG1vc3ROYW1lIiwiYWJzb2x1dGVQYXRoIiwicmVnRXhwIiwiUmVnRXhwIiwidG9wbW9zdE5hbWVJbkFic29sdXRlUGF0aCIsInJlbGF0aXZlUGF0aCIsImNvbWJpbmVkUGF0aCIsInBhdGhOYW1lcyIsInNwbGl0IiwicmVsYXRpdmVQYXRoTmFtZXMiLCJsYXN0UGF0aE5hbWUiLCJmaXJzdFJlbGF0aXZlUGF0aE5hbWUiLCJmaXJzdCIsInNoaWZ0IiwibGFzdCIsInVuZGVmaW5lZCIsInBvcCIsImNvbWJpbmVkUGF0aE5hbWVzIiwiY29uY2F0Iiwiam9pbiIsInJlbWFpbmluZ0FyZ3VtZW50cyIsImNvbmNhdGVuYXRlZFBhdGgiLCJyZW1haW5pbmdBQXJndW1lbnRzTGVuZ3RoIiwibGVuZ3RoIiwiYm90dG9tbW9zdE5hbWUiLCJtYXRjaGVzIiwibWF0Y2giLCJzZWNvbmRNYXRjaCIsInNlY29uZCIsInRvcG1vc3REaXJlY3RvcnlQYXRoIiwidG9wbW9zdERpcmVjdG9yeU5hbWUiLCJwYXRoV2l0aG91dEJvdHRvbW1vc3ROYW1lIiwicGF0aFdpdGhvdXRUb3Btb3N0RGlyZWN0b3J5TmFtZSJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7O1FBNEZnQkE7ZUFBQUE7O1FBcERBQztlQUFBQTs7UUFpQ0FDO2VBQUFBOztRQW1GaEI7ZUFBQTs7UUFqSWdC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
|