@magic-xpa/utils 4.801.0-dev481.242 → 4.801.0-dev481.248
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/{esm2015/index.js → esm2020/index.mjs} +0 -0
- package/{esm2015/magic-xpa-utils.js → esm2020/magic-xpa-utils.mjs} +0 -0
- package/{esm2015/src/Base64.js → esm2020/src/Base64.mjs} +0 -0
- package/{esm2015/src/ChoiceUtils.js → esm2020/src/ChoiceUtils.mjs} +0 -0
- package/{esm2015/src/Constants.js → esm2020/src/Constants.mjs} +0 -0
- package/{esm2015/src/DateTimeUtils.js → esm2020/src/DateTimeUtils.mjs} +0 -0
- package/{esm2015/src/DateUtil.js → esm2020/src/DateUtil.mjs} +0 -0
- package/{esm2015/src/InternalInterface.js → esm2020/src/InternalInterface.mjs} +0 -0
- package/{esm2015/src/JSON_Utils.js → esm2020/src/JSON_Utils.mjs} +0 -0
- package/esm2020/src/Logger.mjs +216 -0
- package/{esm2015/src/MagicConstants.js → esm2020/src/MagicConstants.mjs} +0 -0
- package/{esm2015/src/Misc.js → esm2020/src/Misc.mjs} +0 -0
- package/{esm2015/src/MsgInterface.js → esm2020/src/MsgInterface.mjs} +0 -0
- package/{esm2015/src/PICInterface.js → esm2020/src/PICInterface.mjs} +0 -0
- package/{esm2015/src/PlatformUtils.js → esm2020/src/PlatformUtils.mjs} +0 -0
- package/{esm2015/src/Queue.js → esm2020/src/Queue.mjs} +0 -0
- package/{esm2015/src/Randomizer.js → esm2020/src/Randomizer.mjs} +0 -0
- package/{esm2015/src/RequestInfo.js → esm2020/src/RequestInfo.mjs} +0 -0
- package/{esm2015/src/Rtf.js → esm2020/src/Rtf.mjs} +0 -0
- package/{esm2015/src/StorageAttribute.js → esm2020/src/StorageAttribute.mjs} +0 -0
- package/esm2020/src/StrUtil.mjs +456 -0
- package/{esm2015/src/SyncExecutionHelper.js → esm2020/src/SyncExecutionHelper.mjs} +0 -0
- package/{esm2015/src/UtilDateJpn.js → esm2020/src/UtilDateJpn.mjs} +0 -0
- package/{esm2015/src/UtilImeJpn.js → esm2020/src/UtilImeJpn.mjs} +0 -0
- package/{esm2015/src/UtilStrByteMode.js → esm2020/src/UtilStrByteMode.mjs} +0 -0
- package/{esm2015/src/XMLConstants.js → esm2020/src/XMLConstants.mjs} +0 -0
- package/{esm2015/src/Xml/XmlParser.js → esm2020/src/Xml/XmlParser.mjs} +0 -0
- package/{esm2015/src/enums.js → esm2020/src/enums.mjs} +0 -0
- package/fesm2015/{magic-xpa-utils.js → magic-xpa-utils.mjs} +2 -3
- package/fesm2015/magic-xpa-utils.mjs.map +1 -0
- package/fesm2020/magic-xpa-utils.mjs +5381 -0
- package/fesm2020/magic-xpa-utils.mjs.map +1 -0
- package/package.json +25 -12
- package/bundles/magic-xpa-utils.umd.js +0 -5271
- package/bundles/magic-xpa-utils.umd.js.map +0 -1
- package/bundles/magic-xpa-utils.umd.min.js +0 -2
- package/bundles/magic-xpa-utils.umd.min.js.map +0 -1
- package/esm2015/src/Logger.js +0 -217
- package/esm2015/src/StrUtil.js +0 -457
- package/fesm2015/magic-xpa-utils.js.map +0 -1
|
@@ -0,0 +1,456 @@
|
|
|
1
|
+
import { NString, RefParam, StringBuilder, isNullOrUndefined } from "@magic-xpa/mscorelib";
|
|
2
|
+
import { UtilStrByteMode } from "./UtilStrByteMode";
|
|
3
|
+
import { Rtf } from "./Rtf";
|
|
4
|
+
const HTML_BACKSLASH = "\";
|
|
5
|
+
const HTML_COMMA = ",";
|
|
6
|
+
const HTML_HYPHEN = "-";
|
|
7
|
+
const STR_2_HTML = 1;
|
|
8
|
+
const TASK_PATH_DELIMITER = "@@||@@";
|
|
9
|
+
export const SEQ_2_HTML = 2;
|
|
10
|
+
export const HTML_2_STR = 3;
|
|
11
|
+
const HTML_2_SEQ = 4;
|
|
12
|
+
export const SEQ_2_STR = 5;
|
|
13
|
+
export class StrUtil {
|
|
14
|
+
static mem_trim(str, len) {
|
|
15
|
+
let result;
|
|
16
|
+
if (len > 0) {
|
|
17
|
+
if (len > str.length) {
|
|
18
|
+
result = -1;
|
|
19
|
+
return result;
|
|
20
|
+
}
|
|
21
|
+
while (len > 0 && str[len - 1] === ' ') {
|
|
22
|
+
len = len - 1;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
result = len;
|
|
26
|
+
return result;
|
|
27
|
+
}
|
|
28
|
+
static memmove(dest, destCount, src, srcCount, len) {
|
|
29
|
+
let stringBuilder = new StringBuilder(dest.length + len);
|
|
30
|
+
if (UtilStrByteMode.isLocaleDefLangJPN() && dest.length < destCount) {
|
|
31
|
+
stringBuilder.Append(NString.FromChar(' ', destCount));
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
stringBuilder.Append(dest.substr(0, destCount));
|
|
35
|
+
}
|
|
36
|
+
stringBuilder.Append(src.substr(srcCount, len));
|
|
37
|
+
if (stringBuilder.Length < dest.length) {
|
|
38
|
+
stringBuilder.Append(dest.substr(stringBuilder.Length));
|
|
39
|
+
}
|
|
40
|
+
return stringBuilder.ToString();
|
|
41
|
+
}
|
|
42
|
+
static memcpy(dest, destCount, src, scrCountOrSrcCount, count) {
|
|
43
|
+
if (arguments.length === 5 && (dest === null || dest.constructor === String) && (destCount === null || destCount.constructor === Number) && (src === null || src.constructor === String) && (scrCountOrSrcCount === null || scrCountOrSrcCount.constructor === Number) && (count === null || count.constructor === Number)) {
|
|
44
|
+
return StrUtil.memcpy_0(dest, destCount, src, scrCountOrSrcCount, count);
|
|
45
|
+
}
|
|
46
|
+
StrUtil.memcpy_1(dest, destCount, src, scrCountOrSrcCount, count);
|
|
47
|
+
}
|
|
48
|
+
static memcpy_0(dest, destCount, src, scrCount, count) {
|
|
49
|
+
let stringBuilder = new StringBuilder(dest.substr(0, destCount));
|
|
50
|
+
if (scrCount + count < src.length) {
|
|
51
|
+
stringBuilder.Append(src.substr(scrCount, count - scrCount));
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
stringBuilder.Append(src.substr(scrCount));
|
|
55
|
+
}
|
|
56
|
+
let size = dest.length - destCount - count;
|
|
57
|
+
if (size > 0) {
|
|
58
|
+
stringBuilder.Append(dest.substr(destCount + count));
|
|
59
|
+
}
|
|
60
|
+
return stringBuilder.ToString();
|
|
61
|
+
}
|
|
62
|
+
static memcpy_1(dest, destCount, src, srcCount, count) {
|
|
63
|
+
while (count > 0 && destCount < dest.length && srcCount < src.length) {
|
|
64
|
+
dest[destCount++] = src[srcCount++];
|
|
65
|
+
count = count - 1;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
static memset(dest, destCount, inVal, counter) {
|
|
69
|
+
if (arguments.length === 4 && (dest === null || dest.constructor === String) && (destCount === null || destCount.constructor === Number) && (inVal === null || inVal.constructor === Number) && (counter === null || counter.constructor === Number)) {
|
|
70
|
+
return StrUtil.memset_0(dest, destCount, inVal, counter);
|
|
71
|
+
}
|
|
72
|
+
StrUtil.memset_1(dest, destCount, inVal, counter);
|
|
73
|
+
}
|
|
74
|
+
static memset_0(dest, destCount, inVal, counter) {
|
|
75
|
+
let first = new StringBuilder(dest.substr(0, destCount));
|
|
76
|
+
while (counter > 0) {
|
|
77
|
+
first.Append(inVal);
|
|
78
|
+
counter = counter - 1;
|
|
79
|
+
}
|
|
80
|
+
if (first.Length < dest.length) {
|
|
81
|
+
first.Append(dest.substr(first.Length));
|
|
82
|
+
}
|
|
83
|
+
return first.ToString();
|
|
84
|
+
}
|
|
85
|
+
static memset_1(dest, destCount, inVal, counter) {
|
|
86
|
+
while (counter > 0 && destCount < dest.length) {
|
|
87
|
+
dest[destCount++] = inVal;
|
|
88
|
+
counter = counter - 1;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
static strstr(str, substr) {
|
|
92
|
+
let from = str.indexOf(substr);
|
|
93
|
+
let result;
|
|
94
|
+
if (from < 0) {
|
|
95
|
+
result = null;
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
result = str.substr(from);
|
|
99
|
+
}
|
|
100
|
+
return result;
|
|
101
|
+
}
|
|
102
|
+
static ReverseString(text) {
|
|
103
|
+
let array = NString.ToCharArray(text.ToString());
|
|
104
|
+
array.reverse();
|
|
105
|
+
return new StringBuilder(NString.FromChars(array));
|
|
106
|
+
}
|
|
107
|
+
static rtrim(str) {
|
|
108
|
+
return StrUtil.rtrimWithNull(str, false);
|
|
109
|
+
}
|
|
110
|
+
static rtrimWithNull(str, trimNullChars) {
|
|
111
|
+
let result;
|
|
112
|
+
if (typeof str === "undefined" || str === null || str.length === 0) {
|
|
113
|
+
result = str;
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
let idx = str.length - 1;
|
|
117
|
+
if (trimNullChars) {
|
|
118
|
+
while (idx >= 0 && (str[idx] === ' ' || str[idx] === String.fromCharCode(0))) {
|
|
119
|
+
idx = idx - 1;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
while (idx >= 0 && str[idx] === ' ') {
|
|
124
|
+
idx = idx - 1;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
idx = idx + 1;
|
|
128
|
+
if (idx < str.length) {
|
|
129
|
+
result = str.substr(0, idx);
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
result = str;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
return result;
|
|
136
|
+
}
|
|
137
|
+
static ltrim(str) {
|
|
138
|
+
let length = str.length;
|
|
139
|
+
let i = 0;
|
|
140
|
+
let result;
|
|
141
|
+
if (str === null || length === 0) {
|
|
142
|
+
result = str;
|
|
143
|
+
}
|
|
144
|
+
else {
|
|
145
|
+
while (i < length && str[i] === ' ') {
|
|
146
|
+
i = i + 1;
|
|
147
|
+
}
|
|
148
|
+
if (i > 0) {
|
|
149
|
+
str = str.substr(i);
|
|
150
|
+
}
|
|
151
|
+
result = str;
|
|
152
|
+
}
|
|
153
|
+
return result;
|
|
154
|
+
}
|
|
155
|
+
static DeleteStringsFromEnds(str, strToDelete) {
|
|
156
|
+
if (str.startsWith(strToDelete)) {
|
|
157
|
+
str = str.substr(strToDelete.length);
|
|
158
|
+
}
|
|
159
|
+
if (str.endsWith(strToDelete)) {
|
|
160
|
+
str = str.substr(0, str.length - strToDelete.length);
|
|
161
|
+
}
|
|
162
|
+
let result;
|
|
163
|
+
if (str.length === 0) {
|
|
164
|
+
result = null;
|
|
165
|
+
}
|
|
166
|
+
else {
|
|
167
|
+
result = str;
|
|
168
|
+
}
|
|
169
|
+
return result;
|
|
170
|
+
}
|
|
171
|
+
static padStr(str, len) {
|
|
172
|
+
let padLen = len - str.length;
|
|
173
|
+
if (padLen > 0) {
|
|
174
|
+
if (StrUtil._paddingSpaces === null || StrUtil._paddingSpaces.length < padLen) {
|
|
175
|
+
StrUtil._paddingSpaces = NString.FromChar(' ', padLen);
|
|
176
|
+
}
|
|
177
|
+
let stringBuilder = new StringBuilder(len);
|
|
178
|
+
stringBuilder.Append(str);
|
|
179
|
+
stringBuilder.Append(StrUtil._paddingSpaces, 0, padLen);
|
|
180
|
+
str = stringBuilder.ToString();
|
|
181
|
+
}
|
|
182
|
+
return str;
|
|
183
|
+
}
|
|
184
|
+
static tokenize(source, delim) {
|
|
185
|
+
return source.split(delim);
|
|
186
|
+
}
|
|
187
|
+
static stringToHexaDump(str, minLength) {
|
|
188
|
+
let stringBuilder = new StringBuilder(str.length * minLength);
|
|
189
|
+
for (let indx = 0; indx < str.length; indx = indx + 1) {
|
|
190
|
+
let currInt = str.charCodeAt(indx);
|
|
191
|
+
let hexStr = currInt.toString(16);
|
|
192
|
+
while (hexStr.length < minLength) {
|
|
193
|
+
hexStr = "0" + hexStr;
|
|
194
|
+
}
|
|
195
|
+
stringBuilder.Append(hexStr);
|
|
196
|
+
}
|
|
197
|
+
return stringBuilder.ToString().toUpperCase();
|
|
198
|
+
}
|
|
199
|
+
static searchAndReplace(str, from, to) {
|
|
200
|
+
if (arguments.length === 3 && (str === null || str.constructor === String) && (from === null || from.constructor === String) && (to === null || to.constructor === String)) {
|
|
201
|
+
return StrUtil.searchAndReplace_0(str, from, to);
|
|
202
|
+
}
|
|
203
|
+
return StrUtil.searchAndReplace_1(str, from, to);
|
|
204
|
+
}
|
|
205
|
+
static searchAndReplace_0(str, from, to) {
|
|
206
|
+
let lastSubStr = 0;
|
|
207
|
+
let startSubStr;
|
|
208
|
+
let result;
|
|
209
|
+
if ((startSubStr = str.indexOf(from)) === -1) {
|
|
210
|
+
result = str;
|
|
211
|
+
}
|
|
212
|
+
else {
|
|
213
|
+
let stringBuilder = new StringBuilder(str.length);
|
|
214
|
+
while (startSubStr !== -1) {
|
|
215
|
+
stringBuilder.Append(str.substr(lastSubStr, startSubStr - lastSubStr) + to);
|
|
216
|
+
startSubStr = startSubStr + from.length;
|
|
217
|
+
lastSubStr = startSubStr;
|
|
218
|
+
startSubStr = str.indexOf(from, lastSubStr);
|
|
219
|
+
}
|
|
220
|
+
stringBuilder.Append(str.substr(lastSubStr));
|
|
221
|
+
result = stringBuilder.ToString();
|
|
222
|
+
}
|
|
223
|
+
return result;
|
|
224
|
+
}
|
|
225
|
+
static searchAndReplace_1(str, from, to) {
|
|
226
|
+
let lastSubStr = 0;
|
|
227
|
+
let sarIndex = 0;
|
|
228
|
+
let fromCopy = from.slice();
|
|
229
|
+
let startSubStr;
|
|
230
|
+
let SARindex = new RefParam(0);
|
|
231
|
+
startSubStr = StrUtil.indexOf(str, fromCopy, lastSubStr, SARindex);
|
|
232
|
+
sarIndex = SARindex.value;
|
|
233
|
+
if (startSubStr === -1)
|
|
234
|
+
return str;
|
|
235
|
+
let result;
|
|
236
|
+
let tmpBuf = new StringBuilder(str.length);
|
|
237
|
+
while (startSubStr !== -1) {
|
|
238
|
+
tmpBuf.Append(str.substr(lastSubStr, startSubStr - lastSubStr) + to[sarIndex]);
|
|
239
|
+
startSubStr += fromCopy[sarIndex].length;
|
|
240
|
+
lastSubStr = startSubStr;
|
|
241
|
+
startSubStr = StrUtil.indexOf(str, fromCopy, lastSubStr, SARindex);
|
|
242
|
+
sarIndex = SARindex.value;
|
|
243
|
+
}
|
|
244
|
+
;
|
|
245
|
+
tmpBuf.Append(str.substr(lastSubStr));
|
|
246
|
+
result = tmpBuf.ToString();
|
|
247
|
+
return result;
|
|
248
|
+
}
|
|
249
|
+
static indexOf(str, strings, offset, SARindex) {
|
|
250
|
+
let minOffset = -1;
|
|
251
|
+
for (let i = 0; i < strings.length; i = i + 1) {
|
|
252
|
+
let flag = strings[i] === null;
|
|
253
|
+
if (!(strings[i] === null)) {
|
|
254
|
+
let resultOffset = str.indexOf(strings[i], offset);
|
|
255
|
+
if (resultOffset === -1) {
|
|
256
|
+
strings[i] = null;
|
|
257
|
+
}
|
|
258
|
+
else {
|
|
259
|
+
if (resultOffset < minOffset || minOffset === -1) {
|
|
260
|
+
minOffset = resultOffset;
|
|
261
|
+
SARindex.value = i;
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
let result;
|
|
267
|
+
if (minOffset > -1) {
|
|
268
|
+
result = minOffset;
|
|
269
|
+
}
|
|
270
|
+
else {
|
|
271
|
+
SARindex.value = -1;
|
|
272
|
+
result = -1;
|
|
273
|
+
}
|
|
274
|
+
return result;
|
|
275
|
+
}
|
|
276
|
+
static replaceStringTokens(userString, token, occurrence, val) {
|
|
277
|
+
let tokenLen = token.length;
|
|
278
|
+
let currPosition = 0;
|
|
279
|
+
let newString = userString;
|
|
280
|
+
if (val !== null) {
|
|
281
|
+
let num2 = 0;
|
|
282
|
+
while (num2 < occurrence && currPosition !== -1) {
|
|
283
|
+
currPosition = userString.indexOf(token, currPosition + ((num2 === 0) ? 0 : tokenLen));
|
|
284
|
+
num2 = num2 + 1;
|
|
285
|
+
}
|
|
286
|
+
if (currPosition !== -1) {
|
|
287
|
+
newString = userString.substr(0, currPosition) + val + userString.substr(currPosition + tokenLen, userString.length - (currPosition + tokenLen));
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
return newString;
|
|
291
|
+
}
|
|
292
|
+
static makePrintableTokens(source, type) {
|
|
293
|
+
if (arguments.length === 2 && (source === null || source.constructor === String) && (type === null || type.constructor === Number)) {
|
|
294
|
+
return StrUtil.makePrintableTokens_0(source, type);
|
|
295
|
+
}
|
|
296
|
+
StrUtil.makePrintableTokens_1(source, type);
|
|
297
|
+
}
|
|
298
|
+
static makePrintableTokens_0(source, type) {
|
|
299
|
+
let escStr = [
|
|
300
|
+
"\\", "-", ","
|
|
301
|
+
];
|
|
302
|
+
let escSeq = [
|
|
303
|
+
"\\\\", "\\-", "\\,"
|
|
304
|
+
];
|
|
305
|
+
let escHtm = [
|
|
306
|
+
HTML_BACKSLASH, HTML_HYPHEN, HTML_COMMA
|
|
307
|
+
];
|
|
308
|
+
let result;
|
|
309
|
+
switch (type) {
|
|
310
|
+
case STR_2_HTML:
|
|
311
|
+
result = StrUtil.searchAndReplace(source, escStr, escHtm);
|
|
312
|
+
break;
|
|
313
|
+
case SEQ_2_HTML:
|
|
314
|
+
result = StrUtil.searchAndReplace(source, escSeq, escHtm);
|
|
315
|
+
break;
|
|
316
|
+
case HTML_2_SEQ:
|
|
317
|
+
result = StrUtil.searchAndReplace(source, escHtm, escSeq);
|
|
318
|
+
break;
|
|
319
|
+
case HTML_2_STR:
|
|
320
|
+
result = StrUtil.searchAndReplace(source, escHtm, escStr);
|
|
321
|
+
break;
|
|
322
|
+
case SEQ_2_STR:
|
|
323
|
+
result = StrUtil.searchAndReplace(source, escSeq, escStr);
|
|
324
|
+
break;
|
|
325
|
+
default:
|
|
326
|
+
result = source;
|
|
327
|
+
break;
|
|
328
|
+
}
|
|
329
|
+
return result;
|
|
330
|
+
}
|
|
331
|
+
static makePrintableTokens_1(source, type) {
|
|
332
|
+
if (source !== null) {
|
|
333
|
+
let length = source.length;
|
|
334
|
+
for (let i = 0; i < length; i = i + 1) {
|
|
335
|
+
let currElm = source.get_Item(i);
|
|
336
|
+
source.set_Item(i, StrUtil.makePrintableTokens_0(currElm, type));
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
static makePrintable(source) {
|
|
341
|
+
let from = [
|
|
342
|
+
"\n", "\r", "'", "\\", "\"", "\0"
|
|
343
|
+
];
|
|
344
|
+
let to = [
|
|
345
|
+
"\\n", "\\r", "\\'", "\\\\", "\\\"", "\\0"
|
|
346
|
+
];
|
|
347
|
+
return StrUtil.searchAndReplace(source, from, to);
|
|
348
|
+
}
|
|
349
|
+
static makePrintable2(source) {
|
|
350
|
+
let from = [
|
|
351
|
+
"\n", "\r", "\0"
|
|
352
|
+
];
|
|
353
|
+
let to = [
|
|
354
|
+
"\\n", "\\r", "\\0"
|
|
355
|
+
];
|
|
356
|
+
return StrUtil.searchAndReplace(source, from, to);
|
|
357
|
+
}
|
|
358
|
+
static ZstringMake(s, len) {
|
|
359
|
+
len = StrUtil.mem_trim(s, len);
|
|
360
|
+
return s.substr(0, len);
|
|
361
|
+
}
|
|
362
|
+
static GetPlainTextfromRtf(rtfText) {
|
|
363
|
+
if (Rtf.isRtf(rtfText)) {
|
|
364
|
+
let rtf = new Rtf();
|
|
365
|
+
let outputTxt = new StringBuilder("");
|
|
366
|
+
rtf.toTxt(rtfText, outputTxt);
|
|
367
|
+
rtfText = outputTxt.ToString();
|
|
368
|
+
}
|
|
369
|
+
return rtfText;
|
|
370
|
+
}
|
|
371
|
+
static StringsArraysEqual(str1, str2) {
|
|
372
|
+
let result;
|
|
373
|
+
if (str1 === null && str2 === null) {
|
|
374
|
+
result = true;
|
|
375
|
+
}
|
|
376
|
+
else {
|
|
377
|
+
if (str1 === null || str2 === null) {
|
|
378
|
+
result = false;
|
|
379
|
+
}
|
|
380
|
+
else {
|
|
381
|
+
if (str1.length !== str2.length) {
|
|
382
|
+
result = false;
|
|
383
|
+
}
|
|
384
|
+
else {
|
|
385
|
+
for (let index = 0; index < str1.length; index = index + 1) {
|
|
386
|
+
if ((str1[index] !== str2[index])) {
|
|
387
|
+
result = false;
|
|
388
|
+
return result;
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
result = true;
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
return result;
|
|
396
|
+
}
|
|
397
|
+
static SearchAndReplaceWildChars(buf, len, filler) {
|
|
398
|
+
buf = NString.PadRight(buf, len);
|
|
399
|
+
let escChar = false;
|
|
400
|
+
let stopSearch = false;
|
|
401
|
+
let tmpBuf = new StringBuilder(len);
|
|
402
|
+
for (let i = 0; i < len; i = i + 1) {
|
|
403
|
+
switch (buf[i]) {
|
|
404
|
+
case ('\\'):
|
|
405
|
+
{
|
|
406
|
+
let isNextCharWild = true;
|
|
407
|
+
if ((i + 1 < len) && (buf[i + 1] != '*' && buf[i + 1] != '\\'))
|
|
408
|
+
isNextCharWild = false;
|
|
409
|
+
if (escChar || !isNextCharWild)
|
|
410
|
+
tmpBuf.Append(buf[i]);
|
|
411
|
+
escChar = !escChar;
|
|
412
|
+
}
|
|
413
|
+
break;
|
|
414
|
+
case ('*'):
|
|
415
|
+
if (escChar)
|
|
416
|
+
tmpBuf.Append(buf[i]);
|
|
417
|
+
else {
|
|
418
|
+
tmpBuf.Append(filler, len - tmpBuf.Length);
|
|
419
|
+
stopSearch = true;
|
|
420
|
+
}
|
|
421
|
+
escChar = false;
|
|
422
|
+
break;
|
|
423
|
+
case '?':
|
|
424
|
+
tmpBuf.Append(filler);
|
|
425
|
+
escChar = false;
|
|
426
|
+
break;
|
|
427
|
+
default:
|
|
428
|
+
tmpBuf.Append(buf[i]);
|
|
429
|
+
escChar = false;
|
|
430
|
+
break;
|
|
431
|
+
}
|
|
432
|
+
}
|
|
433
|
+
let text = tmpBuf.ToString();
|
|
434
|
+
return NString.TrimEnd(NString.TrimEnd(text, ['\0']));
|
|
435
|
+
}
|
|
436
|
+
static getConsoleErorString(source) {
|
|
437
|
+
let consoleErorString = "";
|
|
438
|
+
if (!isNullOrUndefined(source))
|
|
439
|
+
consoleErorString = this.searchAndReplace(source, TASK_PATH_DELIMITER, "");
|
|
440
|
+
return consoleErorString;
|
|
441
|
+
}
|
|
442
|
+
static getMsgBoxErorString(source) {
|
|
443
|
+
let tokens;
|
|
444
|
+
let msgBoxErorString = new StringBuilder("");
|
|
445
|
+
if (!isNullOrUndefined(source)) {
|
|
446
|
+
tokens = this.tokenize(source, TASK_PATH_DELIMITER);
|
|
447
|
+
for (let i = 0; i < tokens.length; i++) {
|
|
448
|
+
msgBoxErorString.Append(tokens[i]);
|
|
449
|
+
i++;
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
return msgBoxErorString.toString();
|
|
453
|
+
}
|
|
454
|
+
}
|
|
455
|
+
StrUtil._paddingSpaces = null;
|
|
456
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3RyVXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3V0aWxzL3NyYy9TdHJVdGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBTyxPQUFPLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxpQkFBaUIsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQy9GLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUNsRCxPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sT0FBTyxDQUFDO0FBRTFCLE1BQU0sY0FBYyxHQUFXLFFBQVEsQ0FBQztBQUN4QyxNQUFNLFVBQVUsR0FBVyxRQUFRLENBQUM7QUFDcEMsTUFBTSxXQUFXLEdBQVcsUUFBUSxDQUFDO0FBQ3JDLE1BQU0sVUFBVSxHQUFXLENBQUMsQ0FBQztBQUM3QixNQUFNLG1CQUFtQixHQUFXLFFBQVEsQ0FBQztBQUM3QyxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQVcsQ0FBQyxDQUFDO0FBQ3BDLE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBVyxDQUFDLENBQUM7QUFDcEMsTUFBTSxVQUFVLEdBQVcsQ0FBQyxDQUFDO0FBQzdCLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBVyxDQUFDLENBQUM7QUFFbkMsTUFBTSxPQUFPLE9BQU87SUFJbEIsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFXLEVBQUUsR0FBVztRQUN0QyxJQUFJLE1BQWMsQ0FBQztRQUNuQixJQUFJLEdBQUcsR0FBRyxDQUFDLEVBQUU7WUFDWCxJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFO2dCQUNwQixNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ1osT0FBTyxNQUFNLENBQUM7YUFDZjtZQUNELE9BQU8sR0FBRyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRTtnQkFDdEMsR0FBRyxH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Q0FBQyxFQUFDO1lBQzdCLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO1lBRXBELEtBQUssSUFBSSxDQUFDLEdBQVUsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUM3QztnQkFDRSxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ25DLENBQUMsRUFBRSxDQUFDO2FBQ0w7U0FDRjtRQUlELE9BQU8sZ0JBQWdCLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDckMsQ0FBQzs7QUE3ckJjLHNCQUFjLEdBQVcsSUFBSSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtMaXN0LCBOU3RyaW5nLCBSZWZQYXJhbSwgU3RyaW5nQnVpbGRlciwgaXNOdWxsT3JVbmRlZmluZWR9IGZyb20gXCJAbWFnaWMteHBhL21zY29yZWxpYlwiO1xyXG5pbXBvcnQge1V0aWxTdHJCeXRlTW9kZX0gZnJvbSBcIi4vVXRpbFN0ckJ5dGVNb2RlXCI7XHJcbmltcG9ydCB7UnRmfSBmcm9tIFwiLi9SdGZcIjtcclxuXHJcbmNvbnN0IEhUTUxfQkFDS1NMQVNIOiBzdHJpbmcgPSBcIiYjMDkyO1wiO1xyXG5jb25zdCBIVE1MX0NPTU1BOiBzdHJpbmcgPSBcIiYjMDQ0O1wiO1xyXG5jb25zdCBIVE1MX0hZUEhFTjogc3RyaW5nID0gXCImIzA0NTtcIjtcclxuY29uc3QgU1RSXzJfSFRNTDogbnVtYmVyID0gMTtcclxuY29uc3QgVEFTS19QQVRIX0RFTElNSVRFUjogc3RyaW5nID0gXCJAQHx8QEBcIjtcclxuZXhwb3J0IGNvbnN0IFNFUV8yX0hUTUw6IG51bWJlciA9IDI7XHJcbmV4cG9ydCBjb25zdCBIVE1MXzJfU1RSOiBudW1iZXIgPSAzO1xyXG5jb25zdCBIVE1MXzJfU0VROiBudW1iZXIgPSA0O1xyXG5leHBvcnQgY29uc3QgU0VRXzJfU1RSOiBudW1iZXIgPSA1O1xyXG5cclxuZXhwb3J0IGNsYXNzIFN0clV0aWwge1xyXG4gIHByaXZhdGUgc3RhdGljIF9wYWRkaW5nU3BhY2VzOiBzdHJpbmcgPSBudWxsO1xyXG5cclxuICAvLy8gPHN1bW1hcnk+IHRyaW0gdGhlIGVuZCBvZiB0aGUgc3RyaW5nPC9zdW1tYXJ5PlxyXG4gIHN0YXRpYyBtZW1fdHJpbShzdHI6IHN0cmluZywgbGVuOiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgbGV0IHJlc3VsdDogbnVtYmVyO1xyXG4gICAgaWYgKGxlbiA+IDApIHtcclxuICAgICAgaWYgKGxlbiA+IHN0ci5sZW5ndGgpIHtcclxuICAgICAgICByZXN1bHQgPSAtMTtcclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICB9XHJcbiAgICAgIHdoaWxlIChsZW4gPiAwICYmIHN0cltsZW4gLSAxXSA9PT0gJyAnKSB7XHJcbiAgICAgICAgbGVuID0gbGVuIC0gMTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmVzdWx0ID0gbGVuO1xyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBtZW1tb3ZlKGRlc3Q6IHN0cmluZywgZGVzdENvdW50OiBudW1iZXIsIHNyYzogc3RyaW5nLCBzcmNDb3VudDogbnVtYmVyLCBsZW46IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICBsZXQgc3RyaW5nQnVpbGRlcjogU3RyaW5nQnVpbGRlciA9IG5ldyBTdHJpbmdCdWlsZGVyKGRlc3QubGVuZ3RoICsgbGVuKTtcclxuICAgIGlmIChVdGlsU3RyQnl0ZU1vZGUuaXNMb2NhbGVEZWZMYW5nSlBOKCkgJiYgZGVzdC5sZW5ndGggPCBkZXN0Q291bnQpIHtcclxuICAgICAgc3RyaW5nQnVpbGRlci5BcHBlbmQoTlN0cmluZy5Gcm9tQ2hhcignICcsIGRlc3RDb3VudCkpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHN0cmluZ0J1aWxkZXIuQXBwZW5kKGRlc3Quc3Vic3RyKDAsIGRlc3RDb3VudCkpO1xyXG4gICAgfVxyXG4gICAgc3RyaW5nQnVpbGRlci5BcHBlbmQoc3JjLnN1YnN0cihzcmNDb3VudCwgbGVuKSk7XHJcblxyXG4gICAgaWYgKHN0cmluZ0J1aWxkZXIuTGVuZ3RoIDwgZGVzdC5sZW5ndGgpIHtcclxuICAgICAgICBzdHJpbmdCdWlsZGVyLkFwcGVuZChkZXN0LnN1YnN0cihzdHJpbmdCdWlsZGVyLkxlbmd0aCkpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIuVG9TdHJpbmcoKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBtZW1jcHkoZGVzdDogc3RyaW5nLCBkZXN0Q291bnQ6IG51bWJlciwgc3JjOiBzdHJpbmcsIHNjckNvdW50OiBudW1iZXIsIGNvdW50OiBudW1iZXIpOiBzdHJpbmc7XHJcbiAgc3RhdGljIG1lbWNweShkZXN0OiBzdHJpbmdbXSwgZGVzdENvdW50OiBudW1iZXIsIHNyYzogc3RyaW5nW10sIHNyY0NvdW50OiBudW1iZXIsIGNvdW50OiBudW1iZXIpOiB2b2lkO1xyXG4gIHN0YXRpYyBtZW1jcHkoZGVzdDogYW55LCBkZXN0Q291bnQ6IG51bWJlciwgc3JjOiBhbnksIHNjckNvdW50T3JTcmNDb3VudDogbnVtYmVyLCBjb3VudDogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSA1ICYmIChkZXN0ID09PSBudWxsIHx8IGRlc3QuY29uc3RydWN0b3IgPT09IFN0cmluZykgJiYgKGRlc3RDb3VudCA9PT0gbnVsbCB8fCBkZXN0Q291bnQuY29uc3RydWN0b3IgPT09IE51bWJlcikgJiYgKHNyYyA9PT0gbnVsbCB8fCBzcmMuY29uc3RydWN0b3IgPT09IFN0cmluZykgJiYgKHNjckNvdW50T3JTcmNDb3VudCA9PT0gbnVsbCB8fCBzY3JDb3VudE9yU3JjQ291bnQuY29uc3RydWN0b3IgPT09IE51bWJlcikgJiYgKGNvdW50ID09PSBudWxsIHx8IGNvdW50LmNvbnN0cnVjdG9yID09PSBOdW1iZXIpKSB7XHJcbiAgICAgIHJldHVybiBTdHJVdGlsLm1lbWNweV8wKGRlc3QsIGRlc3RDb3VudCwgc3JjLCBzY3JDb3VudE9yU3JjQ291bnQsIGNvdW50KTtcclxuICAgIH1cclxuICAgIFN0clV0aWwubWVtY3B5XzEoZGVzdCwgZGVzdENvdW50LCBzcmMsIHNjckNvdW50T3JTcmNDb3VudCwgY291bnQpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGNvcHkgcGFydCBvZiBzdHJpbmcgaW50byBhbm90aGVyIHN0cmluZywgbGlrZSBtZW1jcHkgb2YgQywgYnV0IDQgc3RyaW5nIG9ubHlcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiZGVzdFwiPnN0cmluZzwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJkZXN0Q291bnRcIj5vZiBjb3VudGVyIHN0YXJ0IGZyb20gaW4gZGVzdGlnbmF0aW9uIHN0cmluZzwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJzcmNcIj5zdHJpbmc8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwic2NyQ291bnRcIj5vZiBjb3VudGVyIHN0YXJ0IGZyb20gaW4gc291cmNlIHN0cmluZzwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJjb3VudFwiPjwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiBuZXcgdmFsdWUgb2YgZGVzdGlnbmF0aW9uIHN0cmluZzwvcmV0dXJucz5cclxuICBwcml2YXRlIHN0YXRpYyBtZW1jcHlfMChkZXN0OiBzdHJpbmcsIGRlc3RDb3VudDogbnVtYmVyLCBzcmM6IHN0cmluZywgc2NyQ291bnQ6IG51bWJlciwgY291bnQ6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICBsZXQgc3RyaW5nQnVpbGRlcjogU3RyaW5nQnVpbGRlciA9IG5ldyBTdHJpbmdCdWlsZGVyKGRlc3Quc3Vic3RyKDAsIGRlc3RDb3VudCkpO1xyXG5cclxuICAgIGlmIChzY3JDb3VudCArIGNvdW50IDwgc3JjLmxlbmd0aCkge1xyXG4gICAgICBzdHJpbmdCdWlsZGVyLkFwcGVuZChzcmMuc3Vic3RyKHNjckNvdW50LCBjb3VudCAtIHNjckNvdW50KSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgc3RyaW5nQnVpbGRlci5BcHBlbmQoc3JjLnN1YnN0cihzY3JDb3VudCkpO1xyXG4gICAgfVxyXG4gICAgbGV0IHNpemU6IG51bWJlciA9IGRlc3QubGVuZ3RoIC0gZGVzdENvdW50IC0gY291bnQ7XHJcbiAgICBpZiAoc2l6ZSA+IDApIHtcclxuICAgICAgc3RyaW5nQnVpbGRlci5BcHBlbmQoZGVzdC5zdWJzdHIoZGVzdENvdW50ICsgY291bnQpKTtcclxuICAgIH1cclxuICAgIHJldHVybiBzdHJpbmdCdWlsZGVyLlRvU3RyaW5nKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyBtZW1jcHlfMShkZXN0OiBzdHJpbmdbXSwgZGVzdENvdW50OiBudW1iZXIsIHNyYzogc3RyaW5nW10sIHNyY0NvdW50OiBudW1iZXIsIGNvdW50OiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHdoaWxlIChjb3VudCA+IDAgJiYgZGVzdENvdW50IDwgZGVzdC5sZW5ndGggJiYgc3JjQ291bnQgPCBzcmMubGVuZ3RoKSB7XHJcbiAgICAgIGRlc3RbZGVzdENvdW50KytdID0gc3JjW3NyY0NvdW50KytdO1xyXG4gICAgICBjb3VudCA9IGNvdW50IC0gMTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHN0YXRpYyBtZW1zZXQoZGVzdDogc3RyaW5nLCBkZXN0Q291bnQ6IG51bWJlciwgaW5WYWw6IHN0cmluZywgY291bnRlcjogbnVtYmVyKTogc3RyaW5nO1xyXG4gIHN0YXRpYyBtZW1zZXQoZGVzdDogc3RyaW5nW10sIGRlc3RDb3VudDogbnVtYmVyLCBpblZhbDogc3RyaW5nLCBjb3VudGVyOiBudW1iZXIpOiB2b2lkO1xyXG4gIHN0YXRpYyBtZW1zZXQoZGVzdDogYW55LCBkZXN0Q291bnQ6IG51bWJlciwgaW5WYWw6IHN0cmluZywgY291bnRlcjogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSA0ICYmIChkZXN0ID09PSBudWxsIHx8IGRlc3QuY29uc3RydWN0b3IgPT09IFN0cmluZykgJiYgKGRlc3RDb3VudCA9PT0gbnVsbCB8fCBkZXN0Q291bnQuY29uc3RydWN0b3IgPT09IE51bWJlcikgJiYgKGluVmFsID09PSBudWxsIHx8IGluVmFsLmNvbnN0cnVjdG9yID09PSBOdW1iZXIpICYmIChjb3VudGVyID09PSBudWxsIHx8IGNvdW50ZXIuY29uc3RydWN0b3IgPT09IE51bWJlcikpIHtcclxuICAgICAgcmV0dXJuIFN0clV0aWwubWVtc2V0XzAoZGVzdCwgZGVzdENvdW50LCBpblZhbCwgY291bnRlcik7XHJcbiAgICB9XHJcbiAgICBTdHJVdGlsLm1lbXNldF8xKGRlc3QsIGRlc3RDb3VudCwgaW5WYWwsIGNvdW50ZXIpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGluc2VydCB0byBzdHJpbmcgY2hhcnMgbiB0aW1lc1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJkZXN0XCI+c3RyaW5nPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImRlc3RDb3VudFwiPm9mIGNvdW50ZXIgc3RhcnQgZnJvbSBpbiBkZXN0aWduYXRpb24gc3RyaW5nIHRvIHN0YXJ0IGluc2VydGlvbiBvZiBjaGFyIGZyb208L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiaW5WYWxcIj4yIGluc2VydDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJjb3VudGVyXCI+LSBudW1iZXIgb2YgdGltZXMgdG8gaW5zZXJ0IHRoZSBjaGFyPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IG5ldyB2YWx1ZSBvZiBkZXN0aWduYXRpb24gc3RyaW5nPC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgc3RhdGljIG1lbXNldF8wKGRlc3Q6IHN0cmluZywgZGVzdENvdW50OiBudW1iZXIsIGluVmFsOiBzdHJpbmcsIGNvdW50ZXI6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICBsZXQgZmlyc3Q6IFN0cmluZ0J1aWxkZXIgPSBuZXcgU3RyaW5nQnVpbGRlcihkZXN0LnN1YnN0cigwLCBkZXN0Q291bnQpKTtcclxuICAgIHdoaWxlIChjb3VudGVyID4gMCkge1xyXG4gICAgICBmaXJzdC5BcHBlbmQoaW5WYWwpO1xyXG4gICAgICBjb3VudGVyID0gY291bnRlciAtIDE7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGZpcnN0Lkxlbmd0aCA8IGRlc3QubGVuZ3RoKSB7XHJcbiAgICAgIGZpcnN0LkFwcGVuZChkZXN0LnN1YnN0cihmaXJzdC5MZW5ndGgpKTtcclxuICAgIH1cclxuICAgIHJldHVybiBmaXJzdC5Ub1N0cmluZygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgbWVtc2V0XzEoZGVzdDogc3RyaW5nW10sIGRlc3RDb3VudDogbnVtYmVyLCBpblZhbDogc3RyaW5nLCBjb3VudGVyOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHdoaWxlIChjb3VudGVyID4gMCAmJiBkZXN0Q291bnQgPCBkZXN0Lmxlbmd0aCkge1xyXG4gICAgICBkZXN0W2Rlc3RDb3VudCsrXSA9IGluVmFsO1xyXG4gICAgICBjb3VudGVyID0gY291bnRlciAtIDE7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgc3Ryc3RyKHN0cjogc3RyaW5nLCBzdWJzdHI6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBsZXQgZnJvbTogbnVtYmVyID0gc3RyLmluZGV4T2Yoc3Vic3RyKTtcclxuICAgIGxldCByZXN1bHQ6IHN0cmluZztcclxuICAgIGlmIChmcm9tIDwgMCkge1xyXG4gICAgICByZXN1bHQgPSBudWxsO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHJlc3VsdCA9IHN0ci5zdWJzdHIoZnJvbSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBSZXZlcnNlcyBzdHJpbmcgdmFsdWVzLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwidGV4dFwiPlRoZSBTdHJpbmdCdWlsZGVyIG9iamVjdCBjb250YWluaW5nIHRoZSBzdHJpbmcgdG8gYmUgcmV2ZXJzZWQuPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+VGhlIHJldmVyc2VkIHN0cmluZyBjb250YWluZWQgaW4gYSBTdHJpbmdCdWlsZGVyIG9iamVjdC48L3JldHVybnM+XHJcbiAgc3RhdGljIFJldmVyc2VTdHJpbmcodGV4dDogU3RyaW5nQnVpbGRlcik6IFN0cmluZ0J1aWxkZXIge1xyXG4gICAgLy8gVE9ETzogdXNlIHN0cmluZy5SZXZlcnNlKClcclxuICAgIGxldCBhcnJheTogc3RyaW5nW10gPSBOU3RyaW5nLlRvQ2hhckFycmF5KHRleHQuVG9TdHJpbmcoKSk7XHJcbiAgICBhcnJheS5yZXZlcnNlKCk7XHJcbiAgICByZXR1cm4gbmV3IFN0cmluZ0J1aWxkZXIoTlN0cmluZy5Gcm9tQ2hhcnMoYXJyYXkpKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gcmVtb3ZlIHNwYWNlcyBmcm9tIHRoZSByaWdodCBzaWRlIG9mIHN0cmluZzwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJzdHJcIj50aGUgc3RyaW5nIHRvIHRyaW1cclxuICAvLy8gPC9wYXJhbT5cclxuICBzdGF0aWMgcnRyaW0oc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIFN0clV0aWwucnRyaW1XaXRoTnVsbChzdHIsIGZhbHNlKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gcmVtb3ZlIHNwYWNlcyBhbmQvb3IgTnVsbCBjaGFycyBmcm9tIHRoZSByaWdodCBzaWRlIG9mIHN0cmluZzwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJzdHJcIj50aGUgc3RyaW5nIHRvIHRyaW1cclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ0cmltTnVsbENoYXJzXCI+V2hldGhlciB0byByZW1vdmUgTlVMTCBjaGFyYWN0ZXJzIG9yIG5vdFxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIHN0YXRpYyBydHJpbVdpdGhOdWxsKHN0cjogc3RyaW5nLCB0cmltTnVsbENoYXJzOiBib29sZWFuKTogc3RyaW5nIHtcclxuICAgIGxldCByZXN1bHQ6IHN0cmluZztcclxuICAgIGlmICh0eXBlb2Ygc3RyID09PSBcInVuZGVmaW5lZFwiIHx8IHN0ciA9PT0gbnVsbCB8fCBzdHIubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHJlc3VsdCA9IHN0cjtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBsZXQgaWR4OiBudW1iZXIgPSBzdHIubGVuZ3RoIC0gMTtcclxuICAgICAgaWYgKHRyaW1OdWxsQ2hhcnMpIHtcclxuXHJcbiAgICAgICAgd2hpbGUgKGlkeCA+PSAwICYmIChzdHJbaWR4XSA9PT0gJyAnIHx8IHN0cltpZHhdID09PSBTdHJpbmcuZnJvbUNoYXJDb2RlKDApLyonXHUwMDAwJyovKSkge1xyXG4gICAgICAgICAgaWR4ID0gaWR4IC0gMTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgd2hpbGUgKGlkeCA+PSAwICYmIHN0cltpZHhdID09PSAnICcpIHtcclxuICAgICAgICAgIGlkeCA9IGlkeCAtIDE7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlkeCA9IGlkeCArIDE7XHJcblxyXG4gICAgICBpZiAoaWR4IDwgc3RyLmxlbmd0aCkge1xyXG4gICAgICAgIHJlc3VsdCA9IHN0ci5zdWJzdHIoMCwgaWR4KTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICByZXN1bHQgPSBzdHI7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+IHJlbW92ZSBzcGFjZXMgZnJvbSB0aGUgbGVmdCBzaWRlIG9mIHN0cmluZzwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJzdHJcIj50aGUgc3RyaW5nIHRvIHRyaW1cclxuICAvLy8gPC9wYXJhbT5cclxuICBzdGF0aWMgbHRyaW0oc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgbGV0IGxlbmd0aDogbnVtYmVyID0gc3RyLmxlbmd0aDtcclxuICAgIGxldCBpOiBudW1iZXIgPSAwO1xyXG4gICAgbGV0IHJlc3VsdDogc3RyaW5nO1xyXG4gICAgaWYgKHN0ciA9PT0gbnVsbCB8fCBsZW5ndGggPT09IDApIHtcclxuICAgICAgcmVzdWx0ID0gc3RyO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHdoaWxlIChpIDwgbGVuZ3RoICYmIHN0cltpXSA9PT0gJyAnLyonICcqLykge1xyXG4gICAgICAgIGkgPSBpICsgMTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGkgPiAwKSB7XHJcbiAgICAgICAgc3RyID0gc3RyLnN1YnN0cihpKTtcclxuICAgICAgfVxyXG4gICAgICByZXN1bHQgPSBzdHI7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlRoaXMgZnVuY3Rpb24gZm9yIERlbGV0aW5nIFN0cmluZyBmcm9tIGVuZCAmIHN0YXJ0IG9mIGlucHV0XHJcbiAgLy8vIFN0cmluZ1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwic3RyXCI+U3RyaW5nICwgd2hpY2ggY2FuIGluY2x1ZGUgc3RyVG9EZWxldGUgc3BhY2VzIG9uIGlucHV0XHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwic3RyVG9EZWxldGVcIj5uZWVkIGRlbGV0ZSB0aGlzIFN0cmluZyBmcm9tIHN0YXJ0L2VuZCBvZiBzdHIuXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiBTdHJpbmcgd2l0aG91dCBzdHJUb0RlbGV0ZSBvbiBlbmQgJiBzdGFydCxcclxuICAvLy8gb3IgJ251bGwnIGlmIFN0aW5nIGhhc24ndCBub3QgIGNoYXJhY3RlcnMgaW5zaWRlXHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICBzdGF0aWMgRGVsZXRlU3RyaW5nc0Zyb21FbmRzKHN0cjogc3RyaW5nLCBzdHJUb0RlbGV0ZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGlmIChzdHIuc3RhcnRzV2l0aChzdHJUb0RlbGV0ZSkpIHtcclxuICAgICAgc3RyID0gc3RyLnN1YnN0cihzdHJUb0RlbGV0ZS5sZW5ndGgpO1xyXG4gICAgfVxyXG4gICAgaWYgKHN0ci5lbmRzV2l0aChzdHJUb0RlbGV0ZSkpIHtcclxuICAgICAgc3RyID0gc3RyLnN1YnN0cigwLCBzdHIubGVuZ3RoIC0gc3RyVG9EZWxldGUubGVuZ3RoKTtcclxuICAgIH1cclxuICAgIGxldCByZXN1bHQ6IHN0cmluZztcclxuICAgIGlmIChzdHIubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHJlc3VsdCA9IG51bGw7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgcmVzdWx0ID0gc3RyO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gcGFkIGEgc3RyaW5nIHdpdGggdHJhaWxpbmcgc3BhY2VzIHVwIHRvIHRoZSBnaXZlbiBsZW5ndGg8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwic3RyXCI+dGhlIHN0cmluZyB0byBwYWRcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJsZW5cIj50aGUgZXhwZWN0ZWQgbGVuZ3RoIGFmdGVyIHBhZGRpbmdcclxuICAvLy8gPC9wYXJhbT5cclxuICBzdGF0aWMgcGFkU3RyKHN0cjogc3RyaW5nLCBsZW46IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICBsZXQgcGFkTGVuOiBudW1iZXIgPSBsZW4gLSBzdHIubGVuZ3RoO1xyXG5cclxuICAgIGlmIChwYWRMZW4gPiAwKSB7XHJcbiAgICAgIGlmIChTdHJVdGlsLl9wYWRkaW5nU3BhY2VzID09PSBudWxsIHx8IFN0clV0aWwuX3BhZGRpbmdTcGFjZXMubGVuZ3RoIDwgcGFkTGVuKSB7XHJcbiAgICAgICAgU3RyVXRpbC5fcGFkZGluZ1NwYWNlcyA9IE5TdHJpbmcuRnJvbUNoYXIoJyAnLCBwYWRMZW4pO1xyXG4gICAgICB9XHJcbiAgICAgIGxldCBzdHJpbmdCdWlsZGVyOiBTdHJpbmdCdWlsZGVyID0gbmV3IFN0cmluZ0J1aWxkZXIobGVuKTtcclxuICAgICAgc3RyaW5nQnVpbGRlci5BcHBlbmQoc3RyKTtcclxuICAgICAgc3RyaW5nQnVpbGRlci5BcHBlbmQoU3RyVXRpbC5fcGFkZGluZ1NwYWNlcywgMCwgcGFkTGVuKTtcclxuICAgICAgc3RyID0gc3RyaW5nQnVpbGRlci5Ub1N0cmluZygpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHN0cjtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gdGhpcyBtZXRob2Qgd2lsbCBzZXJ2ZSBhcyBhIHN0cmluZyB0b2tlbml6ZXIgaW5zdGVhZCBvZiB1c2luZyB0aGUgYyMgc3BsaXQgbWV0aG9kXHJcbiAgLy8vIHNpbmNlIHRoZXJlIGFyZSBkaWZmcmVuY2VzIGJ0d2VlbiBqYXZhIHRva2VuaXplciBhbmQgYyMgc3BsaXRcclxuICAvLy8gdGhlIGltcGxpbWVudGF0aW9uIGdpdmVuIGJ5IHRoZSBjb252ZXJzaW9uIHRvb2wgaXMgbm90IFN1ZmZpY2llbnRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInNvdXJjZVwiPi0gdGhlIHNvdXJjZSBzdHJpbmcgdG8gYmUgY29udmVydGVkXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiZGVsaW1cIj4tIHRoZSBzdHJpbmcgb2YgZGVsaW1pdGVycyB1c2VkIHRvIHNwbGl0IHRoZSBzdHJpbmcgKGVhY2ggY2hhcmFjdGVyIGluIHRoZSBTdHJpbmcgaXMgYSBkZWxpbWl0ZXJcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IGFycmF5IG9mIHRva2VuIGFjY29yZGluZyB3aGljaCBpcyB0aGUgc2FtZSBhcyBzdHJpbmcgdG9rZW5pemVyIGluIGphdmFcclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIHN0YXRpYyB0b2tlbml6ZShzb3VyY2U6IHN0cmluZywgZGVsaW06IHN0cmluZ3xSZWdFeHApOiBzdHJpbmdbXSB7XHJcbiAgICAvLyBJdCBpcyBtZW50aW9uZWQgaW4gdGhlIGNvbW1lbnQgdGhhdCB3ZSBzaG91bGQgbm90IHVzZSBTdHJpbmcuU3BsaXQoKVxyXG4gICAgLy8gYmVjYXVzZSBpdHMgYmVoYXZpb3IgaXMgZGlmZmVyZW50IHRoYW4gSmF2YSdzIHRva2VuaXplci5cclxuICAgIC8vIFNvLCB3ZSB3ZXJlIHN1cHBvc2UgdG8gdXNlIG91ciBvd24gaW1wbGVtZW50YXRpb24gKHRoZSBjb21tZW50ZWQgY29kZSBiZWxvdykuXHJcbiAgICAvLyBCdXQgYWxsIHRoZXNlIHllYXJzLCB3ZSB3ZXJlIGNhbGxpbmcgWG1sUGFyc2VyLmdldFRva2VuKCkgd2hpY2ggd2FzIGFjdHVhbGx5XHJcbiAgICAvLyB1c2luZyBTdHJpbmcuU3BsaXQoKS4gQW5kIHdlIGRpZG4ndCBmYWNlIGFueSBwcm9ibGVtLlxyXG4gICAgLy8gU28sIGl0IHNlZW1zIHRoYXQgd2UgZG8gbm90IGhhdmUgcHJvYmxlbSBpbiB1c2luZyBTdHJpbmcuU3BsaXQoKS5cclxuICAgIC8vIEJ1dCBub3csIHdlIGNhbiBpbXByb3ZlIHRoZSBwZXJmb3JtYW5jZSBoZXJlLi4uXHJcbiAgICAvLyBYbWxQYXJzZXIuZ2V0VG9rZW5zKCkgd2FzIGdldHRpbmcgYSBTdHJpbmdbXSB1c2luZyBTdHJpbmcuU3BsaXQoKS5cclxuICAgIC8vIEl0IHdhcyB0aGVuIGNyZWF0aW5nIGEgTGlzdDxTdHJpbmc+IGZyb20gdGhpcyBTdHJpbmdbXSBhbmQgd2FzIHJldHVybmluZyBpdCB0b1xyXG4gICAgLy8gdG9rZW5pemUoKS5cclxuICAgIC8vIHRva2VuaXplKCkgd2FzIGFnYWluIGNvbnZlcnRpbmcgdGhpcyBMaXN0PFN0cmluZz4gYmFjayB0byBTdHJpbmdbXS5cclxuICAgIC8vIFNvIHdoeSBub3QgY2FsbCBTdHJpbmcuU3BsaXQoKSBkaXJlY3RseT9cclxuICAgIHJldHVybiBzb3VyY2Uuc3BsaXQoZGVsaW0pO1xyXG4gICAgLypcclxuU3RyaW5nIFtdIHRva2VucyA9IG51bGw7XHJcblxyXG5jaGFyIFtdIGRlbGltQXJyeSA9IGRlbGltLnRvQ2hhckFycmF5KCk7XHJcblxyXG4vL3NpbmNlIGphdmEgZGlzY2FyZHMgZGVsaW1pdGVycyBmcm9tIHRoZSBzdGFydCBhbmQgZW5kIG9mIHRoZSBzdHJpbmcgYW5kIGMjIGRvZXMgbm90XHJcbi8vd2UgbmVlZCB0byByZW1vdmUgdGhlbSBtYW51YWxseVxyXG4vLyAgICAgICBzb3VyY2UgPSBzb3VyY2UuVHJpbUVuZChkZWxpbUFycnkpO1xyXG4vLyAgICAgc291cmNlID0gc291cmNlLlRyaW1TdGFydChkZWxpbUFycnkpO1xyXG5zb3VyY2UgPSBzb3VyY2UudHJpbSgpO1xyXG5cclxuLy9ub3cgdGhhdCB3ZSBoYXZlIHJlbW92ZSBzdGFydGluZyBhbmQgZW5kaW5nIGRlbGltaXRlcnMgd2UgY2FuIHNwbGl0XHJcbnRva2VucyA9IHNvdXJjZS5TcGxpdChkZWxpbUFycnkpO1xyXG5cclxuLypcclxuKiBvbmx5IG9uZSBwcm9ibGVtOiBpZiB3ZSBoYXZlIHR3byBTdWJzZXF1ZW50IGRlbGltaXRlcnMgZm9yIGV4YW1wbGUgOlxyXG4qIHRoZSBkZWxpbWl0ZXIgaXMgJzsnIGFuZCB0aGUgc3RyaW5nIGlzOiBcImZpcnN0OztzZWNvbmQ7dGhpcmRcIlxyXG4qIHRoZW4gaW4gamF2YSBTdHJpbmcgdG9rZW5pemVyIHdpbGwgZ2l2ZSB1cyBvbmx5IDMgdG9rZW5zIDpmaXJzdCxzZWNvbmQgYW5kIHRoaXJkXHJcbiogd2hpbGUgaXMgYyMgc3BsaXQgd2V0aG9kIHdpbGwgcmV0dXJuIDQgdG9rZW5zOiBmaXJzdCxlbXB0eSBzdHJpbmcsc2Vjb25kIGFuZCB0aGlyZFxyXG4qIHdlIG5lZWQgdG8gZGVhbCB3aXRoIHRoYXRcclxuKi9cclxuICAgIC8qXHJcbiAgICBMaXN0IHJlcyAgPSBuZXcgTGlzdCgpO1xyXG4gICAgZm9yIChpbnQgaSA9IDAgOyBpIDwgdG9rZW5zLmxlbmd0aDsgaSsrKVxyXG4gICAge1xyXG4gICAgaWYgKHRva2Vuc1tpXSAhPSBcIlwiIClcclxuICAgIHJlcy5hZGRJdGVtKHRva2Vuc1tpXSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIChTdHJpbmcgW10pKHJlcy5nZXRBbGxJdGVtcyAoU3RyaW5nLmNsYXNzKSk7Ki9cclxuXHJcblxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHRyYW5zbGF0ZSBmcm9tIHN0cmluZyB0byBoZXhhIGR1bXAgY2hhciBieSBjaGFyXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInN0cmluZ1wiPnRvIHRyYW5zbGF0ZSBpdCB0byB0aGUgYnl0ZSBzdHJlYW08L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwibWluTGVuZ3RoXCI+dGhlIG1pbmltYWwgbGVuZ3RoIG9mIGhleGEgZGlnaXRzIGZvciBlYWNoIGNoYXI8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gdGhlIGJ5dGUgc3RyZWFtIGluIGZvcm0gb2Ygc3RyaW5nPC9yZXR1cm5zPlxyXG4gIHN0YXRpYyBzdHJpbmdUb0hleGFEdW1wKHN0cjogc3RyaW5nLCBtaW5MZW5ndGg6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICBsZXQgc3RyaW5nQnVpbGRlcjogU3RyaW5nQnVpbGRlciA9IG5ldyBTdHJpbmdCdWlsZGVyKHN0ci5sZW5ndGggKiBtaW5MZW5ndGgpO1xyXG4gICAgZm9yIChsZXQgaW5keDogbnVtYmVyID0gMDsgaW5keCA8IHN0ci5sZW5ndGg7IGluZHggPSBpbmR4ICsgMSkge1xyXG4gICAgICBsZXQgY3VyckludDogbnVtYmVyID0gc3RyLmNoYXJDb2RlQXQoaW5keCk7XHJcbiAgICAgIGxldCBoZXhTdHI6IHN0cmluZyA9IGN1cnJJbnQudG9TdHJpbmcoMTYpO1xyXG4gICAgICB3aGlsZSAoaGV4U3RyLmxlbmd0aCA8IG1pbkxlbmd0aCkge1xyXG4gICAgICAgIGhleFN0ciA9IFwiMFwiICsgaGV4U3RyO1xyXG4gICAgICB9XHJcbiAgICAgIHN0cmluZ0J1aWxkZXIuQXBwZW5kKGhleFN0cik7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gc3RyaW5nQnVpbGRlci5Ub1N0cmluZygpLnRvVXBwZXJDYXNlKCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgc2VhcmNoQW5kUmVwbGFjZShzdHI6IHN0cmluZywgZnJvbTogc3RyaW5nLCB0bzogc3RyaW5nKTogc3RyaW5nO1xyXG4gIHN0YXRpYyBzZWFyY2hBbmRSZXBsYWNlKHN0cjogc3RyaW5nLCBmcm9tOiBzdHJpbmdbXSwgdG86IHN0cmluZ1tdKTogc3RyaW5nO1xyXG4gIHN0YXRpYyBzZWFyY2hBbmRSZXBsYWNlKHN0cjogc3RyaW5nLCBmcm9tOiBhbnksIHRvOiBhbnkpOiBzdHJpbmcge1xyXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMgJiYgKHN0ciA9PT0gbnVsbCB8fCBzdHIuY29uc3RydWN0b3IgPT09IFN0cmluZykgJiYgKGZyb20gPT09IG51bGwgfHwgZnJvbS5jb25zdHJ1Y3RvciA9PT0gU3RyaW5nKSAmJiAodG8gPT09IG51bGwgfHwgdG8uY29uc3RydWN0b3IgPT09IFN0cmluZykpIHtcclxuICAgICAgcmV0dXJuIFN0clV0aWwuc2VhcmNoQW5kUmVwbGFjZV8wKHN0ciwgZnJvbSwgdG8pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIFN0clV0aWwuc2VhcmNoQW5kUmVwbGFjZV8xKHN0ciwgZnJvbSwgdG8pO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PiByZXBsYWNlIGV2ZXJ5IGFwcGVhcmFuY2Ugb2YgJ2Zyb20nIGluICdzdHInIHdpdGggJ3RvJzwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJzdHJcIj50aGUgd29ya2luZyBiYXNlIHNvdXJjZSBzdHJpbmcgPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJmcm9tXCI+dGhlIHN0cmluZyB0byByZXBsYWNlIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwidG9cIj50aGUgc3RyaW5nIHVzZSBpbnN0ZWFkICdmcm9tJyA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gbW9kaWZpZWQgU3RyaW5nIDwvcmV0dXJucz5cclxuICBwcml2YXRlIHN0YXRpYyBzZWFyY2hBbmRSZXBsYWNlXzAoc3RyOiBzdHJpbmcsIGZyb206IHN0cmluZywgdG86IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBsZXQgbGFzdFN1YlN0cjogbnVtYmVyID0gMDtcclxuICAgIGxldCBzdGFydFN1YlN0cjogbnVtYmVyO1xyXG4gICAgbGV0IHJlc3VsdDogc3RyaW5nO1xyXG5cclxuICAgIGlmICgoc3RhcnRTdWJTdHIgPSBzdHIuaW5kZXhPZihmcm9tKSkgPT09IC0xKSB7XHJcbiAgICAgIHJlc3VsdCA9IHN0cjtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBsZXQgc3RyaW5nQnVpbGRlcjogU3RyaW5nQnVpbGRlciA9IG5ldyBTdHJpbmdCdWlsZGVyKHN0ci5sZW5ndGgpO1xyXG4gICAgICB3aGlsZSAoc3RhcnRTdWJTdHIgIT09IC0xKSB7XHJcbiAgICAgICAgc3RyaW5nQnVpbGRlci5BcHBlbmQoc3RyLnN1YnN0cihsYXN0U3ViU3RyLCBzdGFydFN1YlN0ciAtIGxhc3RTdWJTdHIpICsgdG8pO1xyXG4gICAgICAgIHN0YXJ0U3ViU3RyID0gc3RhcnRTdWJTdHIgKyBmcm9tLmxlbmd0aDtcclxuICAgICAgICBsYXN0U3ViU3RyID0gc3RhcnRTdWJTdHI7XHJcbiAgICAgICAgc3RhcnRTdWJTdHIgPSBzdHIuaW5kZXhPZihmcm9tLCBsYXN0U3ViU3RyKTtcclxuICAgICAgfVxyXG4gICAgICBzdHJpbmdCdWlsZGVyLkFwcGVuZChzdHIuc3Vic3RyKGxhc3RTdWJTdHIpKTtcclxuICAgICAgcmVzdWx0ID0gc3RyaW5nQnVpbGRlci5Ub1N0cmluZygpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gcmVwbGFjZSBldmVyeSBhcHBlYXJhbmNlIG9mIHN0cmluZ3Mgb2YgJ2Zyb20nIGluICdzdHInIHdpdGggdGhlIGFjY29yZGluZyBzdHJpbmcgaW4gJ3RvJzwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJzdHJcIj50aGUgd29ya2luZyBiYXNlIHNvdXJjZSBzdHJpbmcgPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJmcm9tXCI+dGhlIHN0cmluZyB0byByZXBsYWNlIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwidG9cIj50aGUgc3RyaW5nIHVzZSBpbnN0ZWFkICdmcm9tJyA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gbW9kaWZpZWQgU3RyaW5nIDwvcmV0dXJucz5cclxuICBwcml2YXRlIHN0YXRpYyBzZWFyY2hBbmRSZXBsYWNlXzEoc3RyOiBzdHJpbmcsIGZyb206IHN0cmluZ1tdLCB0bzogc3RyaW5nW10pOiBzdHJpbmcge1xyXG4gICAgbGV0IGxhc3RTdWJTdHI6IG51bWJlciA9IDA7XHJcbiAgICBsZXQgc2FySW5kZXg6IG51bWJlciA9IDA7XHJcbiAgICBsZXQgZnJvbUNvcHk6IHN0cmluZ1tdID0gZnJvbS5zbGljZSgpO1xyXG4gICAgbGV0IHN0YXJ0U3ViU3RyOiBudW1iZXI7XHJcbiAgICBsZXQgU0FSaW5kZXg6IFJlZlBhcmFtPG51bWJlcj4gPSBuZXcgUmVmUGFyYW0oMCk7XHJcbiAgICBzdGFydFN1YlN0ciA9IFN0clV0aWwuaW5kZXhPZihzdHIsIGZyb21Db3B5LCBsYXN0U3ViU3RyLCBTQVJpbmRleCk7XHJcbiAgICBzYXJJbmRleCA9IFNBUmluZGV4LnZhbHVlO1xyXG4gICAgaWYgKHN0YXJ0U3ViU3RyID09PSAtMSlcclxuICAgICAgcmV0dXJuIHN0cjtcclxuXHJcbiAgICBsZXQgcmVzdWx0OiBzdHJpbmc7XHJcbiAgICBsZXQgdG1wQnVmOiBTdHJpbmdCdWlsZGVyID0gbmV3IFN0cmluZ0J1aWxkZXIoc3RyLmxlbmd0aCk7XHJcbiAgICB3aGlsZSAoc3RhcnRTdWJTdHIgIT09IC0xKSB7XHJcbiAgICAgIHRtcEJ1Zi5BcHBlbmQoc3RyLnN1YnN0cihsYXN0U3ViU3RyLCBzdGFydFN1YlN0ciAtIGxhc3RTdWJTdHIpICsgdG9bc2FySW5kZXhdKTtcclxuICAgICAgc3RhcnRTdWJTdHIgKz0gZnJvbUNvcHlbc2FySW5kZXhdLmxlbmd0aDtcclxuICAgICAgbGFzdFN1YlN0ciA9IHN0YXJ0U3ViU3RyO1xyXG4gICAgICBzdGFydFN1YlN0ciA9IFN0clV0aWwuaW5kZXhPZihzdHIsIGZyb21Db3B5LCBsYXN0U3ViU3RyLCBTQVJpbmRleCk7XHJcbiAgICAgIHNhckluZGV4ID0gU0FSaW5kZXgudmFsdWU7XHJcbiAgICAgIH07XHJcbiAgICB0bXBCdWYuQXBwZW5kKHN0ci5zdWJzdHIobGFzdFN1YlN0cikpO1xyXG4gICAgcmVzdWx0ID0gdG1wQnVmLlRvU3RyaW5nKCk7XHJcblxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gdGhpcyBmdW5jdGlvbnMgaXMgZm9yIHVzZSBieSB0aGUgc2VhcmNoQW5kUmVwbGFjZSgpIGZ1bmN0aW9uIC1cclxuICAvLy8gc2VhcmNoZXMgdGhlIG9mZnNldCBvZiB0aGUgc3RyaW5ncyBmcm9tIHRoZSBhcnJheSBpbiB0aGUgZ2l2ZW4gc3RyaW5nXHJcbiAgLy8vIGFuZCByZXR1cm5zIHRoZSBtaW5pbXVtIG9mZnNldCBmb3VuZCBhbmQgc2V0cyB0aGUgaW5kZXggb2YgdGhlIGZvdW5kIHN0cmluZ1xyXG4gIC8vLyB0byBTQVJpbmRleFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwic3RyXCI+dGhlIHN0cmluZyB0byBzZWFyY2ggaW4gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJzdHJpbmdzXCI+YW4gYXJyYXkgb2Ygc3RyaW5ncyB0byBzZWFyY2ggZm9yIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwib2Zmc2V0XCI+d2hlcmUgdG8gc3RhcnQgdGhlIHNlYXJjaCA8L3BhcmFtPlxyXG4gIHByaXZhdGUgc3RhdGljIGluZGV4T2Yoc3RyOiBzdHJpbmcsIHN0cmluZ3M6IHN0cmluZ1tdLCBvZmZzZXQ6IG51bWJlciwgU0FSaW5kZXg6IFJlZlBhcmFtPG51bWJlcj4pOiBudW1iZXIge1xyXG4gICAgbGV0IG1pbk9mZnNldDogbnVtYmVyID0gLTE7XHJcbiAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgc3RyaW5ncy5sZW5ndGg7IGkgPSBpICsgMSkge1xyXG4gICAgICBsZXQgZmxhZzogYm9vbGVhbiA9IHN0cmluZ3NbaV0gPT09IG51bGw7XHJcbiAgICAgIGlmICghKHN0cmluZ3NbaV0gPT09IG51bGwpKSB7XHJcbiAgICAgICAgbGV0IHJlc3VsdE9mZnNldDogbnVtYmVyID0gc3RyLmluZGV4T2Yoc3RyaW5nc1tpXSwgb2Zmc2V0KTtcclxuXHJcbiAgICAgICAgaWYgKHJlc3VsdE9mZnNldCA9PT0gLTEpIHtcclxuICAgICAgICAgIHN0cmluZ3NbaV0gPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGlmIChyZXN1bHRPZmZzZXQgPCBtaW5PZmZzZXQgfHwgbWluT2Zmc2V0ID09PSAtMSkge1xyXG4gICAgICAgICAgICBtaW5PZmZzZXQgPSByZXN1bHRPZmZzZXQ7XHJcbiAgICAgICAgICAgIFNBUmluZGV4LnZhbHVlID0gaTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBsZXQgcmVzdWx0OiBudW1iZXI7XHJcbiAgICBpZiAobWluT2Zmc2V0ID4gLTEpIHtcclxuICAgICAgcmVzdWx0ID0gbWluT2Zmc2V0O1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIFNBUmluZGV4LnZhbHVlID0gLTE7XHJcbiAgICAgIHJlc3VsdCA9IC0xO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gcmVwbGFjZSB0b2tlbnMgaW4gdXNlciBzdHJpbmcgYnkgdmVjdG9yIHZhbHVlcyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwidXNlclN0cmluZ1wiPi0gdXNlciBidWZmZXIgbGlrZSBcIlVzZXIgJWQsICVkIHN0cmluZ1wiXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwidG9rZW5cIj4tIHRva2VuIHVzZWQgaW4gdXNlciBzdHJpbmcgLSBpLmUuIFwiJWRcIlxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cIm9jY3VycmVuY2VcIj4tIG51bWJlciBvZiB0b2tlbiB3aGVyZSByZXBsYWNlIHdpbGwgdGFrZSBwYXJ0ICgxIGZvciBmaXJzdCBvY2N1cnJlbmNlKVxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInZhbHVlXCI+LSB2YWx1ZSB0byBiZSBpbnNlcnRlZCBpbnN0ZWQgb2YgdG9rZW5cclxuICAvLy8gPC9wYXJhbT5cclxuICBzdGF0aWMgcmVwbGFjZVN0cmluZ1Rva2Vucyh1c2VyU3RyaW5nOiBzdHJpbmcsIHRva2VuOiBzdHJpbmcsIG9jY3VycmVuY2U6IG51bWJlciwgdmFsOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgbGV0IHRva2VuTGVuOiBudW1iZXIgPSB0b2tlbi5sZW5ndGg7XHJcbiAgICBsZXQgY3VyclBvc2l0aW9uOiBudW1iZXIgPSAwO1xyXG4gICAgbGV0IG5ld1N0cmluZzogc3RyaW5nID0gdXNlclN0cmluZztcclxuXHJcbiAgICBpZiAodmFsICE9PSBudWxsKSB7XHJcbiAgICAgIGxldCBudW0yOiBudW1iZXIgPSAwO1xyXG4gICAgICB3aGlsZSAobnVtMiA8IG9jY3VycmVuY2UgJiYgY3VyclBvc2l0aW9uICE9PSAtMSkge1xyXG4gICAgICAgIGN1cnJQb3NpdGlvbiA9IHVzZXJTdHJpbmcuaW5kZXhPZih0b2tlbiwgY3VyclBvc2l0aW9uICsgKChudW0yID09PSAwKSA/IDAgOiB0b2tlbkxlbikpO1xyXG4gICAgICAgIG51bTIgPSBudW0yICsgMTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGN1cnJQb3NpdGlvbiAhPT0gLTEpIHtcclxuICAgICAgICBuZXdTdHJpbmcgPSB1c2VyU3RyaW5nLnN1YnN0cigwLCBjdXJyUG9zaXRpb24pICsgdmFsICsgdXNlclN0cmluZy5zdWJzdHIoY3VyclBvc2l0aW9uICsgdG9rZW5MZW4sIHVzZXJTdHJpbmcubGVuZ3RoIC0gKGN1cnJQb3NpdGlvbiArIHRva2VuTGVuKSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBuZXdTdHJpbmc7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgbWFrZVByaW50YWJsZVRva2Vucyhzb3VyY2U6IHN0cmluZywgdHlwZTogc3RyaW5nKTogc3RyaW5nO1xyXG4gIHN0YXRpYyBtYWtlUHJpbnRhYmxlVG9rZW5zKHNvdXJjZTogc3RyaW5nLCB0eXBlOiBudW1iZXIpOiBzdHJpbmc7XHJcbiAgc3RhdGljIG1ha2VQcmludGFibGVUb2tlbnMoc291cmNlOiBMaXN0PHN0cmluZz4sIHR5cGU6IG51bWJlcik6IHN0cmluZztcclxuICBzdGF0aWMgbWFrZVByaW50YWJsZVRva2Vucyhzb3VyY2U6IGFueSwgdHlwZTogYW55KTogc3RyaW5nIHwgdm9pZHtcclxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyICYmIChzb3VyY2UgPT09IG51bGwgfHwgc291cmNlLmNvbnN0cnVjdG9yID09PSBTdHJpbmcpICYmICh0eXBlID09PSBudWxsIHx8IHR5cGUuY29uc3RydWN0b3IgPT09IE51bWJlcikpIHtcclxuICAgICAgcmV0dXJuIFN0clV0aWwubWFrZVByaW50YWJsZVRva2Vuc18wKHNvdXJjZSwgdHlwZSk7XHJcbiAgICB9XHJcbiAgICBTdHJVdGlsLm1ha2VQcmludGFibGVUb2tlbnNfMShzb3VyY2UsIHR5cGUpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGNvbnZlcnRzIHNwZWNpYWwgY2hhcmFjdGVycyBpbiBhIHRva2VuIHRvIGEgcHJpbnRhYmxlIGZvcm1hdFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJzb3VyY2VcIj5hIHRva2VuIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJ0eXBlXCI+dHlwZSBvZiBjb252ZXJzaW9uOiBTVFJfMl9IVE1MLCBTRVFfMl9IVE1MLCBIVE1MXzJfU0VRLCBIVE1MXzJfU1RSLCBTRVFfMl9TVFIgPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IHRva2VuIHdpdGggY29udmVydGVkIHNwZWNpYWwgY2hhcmFjdGVycyA8L3JldHVybnM+XHJcbiAgc3RhdGljIG1ha2VQcmludGFibGVUb2tlbnNfMChzb3VyY2U6IHN0cmluZywgdHlwZTogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIGxldCBlc2NTdHI6IHN0cmluZ1tdID0gW1xyXG4gICAgICBcIlxcXFxcIiwgXCItXCIsIFwiLFwiXHJcbiAgICBdO1xyXG4gICAgbGV0IGVzY1NlcTogc3RyaW5nW10gPSBbXHJcbiAgICAgIFwiXFxcXFxcXFxcIiwgXCJcXFxcLVwiLCBcIlxcXFwsXCJcclxuICAgIF07XHJcbiAgICBsZXQgZXNjSHRtOiBzdHJpbmdbXSA9IFtcclxuICAgICAgSFRNTF9CQUNLU0xBU0gsIEhUTUxfSFlQSEVOLCBIVE1MX0NPTU1BXHJcbiAgICBdO1xyXG4gICAgbGV0IHJlc3VsdDogc3RyaW5nO1xyXG4gICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgIGNhc2UgU1RSXzJfSFRNTDpcclxuICAgICAgICByZXN1bHQgPSBTdHJVdGlsLnNlYXJjaEFuZFJlcGxhY2Uoc291cmNlLCBlc2NTdHIsIGVzY0h0bSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgU0VRXzJfSFRNTDpcclxuICAgICAgICByZXN1bHQgPSBTdHJVdGlsLnNlYXJjaEFuZFJlcGxhY2Uoc291cmNlLCBlc2NTZXEsIGVzY0h0bSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgSFRNTF8yX1NFUTpcclxuICAgICAgICByZXN1bHQgPSBTdHJVdGlsLnNlYXJjaEFuZFJlcGxhY2Uoc291cmNlLCBlc2NIdG0sIGVzY1NlcSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgSFRNTF8yX1NUUjpcclxuICAgICAgICByZXN1bHQgPSBTdHJVdGlsLnNlYXJjaEFuZFJlcGxhY2Uoc291cmNlLCBlc2NIdG0sIGVzY1N0cik7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgU0VRXzJfU1RSOlxyXG4gICAgICAgIHJlc3VsdCA9IFN0clV0aWwuc2VhcmNoQW5kUmVwbGFjZShzb3VyY2UsIGVzY1NlcSwgZXNjU3RyKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXN1bHQgPSBzb3VyY2U7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBjb252ZXJ0cyBzcGVjaWFsIGNoYXJhY3RlcnMgaW4gYSB0b2tlbnMgY29sbGVjdGlvbiB0byBhIHByaW50YWJsZSBmb3JtYXRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwic291cmNlXCI+dmVjdG9yIG9mIHN0cmluZ3MgYmVmb3JlIHRva2VuYWl6ZXIgPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInR5cGVcIj50eXBlIG9mIGNvbnZlcnNpb246IFNUUl8yX0hUTUwsIFNFUV8yX0hUTUwsIEhUTUxfMl9TRVEsIEhUTUxfMl9TVFIgPC9wYXJhbT5cclxuICBwcml2YXRlIHN0YXRpYyBtYWtlUHJpbnRhYmxlVG9rZW5zXzEoc291cmNlOiBMaXN0PHN0cmluZz4sIHR5cGU6IG51bWJlcik6IHZvaWQge1xyXG4gICAgaWYgKHNvdXJjZSAhPT0gbnVsbCkge1xyXG4gICAgICBsZXQgbGVuZ3RoOiBudW1iZXIgPSBzb3VyY2UubGVuZ3RoO1xyXG4gICAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgbGVuZ3RoOyBpID0gaSArIDEpIHtcclxuICAgICAgICBsZXQgY3VyckVsbTogc3RyaW5nID0gc291cmNlLmdldF9JdGVtKGkpO1xyXG4gICAgICAgIHNvdXJjZS5zZXRfSXRlbShpLCBTdHJVdGlsLm1ha2VQcmludGFibGVUb2tlbnNfMChjdXJyRWxtLCB0eXBlKSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBjaGFuZ2Ugbm9uLXByaW50YWJsZSBjaGFyYWN0ZXJzIGxpa2UgXCJuZXcgbGluZVwiIGFuZCBcImxpbmUgZmVlZFwiIHRvIHRoZWlyXHJcbiAgLy8vICAgcHJpbnRhYmxlIHJlcHJlc2VudGF0aW9uXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInNvdXJjZVwiPmlzIHRoZSBzdHJpbmcgd2l0aCBub24tcHJpbnRhYmxlIGNoYXJhY3RlcnMgPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IHRoZSBuZXcgc3RyaW5nIHdoZXJlIGFsbCB0aGUgbm9uLXByaW50YWJsZSBjaGFyYWN0ZXJzIGFyZSBjb252ZXJ0ZWQgPC9yZXR1cm5zPlxyXG4gIHN0YXRpYyBtYWtlUHJpbnRhYmxlKHNvdXJjZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGxldCBmcm9tOiBzdHJpbmdbXSA9IFtcclxuICAgICAgXCJcXG5cIiwgXCJcXHJcIiwgXCInXCIsIFwiXFxcXFwiLCBcIlxcXCJcIiwgXCJcXDBcIlxyXG4gICAgXTtcclxuICAgIGxldCB0bzogc3RyaW5nW10gPSBbXHJcbiAgICAgIFwiXFxcXG5cIiwgXCJcXFxcclwiLCBcIlxcXFwnXCIsIFwiXFxcXFxcXFxcIiwgXCJcXFxcXFxcIlwiLCBcIlxcXFwwXCJcclxuICAgIF07XHJcbiAgICByZXR1cm4gU3RyVXRpbC5zZWFyY2hBbmRSZXBsYWNlKHNvdXJjZSwgZnJvbSwgdG8pO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGNoYW5nZSBub24tcHJpbnRhYmxlIGNoYXJhY3RlcnMgbGlrZSBcIm5ldyBsaW5lXCIgYW5kIFwibGluZSBmZWVkXCIgdG8gdGhlaXJcclxuICAvLy8gICBwcmludGFibGUgcmVwcmVzZW50YXRpb24gKHNpbXBsaWZpZWQgdmVyc2lvbiBmb3IgcmFuZ2UgZXJyb3IgbWVzc2FnZSlcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwic291cmNlXCI+aXMgdGhlIHN0cmluZyB3aXRoIG5vbi1wcmludGFibGUgY2hhcmFjdGVycyA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gdGhlIG5ldyBzdHJpbmcgd2hlcmUgYWxsIHRoZSBub24tcHJpbnRhYmxlIGNoYXJhY3RlcnMgYXJlIGNvbnZlcnRlZCA8L3JldHVybnM+XHJcbiAgc3RhdGljIG1ha2VQcmludGFibGUyKHNvdXJjZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGxldCBmcm9tOiBzdHJpbmdbXSA9IFtcclxuICAgICAgXCJcXG5cIiwgXCJcXHJcIiwgXCJcXDBcIlxyXG4gICAgXTtcclxuICAgIGxldCB0bzogc3RyaW5nW10gPSBbXHJcbiAgICAgIFwiXFxcXG5cIiwgXCJcXFxcclwiLCBcIlxcXFwwXCJcclxuICAgIF07XHJcbiAgICByZXR1cm4gU3RyVXRpbC5zZWFyY2hBbmRSZXBsYWNlKHNvdXJjZSwgZnJvbSwgdG8pO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vL1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwic1wiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwibGVuXCI+PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIHN0YXRpYyBac3RyaW5nTWFrZShzOiBzdHJpbmcsIGxlbjogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIGxlbiA9IFN0clV0aWwubWVtX3RyaW0ocywgbGVuKTtcclxuICAgIHJldHVybiBzLnN1YnN0cigwLCBsZW4pO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PihwdWJsaWMpXHJcbiAgLy8vIHJldHVybnMgcGxhaW4gdGV4dCBmcm9tIHJ0ZiB0ZXh0XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJydGZUZXh0XCI+cmVmZXIgdG8gdGhlIHN1bW1hcnk8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz5yZWZlciB0byB0aGUgc3VtbWFyeTwvcmV0dXJucz5cclxuICBzdGF0aWMgR2V0UGxhaW5UZXh0ZnJvbVJ0ZihydGZUZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgaWYgKFJ0Zi5pc1J0ZihydGZUZXh0KSkge1xyXG4gICAgICBsZXQgcnRmOiBSdGYgPSBuZXcgUnRmKCk7XHJcbiAgICAgIGxldCBvdXRwdXRUeHQ6IFN0cmluZ0J1aWxkZXIgPSBuZXcgU3RyaW5nQnVpbGRlcihcIlwiKTtcclxuICAgICAgcnRmLnRvVHh0KHJ0ZlRleHQsIG91dHB1dFR4dCk7XHJcbiAgICAgIHJ0ZlRleHQgPSBvdXRwdXRUeHQuVG9TdHJpbmcoKTtcclxuICAgIH1cclxuICAgIHJldHVybiBydGZUZXh0O1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBSZXR1cm5zIHRydWUgaWYgdGhlIHN0cmluZyBhcnJheXMgc3RyMSAmIHN0cjIgYXJlIGVxdWFsXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJzdHIxXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJzdHIyXCI+PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIHN0YXRpYyBTdHJpbmdzQXJyYXlzRXF1YWwoc3RyMTogc3RyaW5nW10sIHN0cjI6IHN0cmluZ1tdKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgcmVzdWx0OiBib29sZWFuO1xyXG4gICAgaWYgKHN0cjEgPT09IG51bGwgJiYgc3RyMiA9PT0gbnVsbCkge1xyXG4gICAgICByZXN1bHQgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGlmIChzdHIxID09PSBudWxsIHx8IHN0cjIgPT09IG51bGwpIHtcclxuICAgICAgICByZXN1bHQgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBpZiAoc3RyMS5sZW5ndGggIT09IHN0cjIubGVuZ3RoKSB7XHJcbiAgICAgICAgICByZXN1bHQgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBmb3IgKGxldCBpbmRleDogbnVtYmVyID0gMDsgaW5kZXggPCA8bnVtYmVyPnN0cjEubGVuZ3RoOyBpbmRleCA9IGluZGV4ICsgMSkge1xyXG4gICAgICAgICAgICBpZiAoKHN0cjFbaW5kZXhdICE9PSBzdHIyW2luZGV4XSkpIHtcclxuICAgICAgICAgICAgICByZXN1bHQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXN1bHQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gVGhlIGNvZGUgaXMgY29waWVkIGZyb20gdHNrX29wZW5fYm5kX3dpbGQgYW5kIFNlYXJjaEFuZFJlcGxhY2VXaWxkQ2hhcnNcclxuICAvLy8gVGhlIHJlZmFjdG9yaW5nIGlzIG5vdCBwZXJmb3JtZWQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XHJcbiAgLy8vIFRoZSBjb2RlIHJlcGxhY2VzIHNwZWNpYWwgY2hhcmFjaHRlcnMgOiogPyB3aXRoIHJlY2lldmVkIGZpbGxlclxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBzdGF0aWMgU2VhcmNoQW5kUmVwbGFjZVdpbGRDaGFycyhidWY6IHN0cmluZywgbGVuOiBudW1iZXIsIGZpbGxlcjogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGJ1ZiA9IE5TdHJpbmcuUGFkUmlnaHQoYnVmLCBsZW4pO1xyXG5cclxuICAgIGxldCBlc2NDaGFyOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBsZXQgc3RvcFNlYXJjaDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgbGV0IHRtcEJ1ZjogU3RyaW5nQnVpbGRlciA9IG5ldyBTdHJpbmdCdWlsZGVyKGxlbik7XHJcbiAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgbGVuOyBpID0gaSArIDEpIHtcclxuICAgICAgc3dpdGNoIChidWZbaV0pIHtcclxuICAgICAgICBjYXNlICgnXFxcXCcpOiB7XHJcbiAgICAgICAgICBsZXQgaXNOZXh0Q2hhcldpbGQ6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAgICAgICAgIC8vSWYgbmV4dCBjaGFyIGlzIG5vdCB3aWxkICwgdGhlbiBjb3B5ICdcXCcsIGlmIHRoaXMgaXMgZmlyc3QgY2hhci5cclxuICAgICAgICAgIGlmICgoaSArIDEgPCBsZW4pICYmIChidWZbaSArIDFdICE9ICcqJyAmJiBidWZbaSArIDFdICE9ICdcXFxcJykpXHJcbiAgICAgICAgICAgIGlzTmV4dENoYXJXaWxkID0gZmFsc2U7XHJcbiAgICAgICAgICBpZiAoZXNjQ2hhciB8fCAhaXNOZXh0Q2hhcldpbGQpXHJcbiAgICAgICAgICAgIHRtcEJ1Zi5BcHBlbmQoYnVmW2ldKTtcclxuICAgICAgICAgIGVzY0NoYXIgPSAhZXNjQ2hhcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICgnKicpOlxyXG4gICAgICAgICAgaWYgKGVzY0NoYXIpXHJcbiAgICAgICAgICAgIHRtcEJ1Zi5BcHBlbmQoYnVmW2ldKTtcclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0bXBCdWYuQXBwZW5kKGZpbGxlciwgbGVuIC0gdG1wQnVmLkxlbmd0aCk7XHJcbiAgICAgICAgICAgIHN0b3BTZWFyY2ggPSB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZXNjQ2hhciA9IGZhbHNlO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnPyc6XHJcbiAgICAgICAgICB0bXBCdWYuQXBwZW5kKGZpbGxlcik7XHJcbiAgICAgICAgICBlc2NDaGFyID0gZmFsc2U7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgdG1wQnVmLkFwcGVuZChidWZbaV0pO1xyXG4gICAgICAgICAgZXNjQ2hhciA9IGZhbHNlO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBsZXQgdGV4dDogc3RyaW5nID0gdG1wQnVmLlRvU3RyaW5nKCk7XHJcbiAgICByZXR1cm4gTlN0cmluZy5UcmltRW5kKE5TdHJpbmcuVHJpbUVuZCh0ZXh0LCBbJ1xcMCddKSk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIFJlbW92ZSB0aGUgdGFzayBwYXRoIGRlbGltaXRlciBmcm9tIHRoZSBlcnJvciBzdHJpbmcuXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInNvdXJjZVwiPnN0cmluZyB3aXRoIGRlbGltaXRlciA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gc3RyaW5nIGZvciBjb25zb2xlIGVycm9yIDwvcmV0dXJucz5cclxuICBzdGF0aWMgZ2V0Q29uc29sZUVyb3JTdHJpbmcoc291cmNlOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgbGV0IGNvbnNvbGVFcm9yU3RyaW5nOiBzdHJpbmcgPSBcIlwiO1xyXG5cclxuICAgIGlmICghaXNOdWxsT3JVbmRlZmluZWQoc291cmNlKSlcclxuICAgICAgY29uc29sZUVyb3JTdHJpbmcgPSB0aGlzLnNlYXJjaEFuZFJlcGxhY2Uoc291cmNlLCBUQVNLX1BBVEhfREVMSU1JVEVSLCBcIlwiKTtcclxuXHJcbiAgICByZXR1cm4gY29uc29sZUVyb3JTdHJpbmc7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIFJlbW92ZSB0aGUgdGFzayBwYXRoIGZyb20gdGhlIGVycm9yIHN0cmluZy5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwic291cmNlXCI+c3RyaW5nIHdpdGggZGVsaW1pdGVyIDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiBzdHJpbmcgZm9yIGNvbnNvbGUgZXJyb3IgPC9yZXR1cm5zPlxyXG4gIHN0YXRpYyBnZXRNc2dCb3hFcm9yU3RyaW5nKHNvdXJjZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGxldCB0b2tlbnM6IHN0cmluZyBbXTtcclxuICAgIGxldCBtc2dCb3hFcm9yU3RyaW5nOiBTdHJpbmdCdWlsZGVyID0gbmV3IFN0cmluZ0J1aWxkZXIoXCJcIik7XHJcblxyXG4gICAgaWYgKCFpc051bGxPclVuZGVmaW5lZChzb3VyY2UpKXtcclxuICAgICAgdG9rZW5zID0gdGhpcy50b2tlbml6ZShzb3VyY2UsIFRBU0tfUEFUSF9ERUxJTUlURVIpO1xyXG5cclxuICAgICAgZm9yIChsZXQgaTpudW1iZXIgPSAwOyBpIDwgdG9rZW5zLmxlbmd0aDsgaSsrKVxyXG4gICAgICB7XHJcbiAgICAgICAgbXNnQm94RXJvclN0cmluZy5BcHBlbmQodG9rZW5zW2ldKTtcclxuICAgICAgICBpKys7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG5cclxuICAgIHJldHVybiBtc2dCb3hFcm9yU3RyaW5nLnRvU3RyaW5nKCk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import { StringBuilder, Encoding, Hashtable, Stack, NChar, NNumber, NString, RefParam, DateTime, ISO_8859_1_Encoding, ApplicationException, Int32, Exception, List, Thread, Debug } from '@magic-xpa/mscorelib';
|
|
2
|
-
import { isNullOrUndefined } from 'util';
|
|
1
|
+
import { StringBuilder, Encoding, Hashtable, Stack, NChar, NNumber, NString, RefParam, isNullOrUndefined, DateTime, ISO_8859_1_Encoding, ApplicationException, Int32, Exception, List, Thread, Debug } from '@magic-xpa/mscorelib';
|
|
3
2
|
import { parseString } from 'xml2js';
|
|
4
3
|
|
|
5
4
|
class UtilStrByteMode {
|
|
@@ -5379,4 +5378,4 @@ class XmlParser {
|
|
|
5379
5378
|
XmlParser.endOfNameChar = [' ', '>'];
|
|
5380
5379
|
|
|
5381
5380
|
export { APGDisplayMode, APGFormSize, APGInvokedFrom, APGMode, APGOption, APGType, Access, AlignmentTypeHori, AlignmentTypeVert, AllowedDirectionType, Area, AutoFit, Axis, Base64, BindingLevel, BlobContent, BlockTypes, BorderType, BottomPositionInterval, BoxDir, BrkLevel, BrkScope, BrkType, CacheStrategy, CallComOption, CallOperationMode, CallOsShow, CallUDPType, CallUdpConvention, CallWsStyle, CallbackType, CharacterSet, CheckExist, CheckboxMainStyle, ChoiceControlStyle, ChoiceUtils, ColumnUpdateStyle, CompTypes, ComponentItemType, Constants, ControlStyle, CtrlButtonType, CtrlButtonTypeGui, CtrlHotspotType, CtrlImageStyle, CtrlLineDirection, CtrlLineType, CtrlOleDisplayType, CtrlOleStoreType, CtrlTextType, DBHCache, DBHRowIdentifier, DataTranslation, DataViewHeaderType, DataViewOperationType, DataViewOutputType, DatabaseDataType, DatabaseDefinitionType, DatabaseFilters, DatabaseOperations, DataviewType, DateTimeUtils, DateUtil, DbDelUpdMode, DbOpen, DbShare, DbhKeyDirection, DbhKeyIndexType, DbhKeyMode, DbhKeyRangeMode, DbhSegmentDirection, DefaultMsgDetails, DisplayTextType, DitAttribute, DitType, DriverDB, DspInterface, EndMode, EngineDirect, EnterAnimation, ErrStrategy, ErrorClassific, ExeState, ExecOn, ExitAnimation, ExportType, FieldComAlloc, FieldComType, FieldViewModelType, FldStorage, FldStyle, FlowDirection, FlwMode, ForceExit, FormDelimiter, FormExpandType, FormOperationType, FormPage, FrameLayoutTypes, GradientStyle, HTML_2_STR, HelpCommand, HelpType, HtmlAlignmentType, HttpStatusCode, ImageEffects, InitialMode, InternalInterface, ItemMasks, JSON_Utils, KeyMode, KeyboardReturnKeys, KeyboardTypes, LDir, LineDirection, LineManipulationType, ListboxSelectionMode, LnkEval_Cond, LnkMode, LoadedValues, LockingStrategy, LogType, Logger, Logger_LogLevels, Logger_MessageDirection, LogicHeaderAction, LogicHeaderType, LogicLevel, LogicOperationType, LogicUnit, MagicProperties, MediaAccess, MediaFormat, MediaOrientation, MediaType, MgControlType, MgModelType, Misc, ModelAttGuiFrame, ModelAttMerge, ModelAttRichClientFrameSet, ModelAttrBrowser, ModelAttrField, ModelAttrFramesetForm, ModelAttrGui0, ModelAttrGui1, ModelAttrHelp, ModelAttrRichClient, ModelAttrText, ModelClass, MsgInterface, NotifyCollectionChangedAction, NullArithmetic, OSEnvironment, OSType, OpenEditDialog, Opr, Order, OrientationLock, PICInterface, PaperSize, PaperSizePdfDisabled, PaperSizePdfEnabled, PositionUsage, PrgExecPlace, Priority, Queue, RaiseAt, Randomizer, RangeMode, RbAppearance, Recursion, RemarkType, RequestInfo, Resident, RowType, Rtf, Rtf_ACTN, Rtf_ErrorRtf, Rtf_IDEST, Rtf_IPFN, Rtf_IPROP, Rtf_KWD, Rtf_PROP, Rtf_PROPTYPE, Rtf_RDS, Rtf_RIS, Rtf_RtfChar, Rtf_SYMBOL, SEQ_2_HTML, SEQ_2_STR, ScrollBarThumbType, SelprgMode, SideType, SliderType, SourceContextType, SplitPrimaryDisplay, SplitWindowType, StartupMode, Storage, StorageAttribute, StorageAttributeCheck, StorageAttributeType, StrUtil, SubformType, SyncExecutionHelper, TabControlTabsWidth, TabbingCycleType, TabbingOrderType, TableBehaviour, TableType, TaskFlow, TransBegin, TransMode, TriggerType, TrueFalseValues, UndoRedoAction, UniqueTskSort, UpdateMode, UseSQLCursor, UtilDateJpn, UtilImeJpn, UtilStrByteMode, ValType, VeeDiffUpdate, VeeMode, VeePartOfDataview, VerifyButtons, VerifyDisplay, VerifyImage, VerifyMode, ViewRefreshMode, ViewSelectType, WinCptn, WinHtmlType, WinUom, WindowPosition, WindowType, XMLConstants, XmlParser, YesNoValues };
|
|
5382
|
-
//# sourceMappingURL=magic-xpa-utils.
|
|
5381
|
+
//# sourceMappingURL=magic-xpa-utils.mjs.map
|