@kato-lee/utilities 1.0.0
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/LICENSE +21 -0
- package/README.md +9 -0
- package/_either.d.ts +12 -0
- package/_group-by-key.d.ts +6 -0
- package/_lodash.d.ts +71 -0
- package/_path.d.ts +1 -0
- package/esm2022/_either.mjs +49 -0
- package/esm2022/_group-by-key.mjs +19 -0
- package/esm2022/_lodash.mjs +91 -0
- package/esm2022/_path.mjs +17 -0
- package/esm2022/index.mjs +8 -0
- package/esm2022/js/_clone-deep.mjs +619 -0
- package/esm2022/js/_order-by.mjs +948 -0
- package/esm2022/kato-lee-utilities.mjs +5 -0
- package/fesm2022/kato-lee-utilities.mjs +1749 -0
- package/fesm2022/kato-lee-utilities.mjs.map +1 -0
- package/index.d.ts +4 -0
- package/js/_clone-deep.d.ts +2 -0
- package/js/_clone-deep.js +826 -0
- package/js/_order-by.d.ts +2 -0
- package/js/_order-by.js +1287 -0
- package/js/index.js +2 -0
- package/package.json +18 -0
|
@@ -0,0 +1,619 @@
|
|
|
1
|
+
let LARGE_ARRAY_SIZE = 200;
|
|
2
|
+
let HASH_UNDEFINED = '__lodash_hash_undefined__';
|
|
3
|
+
let MAX_SAFE_INTEGER = 9007199254740991;
|
|
4
|
+
let argsTag = '[object Arguments]', arrayTag = '[object Array]', boolTag = '[object Boolean]', dateTag = '[object Date]', errorTag = '[object Error]', funcTag = '[object Function]', genTag = '[object GeneratorFunction]', mapTag = '[object Map]', numberTag = '[object Number]', objectTag = '[object Object]', promiseTag = '[object Promise]', regexpTag = '[object RegExp]', setTag = '[object Set]', stringTag = '[object String]', symbolTag = '[object Symbol]', weakMapTag = '[object WeakMap]';
|
|
5
|
+
let arrayBufferTag = '[object ArrayBuffer]', dataViewTag = '[object DataView]', float32Tag = '[object Float32Array]', float64Tag = '[object Float64Array]', int8Tag = '[object Int8Array]', int16Tag = '[object Int16Array]', int32Tag = '[object Int32Array]', uint8Tag = '[object Uint8Array]', uint8ClampedTag = '[object Uint8ClampedArray]', uint16Tag = '[object Uint16Array]', uint32Tag = '[object Uint32Array]';
|
|
6
|
+
let reRegExpChar = /[\\^$.*+?()[\]{}|]/g;
|
|
7
|
+
let reFlags = /\w*$/;
|
|
8
|
+
let reIsHostCtor = /^\[object .+?Constructor\]$/;
|
|
9
|
+
let reIsUint = /^(?:0|[1-9]\d*)$/;
|
|
10
|
+
let cloneableTags = {};
|
|
11
|
+
cloneableTags[argsTag] =
|
|
12
|
+
cloneableTags[arrayTag] =
|
|
13
|
+
cloneableTags[arrayBufferTag] =
|
|
14
|
+
cloneableTags[dataViewTag] =
|
|
15
|
+
cloneableTags[boolTag] =
|
|
16
|
+
cloneableTags[dateTag] =
|
|
17
|
+
cloneableTags[float32Tag] =
|
|
18
|
+
cloneableTags[float64Tag] =
|
|
19
|
+
cloneableTags[int8Tag] =
|
|
20
|
+
cloneableTags[int16Tag] =
|
|
21
|
+
cloneableTags[int32Tag] =
|
|
22
|
+
cloneableTags[mapTag] =
|
|
23
|
+
cloneableTags[numberTag] =
|
|
24
|
+
cloneableTags[objectTag] =
|
|
25
|
+
cloneableTags[regexpTag] =
|
|
26
|
+
cloneableTags[setTag] =
|
|
27
|
+
cloneableTags[stringTag] =
|
|
28
|
+
cloneableTags[symbolTag] =
|
|
29
|
+
cloneableTags[uint8Tag] =
|
|
30
|
+
cloneableTags[uint8ClampedTag] =
|
|
31
|
+
cloneableTags[uint16Tag] =
|
|
32
|
+
cloneableTags[uint32Tag] =
|
|
33
|
+
true;
|
|
34
|
+
cloneableTags[errorTag] = cloneableTags[funcTag] = cloneableTags[weakMapTag] = false;
|
|
35
|
+
let freeGlobal = typeof global == 'object' && global && global.Object === Object && global;
|
|
36
|
+
let freeSelf = typeof self == 'object' && self && self.Object === Object && self;
|
|
37
|
+
let root = freeGlobal || freeSelf || Function('return this')();
|
|
38
|
+
let freeExports = typeof exports == 'object' && exports && !nodeType && exports;
|
|
39
|
+
let freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;
|
|
40
|
+
let moduleExports = freeModule && freeModule.exports === freeExports;
|
|
41
|
+
function addMapEntry(map, pair) {
|
|
42
|
+
map.set(pair[0], pair[1]);
|
|
43
|
+
return map;
|
|
44
|
+
}
|
|
45
|
+
function addSetEntry(set, value) {
|
|
46
|
+
set.add(value);
|
|
47
|
+
return set;
|
|
48
|
+
}
|
|
49
|
+
function arrayEach(array, iteratee) {
|
|
50
|
+
let index = -1, length = array ? array.length : 0;
|
|
51
|
+
while (++index < length) {
|
|
52
|
+
if (iteratee(array[index], index, array) === false) {
|
|
53
|
+
break;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return array;
|
|
57
|
+
}
|
|
58
|
+
function arrayPush(array, values) {
|
|
59
|
+
let index = -1, length = values.length, offset = array.length;
|
|
60
|
+
while (++index < length) {
|
|
61
|
+
array[offset + index] = values[index];
|
|
62
|
+
}
|
|
63
|
+
return array;
|
|
64
|
+
}
|
|
65
|
+
function arrayReduce(array, iteratee, accumulator, initAccum) {
|
|
66
|
+
let index = -1, length = array ? array.length : 0;
|
|
67
|
+
if (initAccum && length) {
|
|
68
|
+
accumulator = array[++index];
|
|
69
|
+
}
|
|
70
|
+
while (++index < length) {
|
|
71
|
+
accumulator = iteratee(accumulator, array[index], index, array);
|
|
72
|
+
}
|
|
73
|
+
return accumulator;
|
|
74
|
+
}
|
|
75
|
+
function baseTimes(n, iteratee) {
|
|
76
|
+
let index = -1, result = Array(n);
|
|
77
|
+
while (++index < n) {
|
|
78
|
+
result[index] = iteratee(index);
|
|
79
|
+
}
|
|
80
|
+
return result;
|
|
81
|
+
}
|
|
82
|
+
function getValue(object, key) {
|
|
83
|
+
return object == null ? undefined : object[key];
|
|
84
|
+
}
|
|
85
|
+
function isHostObject(value) {
|
|
86
|
+
let result = false;
|
|
87
|
+
if (value != null && typeof value.toString != 'function') {
|
|
88
|
+
try {
|
|
89
|
+
result = !!(value + '');
|
|
90
|
+
}
|
|
91
|
+
catch (e) { }
|
|
92
|
+
}
|
|
93
|
+
return result;
|
|
94
|
+
}
|
|
95
|
+
function mapToArray(map) {
|
|
96
|
+
let index = -1, result = Array(map.size);
|
|
97
|
+
map.forEach(function (value, key) {
|
|
98
|
+
result[++index] = [key, value];
|
|
99
|
+
});
|
|
100
|
+
return result;
|
|
101
|
+
}
|
|
102
|
+
function overArg(func, transform) {
|
|
103
|
+
return function (arg) {
|
|
104
|
+
return func(transform(arg));
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
function setToArray(set) {
|
|
108
|
+
let index = -1, result = Array(set.size);
|
|
109
|
+
set.forEach(function (value) {
|
|
110
|
+
result[++index] = value;
|
|
111
|
+
});
|
|
112
|
+
return result;
|
|
113
|
+
}
|
|
114
|
+
let arrayProto = Array.prototype, funcProto = Function.prototype, objectProto = Object.prototype;
|
|
115
|
+
let coreJsData = root['__core-js_shared__'];
|
|
116
|
+
let maskSrcKey = (function () {
|
|
117
|
+
let uid = /[^.]+$/.exec((coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO) || '');
|
|
118
|
+
return uid ? 'Symbol(src)_1.' + uid : '';
|
|
119
|
+
})();
|
|
120
|
+
let funcToString = funcProto.toString;
|
|
121
|
+
let hasOwnProperty = objectProto.hasOwnProperty;
|
|
122
|
+
let objectToString = objectProto.toString;
|
|
123
|
+
let reIsNative = RegExp('^' +
|
|
124
|
+
funcToString
|
|
125
|
+
.call(hasOwnProperty)
|
|
126
|
+
.replace(reRegExpChar, '\\$&')
|
|
127
|
+
.replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') +
|
|
128
|
+
'$');
|
|
129
|
+
let Buffer = moduleExports ? root.Buffer : undefined, Symbol = root.Symbol, Uint8Array = root.Uint8Array, getPrototype = overArg(Object.getPrototypeOf, Object), objectCreate = Object.create, propertyIsEnumerable = objectProto.propertyIsEnumerable, splice = arrayProto.splice;
|
|
130
|
+
let nativeGetSymbols = Object.getOwnPropertySymbols, nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined, nativeKeys = overArg(Object.keys, Object);
|
|
131
|
+
let DataView = getNative(root, 'DataView'), Map = getNative(root, 'Map'), Promise = getNative(root, 'Promise'), Set = getNative(root, 'Set'), WeakMap = getNative(root, 'WeakMap'), nativeCreate = getNative(Object, 'create');
|
|
132
|
+
let dataViewCtorString = toSource(DataView), mapCtorString = toSource(Map), promiseCtorString = toSource(Promise), setCtorString = toSource(Set), weakMapCtorString = toSource(WeakMap);
|
|
133
|
+
let symbolProto = Symbol ? Symbol.prototype : undefined, symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;
|
|
134
|
+
function Hash(entries) {
|
|
135
|
+
let index = -1, length = entries ? entries.length : 0;
|
|
136
|
+
this.clear();
|
|
137
|
+
while (++index < length) {
|
|
138
|
+
let entry = entries[index];
|
|
139
|
+
this.set(entry[0], entry[1]);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
function hashClear() {
|
|
143
|
+
this.__data__ = nativeCreate ? nativeCreate(null) : {};
|
|
144
|
+
}
|
|
145
|
+
function hashDelete(key) {
|
|
146
|
+
return this.has(key) && delete this.__data__[key];
|
|
147
|
+
}
|
|
148
|
+
function hashGet(key) {
|
|
149
|
+
let data = this.__data__;
|
|
150
|
+
if (nativeCreate) {
|
|
151
|
+
let result = data[key];
|
|
152
|
+
return result === HASH_UNDEFINED ? undefined : result;
|
|
153
|
+
}
|
|
154
|
+
return hasOwnProperty.call(data, key) ? data[key] : undefined;
|
|
155
|
+
}
|
|
156
|
+
function hashHas(key) {
|
|
157
|
+
let data = this.__data__;
|
|
158
|
+
return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key);
|
|
159
|
+
}
|
|
160
|
+
function hashSet(key, value) {
|
|
161
|
+
let data = this.__data__;
|
|
162
|
+
data[key] = nativeCreate && value === undefined ? HASH_UNDEFINED : value;
|
|
163
|
+
return this;
|
|
164
|
+
}
|
|
165
|
+
Hash.prototype.clear = hashClear;
|
|
166
|
+
Hash.prototype['delete'] = hashDelete;
|
|
167
|
+
Hash.prototype.get = hashGet;
|
|
168
|
+
Hash.prototype.has = hashHas;
|
|
169
|
+
Hash.prototype.set = hashSet;
|
|
170
|
+
function ListCache(entries) {
|
|
171
|
+
let index = -1, length = entries ? entries.length : 0;
|
|
172
|
+
this.clear();
|
|
173
|
+
while (++index < length) {
|
|
174
|
+
let entry = entries[index];
|
|
175
|
+
this.set(entry[0], entry[1]);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
function listCacheClear() {
|
|
179
|
+
this.__data__ = [];
|
|
180
|
+
}
|
|
181
|
+
function listCacheDelete(key) {
|
|
182
|
+
let data = this.__data__, index = assocIndexOf(data, key);
|
|
183
|
+
if (index < 0) {
|
|
184
|
+
return false;
|
|
185
|
+
}
|
|
186
|
+
let lastIndex = data.length - 1;
|
|
187
|
+
if (index == lastIndex) {
|
|
188
|
+
data.pop();
|
|
189
|
+
}
|
|
190
|
+
else {
|
|
191
|
+
splice.call(data, index, 1);
|
|
192
|
+
}
|
|
193
|
+
return true;
|
|
194
|
+
}
|
|
195
|
+
function listCacheGet(key) {
|
|
196
|
+
let data = this.__data__, index = assocIndexOf(data, key);
|
|
197
|
+
return index < 0 ? undefined : data[index][1];
|
|
198
|
+
}
|
|
199
|
+
function listCacheHas(key) {
|
|
200
|
+
return assocIndexOf(this.__data__, key) > -1;
|
|
201
|
+
}
|
|
202
|
+
function listCacheSet(key, value) {
|
|
203
|
+
let data = this.__data__, index = assocIndexOf(data, key);
|
|
204
|
+
if (index < 0) {
|
|
205
|
+
data.push([key, value]);
|
|
206
|
+
}
|
|
207
|
+
else {
|
|
208
|
+
data[index][1] = value;
|
|
209
|
+
}
|
|
210
|
+
return this;
|
|
211
|
+
}
|
|
212
|
+
ListCache.prototype.clear = listCacheClear;
|
|
213
|
+
ListCache.prototype['delete'] = listCacheDelete;
|
|
214
|
+
ListCache.prototype.get = listCacheGet;
|
|
215
|
+
ListCache.prototype.has = listCacheHas;
|
|
216
|
+
ListCache.prototype.set = listCacheSet;
|
|
217
|
+
function MapCache(entries) {
|
|
218
|
+
let index = -1, length = entries ? entries.length : 0;
|
|
219
|
+
this.clear();
|
|
220
|
+
while (++index < length) {
|
|
221
|
+
let entry = entries[index];
|
|
222
|
+
this.set(entry[0], entry[1]);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
function mapCacheClear() {
|
|
226
|
+
this.__data__ = {
|
|
227
|
+
hash: new Hash(),
|
|
228
|
+
map: new (Map || ListCache)(),
|
|
229
|
+
string: new Hash(),
|
|
230
|
+
};
|
|
231
|
+
}
|
|
232
|
+
function mapCacheDelete(key) {
|
|
233
|
+
return getMapData(this, key)['delete'](key);
|
|
234
|
+
}
|
|
235
|
+
function mapCacheGet(key) {
|
|
236
|
+
return getMapData(this, key).get(key);
|
|
237
|
+
}
|
|
238
|
+
function mapCacheHas(key) {
|
|
239
|
+
return getMapData(this, key).has(key);
|
|
240
|
+
}
|
|
241
|
+
function mapCacheSet(key, value) {
|
|
242
|
+
getMapData(this, key).set(key, value);
|
|
243
|
+
return this;
|
|
244
|
+
}
|
|
245
|
+
MapCache.prototype.clear = mapCacheClear;
|
|
246
|
+
MapCache.prototype['delete'] = mapCacheDelete;
|
|
247
|
+
MapCache.prototype.get = mapCacheGet;
|
|
248
|
+
MapCache.prototype.has = mapCacheHas;
|
|
249
|
+
MapCache.prototype.set = mapCacheSet;
|
|
250
|
+
function Stack(entries) {
|
|
251
|
+
this.__data__ = new ListCache(entries);
|
|
252
|
+
}
|
|
253
|
+
function stackClear() {
|
|
254
|
+
this.__data__ = new ListCache();
|
|
255
|
+
}
|
|
256
|
+
function stackDelete(key) {
|
|
257
|
+
return this.__data__['delete'](key);
|
|
258
|
+
}
|
|
259
|
+
function stackGet(key) {
|
|
260
|
+
return this.__data__.get(key);
|
|
261
|
+
}
|
|
262
|
+
function stackHas(key) {
|
|
263
|
+
return this.__data__.has(key);
|
|
264
|
+
}
|
|
265
|
+
function stackSet(key, value) {
|
|
266
|
+
let cache = this.__data__;
|
|
267
|
+
if (cache instanceof ListCache) {
|
|
268
|
+
let pairs = cache.__data__;
|
|
269
|
+
if (!Map || pairs.length < LARGE_ARRAY_SIZE - 1) {
|
|
270
|
+
pairs.push([key, value]);
|
|
271
|
+
return this;
|
|
272
|
+
}
|
|
273
|
+
cache = this.__data__ = new MapCache(pairs);
|
|
274
|
+
}
|
|
275
|
+
cache.set(key, value);
|
|
276
|
+
return this;
|
|
277
|
+
}
|
|
278
|
+
Stack.prototype.clear = stackClear;
|
|
279
|
+
Stack.prototype['delete'] = stackDelete;
|
|
280
|
+
Stack.prototype.get = stackGet;
|
|
281
|
+
Stack.prototype.has = stackHas;
|
|
282
|
+
Stack.prototype.set = stackSet;
|
|
283
|
+
function arrayLikeKeys(value, inherited) {
|
|
284
|
+
let result = isArray(value) || isArguments(value) ? baseTimes(value.length, String) : [];
|
|
285
|
+
let length = result.length, skipIndexes = !!length;
|
|
286
|
+
for (let key in value) {
|
|
287
|
+
if ((inherited || hasOwnProperty.call(value, key)) &&
|
|
288
|
+
!(skipIndexes && (key == 'length' || isIndex(key, length)))) {
|
|
289
|
+
result.push(key);
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
return result;
|
|
293
|
+
}
|
|
294
|
+
function assignValue(object, key, value) {
|
|
295
|
+
let objValue = object[key];
|
|
296
|
+
if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||
|
|
297
|
+
(value === undefined && !(key in object))) {
|
|
298
|
+
object[key] = value;
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
function assocIndexOf(array, key) {
|
|
302
|
+
let length = array.length;
|
|
303
|
+
while (length--) {
|
|
304
|
+
if (eq(array[length][0], key)) {
|
|
305
|
+
return length;
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
return -1;
|
|
309
|
+
}
|
|
310
|
+
function baseAssign(object, source) {
|
|
311
|
+
return object && copyObject(source, keys(source), object);
|
|
312
|
+
}
|
|
313
|
+
function baseClone(value, isDeep, isFull, customizer, key, object, stack) {
|
|
314
|
+
let result;
|
|
315
|
+
if (customizer) {
|
|
316
|
+
result = object ? customizer(value, key, object, stack) : customizer(value);
|
|
317
|
+
}
|
|
318
|
+
if (result !== undefined) {
|
|
319
|
+
return result;
|
|
320
|
+
}
|
|
321
|
+
if (!isObject(value)) {
|
|
322
|
+
return value;
|
|
323
|
+
}
|
|
324
|
+
let isArr = isArray(value);
|
|
325
|
+
if (isArr) {
|
|
326
|
+
result = initCloneArray(value);
|
|
327
|
+
if (!isDeep) {
|
|
328
|
+
return copyArray(value, result);
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
else {
|
|
332
|
+
let tag = getTag(value), isFunc = tag == funcTag || tag == genTag;
|
|
333
|
+
if (isBuffer(value)) {
|
|
334
|
+
return cloneBuffer(value, isDeep);
|
|
335
|
+
}
|
|
336
|
+
if (tag == objectTag || tag == argsTag || (isFunc && !object)) {
|
|
337
|
+
if (isHostObject(value)) {
|
|
338
|
+
return object ? value : {};
|
|
339
|
+
}
|
|
340
|
+
result = initCloneObject(isFunc ? {} : value);
|
|
341
|
+
if (!isDeep) {
|
|
342
|
+
return copySymbols(value, baseAssign(result, value));
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
else {
|
|
346
|
+
if (!cloneableTags[tag]) {
|
|
347
|
+
return object ? value : {};
|
|
348
|
+
}
|
|
349
|
+
result = initCloneByTag(value, tag, baseClone, isDeep);
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
stack || (stack = new Stack());
|
|
353
|
+
let stacked = stack.get(value);
|
|
354
|
+
if (stacked) {
|
|
355
|
+
return stacked;
|
|
356
|
+
}
|
|
357
|
+
stack.set(value, result);
|
|
358
|
+
if (!isArr) {
|
|
359
|
+
var cloneDeepProps = isFull ? getAllKeys(value) : keys(value);
|
|
360
|
+
}
|
|
361
|
+
arrayEach(cloneDeepProps || value, function (subValue, key) {
|
|
362
|
+
if (cloneDeepProps) {
|
|
363
|
+
key = subValue;
|
|
364
|
+
subValue = value[key];
|
|
365
|
+
}
|
|
366
|
+
assignValue(result, key, baseClone(subValue, isDeep, isFull, customizer, key, value, stack));
|
|
367
|
+
});
|
|
368
|
+
return result;
|
|
369
|
+
}
|
|
370
|
+
function baseCreate(proto) {
|
|
371
|
+
return isObject(proto) ? objectCreate(proto) : {};
|
|
372
|
+
}
|
|
373
|
+
function baseGetAllKeys(object, keysFunc, symbolsFunc) {
|
|
374
|
+
let result = keysFunc(object);
|
|
375
|
+
return isArray(object) ? result : arrayPush(result, symbolsFunc(object));
|
|
376
|
+
}
|
|
377
|
+
function baseGetTag(value) {
|
|
378
|
+
return objectToString.call(value);
|
|
379
|
+
}
|
|
380
|
+
function baseIsNative(value) {
|
|
381
|
+
if (!isObject(value) || isMasked(value)) {
|
|
382
|
+
return false;
|
|
383
|
+
}
|
|
384
|
+
let pattern = isFunction(value) || isHostObject(value) ? reIsNative : reIsHostCtor;
|
|
385
|
+
return pattern.test(toSource(value));
|
|
386
|
+
}
|
|
387
|
+
function baseKeys(object) {
|
|
388
|
+
if (!isPrototype(object)) {
|
|
389
|
+
return nativeKeys(object);
|
|
390
|
+
}
|
|
391
|
+
let result = [];
|
|
392
|
+
for (let key in Object(object)) {
|
|
393
|
+
if (hasOwnProperty.call(object, key) && key != 'constructor') {
|
|
394
|
+
result.push(key);
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
return result;
|
|
398
|
+
}
|
|
399
|
+
function cloneBuffer(buffer, isDeep) {
|
|
400
|
+
if (isDeep) {
|
|
401
|
+
return buffer.slice();
|
|
402
|
+
}
|
|
403
|
+
let result = new buffer.constructor(buffer.length);
|
|
404
|
+
buffer.copy(result);
|
|
405
|
+
return result;
|
|
406
|
+
}
|
|
407
|
+
function cloneArrayBuffer(arrayBuffer) {
|
|
408
|
+
let result = new arrayBuffer.constructor(arrayBuffer.byteLength);
|
|
409
|
+
new Uint8Array(result).set(new Uint8Array(arrayBuffer));
|
|
410
|
+
return result;
|
|
411
|
+
}
|
|
412
|
+
function cloneDataView(dataView, isDeep) {
|
|
413
|
+
let buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;
|
|
414
|
+
return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);
|
|
415
|
+
}
|
|
416
|
+
function cloneMap(map, isDeep, cloneFunc) {
|
|
417
|
+
let array = isDeep ? cloneFunc(mapToArray(map), true) : mapToArray(map);
|
|
418
|
+
return arrayReduce(array, addMapEntry, new map.constructor());
|
|
419
|
+
}
|
|
420
|
+
function cloneRegExp(regexp) {
|
|
421
|
+
let result = new regexp.constructor(regexp.source, reFlags.exec(regexp));
|
|
422
|
+
result.lastIndex = regexp.lastIndex;
|
|
423
|
+
return result;
|
|
424
|
+
}
|
|
425
|
+
function cloneSet(set, isDeep, cloneFunc) {
|
|
426
|
+
let array = isDeep ? cloneFunc(setToArray(set), true) : setToArray(set);
|
|
427
|
+
return arrayReduce(array, addSetEntry, new set.constructor());
|
|
428
|
+
}
|
|
429
|
+
function cloneSymbol(symbol) {
|
|
430
|
+
return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};
|
|
431
|
+
}
|
|
432
|
+
function cloneTypedArray(typedArray, isDeep) {
|
|
433
|
+
let buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;
|
|
434
|
+
return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);
|
|
435
|
+
}
|
|
436
|
+
function copyArray(source, array) {
|
|
437
|
+
let index = -1, length = source.length;
|
|
438
|
+
array || (array = Array(length));
|
|
439
|
+
while (++index < length) {
|
|
440
|
+
array[index] = source[index];
|
|
441
|
+
}
|
|
442
|
+
return array;
|
|
443
|
+
}
|
|
444
|
+
function copyObject(source, cloneDeepProps, object, customizer) {
|
|
445
|
+
object || (object = {});
|
|
446
|
+
let index = -1, length = cloneDeepProps.length;
|
|
447
|
+
while (++index < length) {
|
|
448
|
+
let key = cloneDeepProps[index];
|
|
449
|
+
let newValue = customizer
|
|
450
|
+
? customizer(object[key], source[key], key, object, source)
|
|
451
|
+
: undefined;
|
|
452
|
+
assignValue(object, key, newValue === undefined ? source[key] : newValue);
|
|
453
|
+
}
|
|
454
|
+
return object;
|
|
455
|
+
}
|
|
456
|
+
function copySymbols(source, object) {
|
|
457
|
+
return copyObject(source, getSymbols(source), object);
|
|
458
|
+
}
|
|
459
|
+
function getAllKeys(object) {
|
|
460
|
+
return baseGetAllKeys(object, keys, getSymbols);
|
|
461
|
+
}
|
|
462
|
+
function getMapData(map, key) {
|
|
463
|
+
let data = map.__data__;
|
|
464
|
+
return isKeyable(key) ? data[typeof key == 'string' ? 'string' : 'hash'] : data.map;
|
|
465
|
+
}
|
|
466
|
+
function getNative(object, key) {
|
|
467
|
+
let value = getValue(object, key);
|
|
468
|
+
return baseIsNative(value) ? value : undefined;
|
|
469
|
+
}
|
|
470
|
+
let getSymbols = nativeGetSymbols ? overArg(nativeGetSymbols, Object) : stubArray;
|
|
471
|
+
let getTag = baseGetTag;
|
|
472
|
+
if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||
|
|
473
|
+
(Map && getTag(new Map()) != mapTag) ||
|
|
474
|
+
(Promise && getTag(Promise.resolve()) != promiseTag) ||
|
|
475
|
+
(Set && getTag(new Set()) != setTag) ||
|
|
476
|
+
(WeakMap && getTag(new WeakMap()) != weakMapTag)) {
|
|
477
|
+
getTag = function (value) {
|
|
478
|
+
let result = objectToString.call(value), Ctor = result == objectTag ? value.constructor : undefined, ctorString = Ctor ? toSource(Ctor) : undefined;
|
|
479
|
+
if (ctorString) {
|
|
480
|
+
switch (ctorString) {
|
|
481
|
+
case dataViewCtorString:
|
|
482
|
+
return dataViewTag;
|
|
483
|
+
case mapCtorString:
|
|
484
|
+
return mapTag;
|
|
485
|
+
case promiseCtorString:
|
|
486
|
+
return promiseTag;
|
|
487
|
+
case setCtorString:
|
|
488
|
+
return setTag;
|
|
489
|
+
case weakMapCtorString:
|
|
490
|
+
return weakMapTag;
|
|
491
|
+
}
|
|
492
|
+
}
|
|
493
|
+
return result;
|
|
494
|
+
};
|
|
495
|
+
}
|
|
496
|
+
function initCloneArray(array) {
|
|
497
|
+
let length = array.length, result = array.constructor(length);
|
|
498
|
+
if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {
|
|
499
|
+
result.index = array.index;
|
|
500
|
+
result.input = array.input;
|
|
501
|
+
}
|
|
502
|
+
return result;
|
|
503
|
+
}
|
|
504
|
+
function initCloneObject(object) {
|
|
505
|
+
return typeof object.constructor == 'function' && !isPrototype(object)
|
|
506
|
+
? baseCreate(getPrototype(object))
|
|
507
|
+
: {};
|
|
508
|
+
}
|
|
509
|
+
function initCloneByTag(object, tag, cloneFunc, isDeep) {
|
|
510
|
+
let Ctor = object.constructor;
|
|
511
|
+
switch (tag) {
|
|
512
|
+
case arrayBufferTag:
|
|
513
|
+
return cloneArrayBuffer(object);
|
|
514
|
+
case boolTag:
|
|
515
|
+
case dateTag:
|
|
516
|
+
return new Ctor(+object);
|
|
517
|
+
case dataViewTag:
|
|
518
|
+
return cloneDataView(object, isDeep);
|
|
519
|
+
case float32Tag:
|
|
520
|
+
case float64Tag:
|
|
521
|
+
case int8Tag:
|
|
522
|
+
case int16Tag:
|
|
523
|
+
case int32Tag:
|
|
524
|
+
case uint8Tag:
|
|
525
|
+
case uint8ClampedTag:
|
|
526
|
+
case uint16Tag:
|
|
527
|
+
case uint32Tag:
|
|
528
|
+
return cloneTypedArray(object, isDeep);
|
|
529
|
+
case mapTag:
|
|
530
|
+
return cloneMap(object, isDeep, cloneFunc);
|
|
531
|
+
case numberTag:
|
|
532
|
+
case stringTag:
|
|
533
|
+
return new Ctor(object);
|
|
534
|
+
case regexpTag:
|
|
535
|
+
return cloneRegExp(object);
|
|
536
|
+
case setTag:
|
|
537
|
+
return cloneSet(object, isDeep, cloneFunc);
|
|
538
|
+
case symbolTag:
|
|
539
|
+
return cloneSymbol(object);
|
|
540
|
+
}
|
|
541
|
+
}
|
|
542
|
+
function isIndex(value, length) {
|
|
543
|
+
length = length == null ? MAX_SAFE_INTEGER : length;
|
|
544
|
+
return (!!length &&
|
|
545
|
+
(typeof value == 'number' || reIsUint.test(value)) &&
|
|
546
|
+
value > -1 &&
|
|
547
|
+
value % 1 == 0 &&
|
|
548
|
+
value < length);
|
|
549
|
+
}
|
|
550
|
+
function isKeyable(value) {
|
|
551
|
+
let type = typeof value;
|
|
552
|
+
return type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean'
|
|
553
|
+
? value !== '__proto__'
|
|
554
|
+
: value === null;
|
|
555
|
+
}
|
|
556
|
+
function isMasked(func) {
|
|
557
|
+
return !!maskSrcKey && maskSrcKey in func;
|
|
558
|
+
}
|
|
559
|
+
function isPrototype(value) {
|
|
560
|
+
let Ctor = value && value.constructor, proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;
|
|
561
|
+
return value === proto;
|
|
562
|
+
}
|
|
563
|
+
function toSource(func) {
|
|
564
|
+
if (func != null) {
|
|
565
|
+
try {
|
|
566
|
+
return funcToString.call(func);
|
|
567
|
+
}
|
|
568
|
+
catch (e) { }
|
|
569
|
+
try {
|
|
570
|
+
return func + '';
|
|
571
|
+
}
|
|
572
|
+
catch (e) { }
|
|
573
|
+
}
|
|
574
|
+
return '';
|
|
575
|
+
}
|
|
576
|
+
function zxhiddenCustomCloneDeepByJeremyAshkenas(value) {
|
|
577
|
+
return baseClone(value, true, true);
|
|
578
|
+
}
|
|
579
|
+
function eq(value, other) {
|
|
580
|
+
return value === other || (value !== value && other !== other);
|
|
581
|
+
}
|
|
582
|
+
function isArguments(value) {
|
|
583
|
+
return (isArrayLikeObject(value) &&
|
|
584
|
+
hasOwnProperty.call(value, 'callee') &&
|
|
585
|
+
(!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag));
|
|
586
|
+
}
|
|
587
|
+
let isArray = Array.isArray;
|
|
588
|
+
function isArrayLike(value) {
|
|
589
|
+
return value != null && isLength(value.length) && !isFunction(value);
|
|
590
|
+
}
|
|
591
|
+
function isArrayLikeObject(value) {
|
|
592
|
+
return isObjectLike(value) && isArrayLike(value);
|
|
593
|
+
}
|
|
594
|
+
let isBuffer = nativeIsBuffer || stubFalse;
|
|
595
|
+
function isFunction(value) {
|
|
596
|
+
let tag = isObject(value) ? objectToString.call(value) : '';
|
|
597
|
+
return tag == funcTag || tag == genTag;
|
|
598
|
+
}
|
|
599
|
+
function isLength(value) {
|
|
600
|
+
return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;
|
|
601
|
+
}
|
|
602
|
+
function isObject(value) {
|
|
603
|
+
let type = typeof value;
|
|
604
|
+
return !!value && (type == 'object' || type == 'function');
|
|
605
|
+
}
|
|
606
|
+
function isObjectLike(value) {
|
|
607
|
+
return !!value && typeof value == 'object';
|
|
608
|
+
}
|
|
609
|
+
function keys(object) {
|
|
610
|
+
return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);
|
|
611
|
+
}
|
|
612
|
+
function stubArray() {
|
|
613
|
+
return [];
|
|
614
|
+
}
|
|
615
|
+
function stubFalse() {
|
|
616
|
+
return false;
|
|
617
|
+
}
|
|
618
|
+
export default zxhiddenCustomCloneDeepByJeremyAshkenas;
|
|
619
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiX2Nsb25lLWRlZXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJyYXJpZXMvdXRpbGl0aWVzL2pzL19jbG9uZS1kZWVwLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLElBQUksZ0JBQWdCLEdBQUcsR0FBRyxDQUFDO0FBQzNCLElBQUksY0FBYyxHQUFHLDJCQUEyQixDQUFDO0FBQ2pELElBQUksZ0JBQWdCLEdBQUcsZ0JBQWdCLENBQUM7QUFFeEMsSUFBSSxPQUFPLEdBQUcsb0JBQW9CLEVBQ2hDLFFBQVEsR0FBRyxnQkFBZ0IsRUFDM0IsT0FBTyxHQUFHLGtCQUFrQixFQUM1QixPQUFPLEdBQUcsZUFBZSxFQUN6QixRQUFRLEdBQUcsZ0JBQWdCLEVBQzNCLE9BQU8sR0FBRyxtQkFBbUIsRUFDN0IsTUFBTSxHQUFHLDRCQUE0QixFQUNyQyxNQUFNLEdBQUcsY0FBYyxFQUN2QixTQUFTLEdBQUcsaUJBQWlCLEVBQzdCLFNBQVMsR0FBRyxpQkFBaUIsRUFDN0IsVUFBVSxHQUFHLGtCQUFrQixFQUMvQixTQUFTLEdBQUcsaUJBQWlCLEVBQzdCLE1BQU0sR0FBRyxjQUFjLEVBQ3ZCLFNBQVMsR0FBRyxpQkFBaUIsRUFDN0IsU0FBUyxHQUFHLGlCQUFpQixFQUM3QixVQUFVLEdBQUcsa0JBQWtCLENBQUM7QUFFbEMsSUFBSSxjQUFjLEdBQUcsc0JBQXNCLEVBQ3pDLFdBQVcsR0FBRyxtQkFBbUIsRUFDakMsVUFBVSxHQUFHLHVCQUF1QixFQUNwQyxVQUFVLEdBQUcsdUJBQXVCLEVBQ3BDLE9BQU8sR0FBRyxvQkFBb0IsRUFDOUIsUUFBUSxHQUFHLHFCQUFxQixFQUNoQyxRQUFRLEdBQUcscUJBQXFCLEVBQ2hDLFFBQVEsR0FBRyxxQkFBcUIsRUFDaEMsZUFBZSxHQUFHLDRCQUE0QixFQUM5QyxTQUFTLEdBQUcsc0JBQXNCLEVBQ2xDLFNBQVMsR0FBRyxzQkFBc0IsQ0FBQztBQUVyQyxJQUFJLFlBQVksR0FBRyxxQkFB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QUFDO0FBRUQsU0FBUyxRQUFRLENBQUMsS0FBSztJQUNyQixJQUFJLElBQUksR0FBRyxPQUFPLEtBQUssQ0FBQztJQUN4QixPQUFPLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLElBQUksUUFBUSxJQUFJLElBQUksSUFBSSxVQUFVLENBQUMsQ0FBQztBQUM3RCxDQUFDO0FBRUQsU0FBUyxZQUFZLENBQUMsS0FBSztJQUN6QixPQUFPLENBQUMsQ0FBQyxLQUFLLElBQUksT0FBTyxLQUFLLElBQUksUUFBUSxDQUFDO0FBQzdDLENBQUM7QUFFRCxTQUFTLElBQUksQ0FBQyxNQUFNO0lBQ2xCLE9BQU8sV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN4RSxDQUFDO0FBRUQsU0FBUyxTQUFTO0lBQ2hCLE9BQU8sRUFBRSxDQUFDO0FBQ1osQ0FBQztBQUVELFNBQVMsU0FBUztJQUNoQixPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFFRCxlQUFlLHVDQUF1QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsibGV0IExBUkdFX0FSUkFZX1NJWkUgPSAyMDA7XHJcbmxldCBIQVNIX1VOREVGSU5FRCA9ICdfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fJztcclxubGV0IE1BWF9TQUZFX0lOVEVHRVIgPSA5MDA3MTk5MjU0NzQwOTkxO1xyXG5cclxubGV0IGFyZ3NUYWcgPSAnW29iamVjdCBBcmd1bWVudHNdJyxcclxuICBhcnJheVRhZyA9ICdbb2JqZWN0IEFycmF5XScsXHJcbiAgYm9vbFRhZyA9ICdbb2JqZWN0IEJvb2xlYW5dJyxcclxuICBkYXRlVGFnID0gJ1tvYmplY3QgRGF0ZV0nLFxyXG4gIGVycm9yVGFnID0gJ1tvYmplY3QgRXJyb3JdJyxcclxuICBmdW5jVGFnID0gJ1tvYmplY3QgRnVuY3Rpb25dJyxcclxuICBnZW5UYWcgPSAnW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0nLFxyXG4gIG1hcFRhZyA9ICdbb2JqZWN0IE1hcF0nLFxyXG4gIG51bWJlclRhZyA9ICdbb2JqZWN0IE51bWJlcl0nLFxyXG4gIG9iamVjdFRhZyA9ICdbb2JqZWN0IE9iamVjdF0nLFxyXG4gIHByb21pc2VUYWcgPSAnW29iamVjdCBQcm9taXNlXScsXHJcbiAgcmVnZXhwVGFnID0gJ1tvYmplY3QgUmVnRXhwXScsXHJcbiAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XScsXHJcbiAgc3RyaW5nVGFnID0gJ1tvYmplY3QgU3RyaW5nXScsXHJcbiAgc3ltYm9sVGFnID0gJ1tvYmplY3QgU3ltYm9sXScsXHJcbiAgd2Vha01hcFRhZyA9ICdbb2JqZWN0IFdlYWtNYXBdJztcclxuXHJcbmxldCBhcnJheUJ1ZmZlclRhZyA9ICdbb2JqZWN0IEFycmF5QnVmZmVyXScsXHJcbiAgZGF0YVZpZXdUYWcgPSAnW29iamVjdCBEYXRhVmlld10nLFxyXG4gIGZsb2F0MzJUYWcgPSAnW29iamVjdCBGbG9hdDMyQXJyYXldJyxcclxuICBmbG9hdDY0VGFnID0gJ1tvYmplY3QgRmxvYXQ2NEFycmF5XScsXHJcbiAgaW50OFRhZyA9ICdbb2JqZWN0IEludDhBcnJheV0nLFxyXG4gIGludDE2VGFnID0gJ1tvYmplY3QgSW50MTZBcnJheV0nLFxyXG4gIGludDMyVGFnID0gJ1tvYmplY3QgSW50MzJBcnJheV0nLFxyXG4gIHVpbnQ4VGFnID0gJ1tvYmplY3QgVWludDhBcnJheV0nLFxyXG4gIHVpbnQ4Q2xhbXBlZFRhZyA9ICdbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XScsXHJcbiAgdWludDE2VGFnID0gJ1tvYmplY3QgVWludDE2QXJyYXldJyxcclxuICB1aW50MzJUYWcgPSAnW29iamVjdCBVaW50MzJBcnJheV0nO1xyXG5cclxubGV0IHJlUmVnRXhwQ2hhciA9IC9bXFxcXF4kLiorPygpW1xcXXt9fF0vZztcclxubGV0IHJlRmxhZ3MgPSAvXFx3KiQvO1xyXG5sZXQgcmVJc0hvc3RDdG9yID0gL15cXFtvYmplY3QgLis/Q29uc3RydWN0b3JcXF0kLztcclxubGV0IHJlSXNVaW50ID0gL14oPzowfFsxLTldXFxkKikkLztcclxuXHJcbmxldCBjbG9uZWFibGVUYWdzID0ge307XHJcbmNsb25lYWJsZVRhZ3NbYXJnc1RhZ10gPVxyXG4gIGNsb25lYWJsZVRhZ3NbYXJyYXlUYWddID1cclxuICBjbG9uZWFibGVUYWdzW2FycmF5QnVmZmVyVGFnXSA9XHJcbiAgY2xvbmVhYmxlVGFnc1tkYXRhVmlld1RhZ10gPVxyXG4gIGNsb25lYWJsZVRhZ3NbYm9vbFRhZ10gPVxyXG4gIGNsb25lYWJsZVRhZ3NbZGF0ZVRhZ10gPVxyXG4gIGNsb25lYWJsZVRhZ3NbZmxvYXQzMlRhZ10gPVxyXG4gIGNsb25lYWJsZVRhZ3NbZmxvYXQ2NFRhZ10gPVxyXG4gIGNsb25lYWJsZVRhZ3NbaW50OFRhZ10gPVxyXG4gIGNsb25lYWJsZVRhZ3NbaW50MTZUYWddID1cclxuICBjbG9uZWFibGVUYWdzW2ludDMyVGFnXSA9XHJcbiAgY2xvbmVhYmxlVGFnc1ttYXBUYWddID1cclxuICBjbG9uZWFibGVUYWdzW251bWJlclRhZ10gPVxyXG4gIGNsb25lYWJsZVRhZ3Nbb2JqZWN0VGFnXSA9XHJcbiAgY2xvbmVhYmxlVGFnc1tyZWdleHBUYWddID1cclxuICBjbG9uZWFibGVUYWdzW3NldFRhZ10gPVxyXG4gIGNsb25lYWJsZVRhZ3Nbc3RyaW5nVGFnXSA9XHJcbiAgY2xvbmVhYmxlVGFnc1tzeW1ib2xUYWddID1cclxuICBjbG9uZWFibGVUYWdzW3VpbnQ4VGFnXSA9XHJcbiAgY2xvbmVhYmxlVGFnc1t1aW50OENsYW1wZWRUYWddID1cclxuICBjbG9uZWFibGVUYWdzW3VpbnQxNlRhZ10gPVxyXG4gIGNsb25lYWJsZVRhZ3NbdWludDMyVGFnXSA9XHJcbiAgICB0cnVlO1xyXG5jbG9uZWFibGVUYWdzW2Vycm9yVGFnXSA9IGNsb25lYWJsZVRhZ3NbZnVuY1RhZ10gPSBjbG9uZWFibGVUYWdzW3dlYWtNYXBUYWddID0gZmFsc2U7XHJcblxyXG5sZXQgZnJlZUdsb2JhbCA9IHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsICYmIGdsb2JhbC5PYmplY3QgPT09IE9iamVjdCAmJiBnbG9iYWw7XHJcbmxldCBmcmVlU2VsZiA9IHR5cGVvZiBzZWxmID09ICdvYmplY3QnICYmIHNlbGYgJiYgc2VsZi5PYmplY3QgPT09IE9iamVjdCAmJiBzZWxmO1xyXG5sZXQgcm9vdCA9IGZyZWVHbG9iYWwgfHwgZnJlZVNlbGYgfHwgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcclxubGV0IGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cyAmJiAhbm9kZVR5cGUgJiYgZXhwb3J0cztcclxubGV0IGZyZWVNb2R1bGUgPSBmcmVlRXhwb3J0cyAmJiB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZSAmJiAhbW9kdWxlLm5vZGVUeXBlICYmIG1vZHVsZTtcclxubGV0IG1vZHVsZUV4cG9ydHMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUuZXhwb3J0cyA9PT0gZnJlZUV4cG9ydHM7XHJcblxyXG5mdW5jdGlvbiBhZGRNYXBFbnRyeShtYXAsIHBhaXIpIHtcclxuICBtYXAuc2V0KHBhaXJbMF0sIHBhaXJbMV0pO1xyXG4gIHJldHVybiBtYXA7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGFkZFNldEVudHJ5KHNldCwgdmFsdWUpIHtcclxuICBzZXQuYWRkKHZhbHVlKTtcclxuICByZXR1cm4gc2V0O1xyXG59XHJcblxyXG5mdW5jdGlvbiBhcnJheUVhY2goYXJyYXksIGl0ZXJhdGVlKSB7XHJcbiAgbGV0IGluZGV4ID0gLTEsXHJcbiAgICBsZW5ndGggPSBhcnJheSA/IGFycmF5Lmxlbmd0aCA6IDA7XHJcblxyXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XHJcbiAgICBpZiAoaXRlcmF0ZWUoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpID09PSBmYWxzZSkge1xyXG4gICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcbiAgcmV0dXJuIGFycmF5O1xyXG59XHJcblxyXG5mdW5jdGlvbiBhcnJheVB1c2goYXJyYXksIHZhbHVlcykge1xyXG4gIGxldCBpbmRleCA9IC0xLFxyXG4gICAgbGVuZ3RoID0gdmFsdWVzLmxlbmd0aCxcclxuICAgIG9mZnNldCA9IGFycmF5Lmxlbmd0aDtcclxuXHJcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcclxuICAgIGFycmF5W29mZnNldCArIGluZGV4XSA9IHZhbHVlc1tpbmRleF07XHJcbiAgfVxyXG4gIHJldHVybiBhcnJheTtcclxufVxyXG5cclxuZnVuY3Rpb24gYXJyYXlSZWR1Y2UoYXJyYXksIGl0ZXJhdGVlLCBhY2N1bXVsYXRvciwgaW5pdEFjY3VtKSB7XHJcbiAgbGV0IGluZGV4ID0gLTEsXHJcbiAgICBsZW5ndGggPSBhcnJheSA/IGFycmF5Lmxlbmd0aCA6IDA7XHJcblxyXG4gIGlmIChpbml0QWNjdW0gJiYgbGVuZ3RoKSB7XHJcbiAgICBhY2N1bXVsYXRvciA9IGFycmF5WysraW5kZXhdO1xyXG4gIH1cclxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xyXG4gICAgYWNjdW11bGF0b3IgPSBpdGVyYXRlZShhY2N1bXVsYXRvciwgYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpO1xyXG4gIH1cclxuICByZXR1cm4gYWNjdW11bGF0b3I7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGJhc2VUaW1lcyhuLCBpdGVyYXRlZSkge1xyXG4gIGxldCBpbmRleCA9IC0xLFxyXG4gICAgcmVzdWx0ID0gQXJyYXkobik7XHJcblxyXG4gIHdoaWxlICgrK2luZGV4IDwgbikge1xyXG4gICAgcmVzdWx0W2luZGV4XSA9IGl0ZXJhdGVlKGluZGV4KTtcclxuICB9XHJcbiAgcmV0dXJuIHJlc3VsdDtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0VmFsdWUob2JqZWN0LCBrZXkpIHtcclxuICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyB1bmRlZmluZWQgOiBvYmplY3Rba2V5XTtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNIb3N0T2JqZWN0KHZhbHVlKSB7XHJcbiAgbGV0IHJlc3VsdCA9IGZhbHNlO1xyXG4gIGlmICh2YWx1ZSAhPSBudWxsICYmIHR5cGVvZiB2YWx1ZS50b1N0cmluZyAhPSAnZnVuY3Rpb24nKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICByZXN1bHQgPSAhISh2YWx1ZSArICcnKTtcclxuICAgIH0gY2F0Y2ggKGUpIHt9XHJcbiAgfVxyXG4gIHJldHVybiByZXN1bHQ7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIG1hcFRvQXJyYXkobWFwKSB7XHJcbiAgbGV0IGluZGV4ID0gLTEsXHJcbiAgICByZXN1bHQgPSBBcnJheShtYXAuc2l6ZSk7XHJcblxyXG4gIG1hcC5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSwga2V5KSB7XHJcbiAgICByZXN1bHRbKytpbmRleF0gPSBba2V5LCB2YWx1ZV07XHJcbiAgfSk7XHJcbiAgcmV0dXJuIHJlc3VsdDtcclxufVxyXG5cclxuZnVuY3Rpb24gb3ZlckFyZyhmdW5jLCB0cmFuc2Zvcm0pIHtcclxuICByZXR1cm4gZnVuY3Rpb24gKGFyZykge1xyXG4gICAgcmV0dXJuIGZ1bmModHJhbnNmb3JtKGFyZykpO1xyXG4gIH07XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHNldFRvQXJyYXkoc2V0KSB7XHJcbiAgbGV0IGluZGV4ID0gLTEsXHJcbiAgICByZXN1bHQgPSBBcnJheShzZXQuc2l6ZSk7XHJcblxyXG4gIHNldC5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgcmVzdWx0WysraW5kZXhdID0gdmFsdWU7XHJcbiAgfSk7XHJcbiAgcmV0dXJuIHJlc3VsdDtcclxufVxyXG5cclxubGV0IGFycmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGUsXHJcbiAgZnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlLFxyXG4gIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcclxuXHJcbmxldCBjb3JlSnNEYXRhID0gcm9vdFsnX19jb3JlLWpzX3NoYXJlZF9fJ107XHJcblxyXG5sZXQgbWFza1NyY0tleSA9IChmdW5jdGlvbiAoKSB7XHJcbiAgbGV0IHVpZCA9IC9bXi5dKyQvLmV4ZWMoKGNvcmVKc0RhdGEgJiYgY29yZUpzRGF0YS5rZXlzICYmIGNvcmVKc0RhdGEua2V5cy5JRV9QUk9UTykgfHwgJycpO1xyXG4gIHJldHVybiB1aWQgPyAnU3ltYm9sKHNyYylfMS4nICsgdWlkIDogJyc7XHJcbn0pKCk7XHJcblxyXG5sZXQgZnVuY1RvU3RyaW5nID0gZnVuY1Byb3RvLnRvU3RyaW5nO1xyXG5sZXQgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcclxubGV0IG9iamVjdFRvU3RyaW5nID0gb2JqZWN0UHJvdG8udG9TdHJpbmc7XHJcblxyXG5sZXQgcmVJc05hdGl2ZSA9IFJlZ0V4cChcclxuICAnXicgK1xyXG4gICAgZnVuY1RvU3RyaW5nXHJcbiAgICAgIC5jYWxsKGhhc093blByb3BlcnR5KVxyXG4gICAgICAucmVwbGFjZShyZVJlZ0V4cENoYXIsICdcXFxcJCYnKVxyXG4gICAgICAucmVwbGFjZSgvaGFzT3duUHJvcGVydHl8KGZ1bmN0aW9uKS4qPyg/PVxcXFxcXCgpfCBmb3IgLis/KD89XFxcXFxcXSkvZywgJyQxLio/JykgK1xyXG4gICAgJyQnXHJcbik7XHJcblxyXG5sZXQgQnVmZmVyID0gbW9kdWxlRXhwb3J0cyA/IHJvb3QuQnVmZmVyIDogdW5kZWZpbmVkLFxyXG4gIFN5bWJvbCA9IHJvb3QuU3ltYm9sLFxyXG4gIFVpbnQ4QXJyYXkgPSByb290LlVpbnQ4QXJyYXksXHJcbiAgZ2V0UHJvdG90eXBlID0gb3ZlckFyZyhPYmplY3QuZ2V0UHJvdG90eXBlT2YsIE9iamVjdCksXHJcbiAgb2JqZWN0Q3JlYXRlID0gT2JqZWN0LmNyZWF0ZSxcclxuICBwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IG9iamVjdFByb3RvLnByb3BlcnR5SXNFbnVtZXJhYmxlLFxyXG4gIHNwbGljZSA9IGFycmF5UHJvdG8uc3BsaWNlO1xyXG5cclxubGV0IG5hdGl2ZUdldFN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzLFxyXG4gIG5hdGl2ZUlzQnVmZmVyID0gQnVmZmVyID8gQnVmZmVyLmlzQnVmZmVyIDogdW5kZWZpbmVkLFxyXG4gIG5hdGl2ZUtleXMgPSBvdmVyQXJnKE9iamVjdC5rZXlzLCBPYmplY3QpO1xyXG5cclxubGV0IERhdGFWaWV3ID0gZ2V0TmF0aXZlKHJvb3QsICdEYXRhVmlldycpLFxyXG4gIE1hcCA9IGdldE5hdGl2ZShyb290LCAnTWFwJyksXHJcbiAgUHJvbWlzZSA9IGdldE5hdGl2ZShyb290LCAnUHJvbWlzZScpLFxyXG4gIFNldCA9IGdldE5hdGl2ZShyb290LCAnU2V0JyksXHJcbiAgV2Vha01hcCA9IGdldE5hdGl2ZShyb290LCAnV2Vha01hcCcpLFxyXG4gIG5hdGl2ZUNyZWF0ZSA9IGdldE5hdGl2ZShPYmplY3QsICdjcmVhdGUnKTtcclxuXHJcbmxldCBkYXRhVmlld0N0b3JTdHJpbmcgPSB0b1NvdXJjZShEYXRhVmlldyksXHJcbiAgbWFwQ3RvclN0cmluZyA9IHRvU291cmNlKE1hcCksXHJcbiAgcHJvbWlzZUN0b3JTdHJpbmcgPSB0b1NvdXJjZShQcm9taXNlKSxcclxuICBzZXRDdG9yU3RyaW5nID0gdG9Tb3VyY2UoU2V0KSxcclxuICB3ZWFrTWFwQ3RvclN0cmluZyA9IHRvU291cmNlKFdlYWtNYXApO1xyXG5cclxubGV0IHN5bWJvbFByb3RvID0gU3ltYm9sID8gU3ltYm9sLnByb3RvdHlwZSA6IHVuZGVmaW5lZCxcclxuICBzeW1ib2xWYWx1ZU9mID0gc3ltYm9sUHJvdG8gPyBzeW1ib2xQcm90by52YWx1ZU9mIDogdW5kZWZpbmVkO1xyXG5cclxuZnVuY3Rpb24gSGFzaChlbnRyaWVzKSB7XHJcbiAgbGV0IGluZGV4ID0gLTEsXHJcbiAgICBsZW5ndGggPSBlbnRyaWVzID8gZW50cmllcy5sZW5ndGggOiAwO1xyXG5cclxuICB0aGlzLmNsZWFyKCk7XHJcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcclxuICAgIGxldCBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xyXG4gICAgdGhpcy5zZXQoZW50cnlbMF0sIGVudHJ5WzFdKTtcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGhhc2hDbGVhcigpIHtcclxuICB0aGlzLl9fZGF0YV9fID0gbmF0aXZlQ3JlYXRlID8gbmF0aXZlQ3JlYXRlKG51bGwpIDoge307XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGhhc2hEZWxldGUoa2V5KSB7XHJcbiAgcmV0dXJuIHRoaXMuaGFzKGtleSkgJiYgZGVsZXRlIHRoaXMuX19kYXRhX19ba2V5XTtcclxufVxyXG5cclxuZnVuY3Rpb24gaGFzaEdldChrZXkpIHtcclxuICBsZXQgZGF0YSA9IHRoaXMuX19kYXRhX187XHJcbiAgaWYgKG5hdGl2ZUNyZWF0ZSkge1xyXG4gICAgbGV0IHJlc3VsdCA9IGRhdGFba2V5XTtcclxuICAgIHJldHVybiByZXN1bHQgPT09IEhBU0hfVU5ERUZJTkVEID8gdW5kZWZpbmVkIDogcmVzdWx0O1xyXG4gIH1cclxuICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChkYXRhLCBrZXkpID8gZGF0YVtrZXldIDogdW5kZWZpbmVkO1xyXG59XHJcblxyXG5mdW5jdGlvbiBoYXNoSGFzKGtleSkge1xyXG4gIGxldCBkYXRhID0gdGhpcy5fX2RhdGFfXztcclxuICByZXR1cm4gbmF0aXZlQ3JlYXRlID8gZGF0YVtrZXldICE9PSB1bmRlZmluZWQgOiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGRhdGEsIGtleSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGhhc2hTZXQoa2V5LCB2YWx1ZSkge1xyXG4gIGxldCBkYXRhID0gdGhpcy5fX2RhdGFfXztcclxuICBkYXRhW2tleV0gPSBuYXRpdmVDcmVhdGUgJiYgdmFsdWUgPT09IHVuZGVmaW5lZCA/IEhBU0hfVU5ERUZJTkVEIDogdmFsdWU7XHJcbiAgcmV0dXJuIHRoaXM7XHJcbn1cclxuXHJcbkhhc2gucHJvdG90eXBlLmNsZWFyID0gaGFzaENsZWFyO1xyXG5IYXNoLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBoYXNoRGVsZXRlO1xyXG5IYXNoLnByb3RvdHlwZS5nZXQgPSBoYXNoR2V0O1xyXG5IYXNoLnByb3RvdHlwZS5oYXMgPSBoYXNoSGFzO1xyXG5IYXNoLnByb3RvdHlwZS5zZXQgPSBoYXNoU2V0O1xyXG5cclxuZnVuY3Rpb24gTGlzdENhY2hlKGVudHJpZXMpIHtcclxuICBsZXQgaW5kZXggPSAtMSxcclxuICAgIGxlbmd0aCA9IGVudHJpZXMgPyBlbnRyaWVzLmxlbmd0aCA6IDA7XHJcblxyXG4gIHRoaXMuY2xlYXIoKTtcclxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xyXG4gICAgbGV0IGVudHJ5ID0gZW50cmllc1tpbmRleF07XHJcbiAgICB0aGlzLnNldChlbnRyeVswXSwgZW50cnlbMV0pO1xyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gbGlzdENhY2hlQ2xlYXIoKSB7XHJcbiAgdGhpcy5fX2RhdGFfXyA9IFtdO1xyXG59XHJcblxyXG5mdW5jdGlvbiBsaXN0Q2FjaGVEZWxldGUoa2V5KSB7XHJcbiAgbGV0IGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxyXG4gICAgaW5kZXggPSBhc3NvY0luZGV4T2YoZGF0YSwga2V5KTtcclxuXHJcbiAgaWYgKGluZGV4IDwgMCkge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuICBsZXQgbGFzdEluZGV4ID0gZGF0YS5sZW5ndGggLSAxO1xyXG4gIGlmIChpbmRleCA9PSBsYXN0SW5kZXgpIHtcclxuICAgIGRhdGEucG9wKCk7XHJcbiAgfSBlbHNlIHtcclxuICAgIHNwbGljZS5jYWxsKGRhdGEsIGluZGV4LCAxKTtcclxuICB9XHJcbiAgcmV0dXJuIHRydWU7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGxpc3RDYWNoZUdldChrZXkpIHtcclxuICBsZXQgZGF0YSA9IHRoaXMuX19kYXRhX18sXHJcbiAgICBpbmRleCA9IGFzc29jSW5kZXhPZihkYXRhLCBrZXkpO1xyXG5cclxuICByZXR1cm4gaW5kZXggPCAwID8gdW5kZWZpbmVkIDogZGF0YVtpbmRleF1bMV07XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGxpc3RDYWNoZUhhcyhrZXkpIHtcclxuICByZXR1cm4gYXNzb2NJbmRleE9mKHRoaXMuX19kYXRhX18sIGtleSkgPiAtMTtcclxufVxyXG5cclxuZnVuY3Rpb24gbGlzdENhY2hlU2V0KGtleSwgdmFsdWUpIHtcclxuICBsZXQgZGF0YSA9IHRoaXMuX19kYXRhX18sXHJcbiAgICBpbmRleCA9IGFzc29jSW5kZXhPZihkYXRhLCBrZXkpO1xyXG5cclxuICBpZiAoaW5kZXggPCAwKSB7XHJcbiAgICBkYXRhLnB1c2goW2tleSwgdmFsdWVdKTtcclxuICB9IGVsc2Uge1xyXG4gICAgZGF0YVtpbmRleF1bMV0gPSB2YWx1ZTtcclxuICB9XHJcbiAgcmV0dXJuIHRoaXM7XHJcbn1cclxuXHJcbkxpc3RDYWNoZS5wcm90b3R5cGUuY2xlYXIgPSBsaXN0Q2FjaGVDbGVhcjtcclxuTGlzdENhY2hlLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBsaXN0Q2FjaGVEZWxldGU7XHJcbkxpc3RDYWNoZS5wcm90b3R5cGUuZ2V0ID0gbGlzdENhY2hlR2V0O1xyXG5MaXN0Q2FjaGUucHJvdG90eXBlLmhhcyA9IGxpc3RDYWNoZUhhcztcclxuTGlzdENhY2hlLnByb3RvdHlwZS5zZXQgPSBsaXN0Q2FjaGVTZXQ7XHJcblxyXG5mdW5jdGlvbiBNYXBDYWNoZShlbnRyaWVzKSB7XHJcbiAgbGV0IGluZGV4ID0gLTEsXHJcbiAgICBsZW5ndGggPSBlbnRyaWVzID8gZW50cmllcy5sZW5ndGggOiAwO1xyXG5cclxuICB0aGlzLmNsZWFyKCk7XHJcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcclxuICAgIGxldCBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xyXG4gICAgdGhpcy5zZXQoZW50cnlbMF0sIGVudHJ5WzFdKTtcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIG1hcENhY2hlQ2xlYXIoKSB7XHJcbiAgdGhpcy5fX2RhdGFfXyA9IHtcclxuICAgIGhhc2g6IG5ldyBIYXNoKCksXHJcbiAgICBtYXA6IG5ldyAoTWFwIHx8IExpc3RDYWNoZSkoKSxcclxuICAgIHN0cmluZzogbmV3IEhhc2goKSxcclxuICB9O1xyXG59XHJcblxyXG5mdW5jdGlvbiBtYXBDYWNoZURlbGV0ZShrZXkpIHtcclxuICByZXR1cm4gZ2V0TWFwRGF0YSh0aGlzLCBrZXkpWydkZWxldGUnXShrZXkpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBtYXBDYWNoZUdldChrZXkpIHtcclxuICByZXR1cm4gZ2V0TWFwRGF0YSh0aGlzLCBrZXkpLmdldChrZXkpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBtYXBDYWNoZUhhcyhrZXkpIHtcclxuICByZXR1cm4gZ2V0TWFwRGF0YSh0aGlzLCBrZXkpLmhhcyhrZXkpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBtYXBDYWNoZVNldChrZXksIHZhbHVlKSB7XHJcbiAgZ2V0TWFwRGF0YSh0aGlzLCBrZXkpLnNldChrZXksIHZhbHVlKTtcclxuICByZXR1cm4gdGhpcztcclxufVxyXG5cclxuTWFwQ2FjaGUucHJvdG90eXBlLmNsZWFyID0gbWFwQ2FjaGVDbGVhcjtcclxuTWFwQ2FjaGUucHJvdG90eXBlWydkZWxldGUnXSA9IG1hcENhY2hlRGVsZXRlO1xyXG5NYXBDYWNoZS5wcm90b3R5cGUuZ2V0ID0gbWFwQ2FjaGVHZXQ7XHJcbk1hcENhY2hlLnByb3RvdHlwZS5oYXMgPSBtYXBDYWNoZUhhcztcclxuTWFwQ2FjaGUucHJvdG90eXBlLnNldCA9IG1hcENhY2hlU2V0O1xyXG5cclxuZnVuY3Rpb24gU3RhY2soZW50cmllcykge1xyXG4gIHRoaXMuX19kYXRhX18gPSBuZXcgTGlzdENhY2hlKGVudHJpZXMpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBzdGFja0NsZWFyKCkge1xyXG4gIHRoaXMuX19kYXRhX18gPSBuZXcgTGlzdENhY2hlKCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHN0YWNrRGVsZXRlKGtleSkge1xyXG4gIHJldHVybiB0aGlzLl9fZGF0YV9fWydkZWxldGUnXShrZXkpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBzdGFja0dldChrZXkpIHtcclxuICByZXR1cm4gdGhpcy5fX2RhdGFfXy5nZXQoa2V5KTtcclxufVxyXG5cclxuZnVuY3Rpb24gc3RhY2tIYXMoa2V5KSB7XHJcbiAgcmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKGtleSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHN0YWNrU2V0KGtleSwgdmFsdWUpIHtcclxuICBsZXQgY2FjaGUgPSB0aGlzLl9fZGF0YV9fO1xyXG4gIGlmIChjYWNoZSBpbnN0YW5jZW9mIExpc3RDYWNoZSkge1xyXG4gICAgbGV0IHBhaXJzID0gY2FjaGUuX19kYXRhX187XHJcbiAgICBpZiAoIU1hcCB8fCBwYWlycy5sZW5ndGggPCBMQVJHRV9BUlJBWV9TSVpFIC0gMSkge1xyXG4gICAgICBwYWlycy5wdXNoKFtrZXksIHZhbHVlXSk7XHJcbiAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gICAgY2FjaGUgPSB0aGlzLl9fZGF0YV9fID0gbmV3IE1hcENhY2hlKHBhaXJzKTtcclxuICB9XHJcbiAgY2FjaGUuc2V0KGtleSwgdmFsdWUpO1xyXG4gIHJldHVybiB0aGlzO1xyXG59XHJcblxyXG5TdGFjay5wcm90b3R5cGUuY2xlYXIgPSBzdGFja0NsZWFyO1xyXG5TdGFjay5wcm90b3R5cGVbJ2RlbGV0ZSddID0gc3RhY2tEZWxldGU7XHJcblN0YWNrLnByb3RvdHlwZS5nZXQgPSBzdGFja0dldDtcclxuU3RhY2sucHJvdG90eXBlLmhhcyA9IHN0YWNrSGFzO1xyXG5TdGFjay5wcm90b3R5cGUuc2V0ID0gc3RhY2tTZXQ7XHJcblxyXG5mdW5jdGlvbiBhcnJheUxpa2VLZXlzKHZhbHVlLCBpbmhlcml0ZWQpIHtcclxuICBsZXQgcmVzdWx0ID0gaXNBcnJheSh2YWx1ZSkgfHwgaXNBcmd1bWVudHModmFsdWUpID8gYmFzZVRpbWVzKHZhbHVlLmxlbmd0aCwgU3RyaW5nKSA6IFtdO1xyXG5cclxuICBsZXQgbGVuZ3RoID0gcmVzdWx0Lmxlbmd0aCxcclxuICAgIHNraXBJbmRleGVzID0gISFsZW5ndGg7XHJcblxyXG4gIGZvciAobGV0IGtleSBpbiB2YWx1ZSkge1xyXG4gICAgaWYgKFxyXG4gICAgICAoaW5oZXJpdGVkIHx8IGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIGtleSkpICYmXHJcbiAgICAgICEoc2tpcEluZGV4ZXMgJiYgKGtleSA9PSAnbGVuZ3RoJyB8fCBpc0luZGV4KGtleSwgbGVuZ3RoKSkpXHJcbiAgICApIHtcclxuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcclxuICAgIH1cclxuICB9XHJcbiAgcmV0dXJuIHJlc3VsdDtcclxufVxyXG5cclxuZnVuY3Rpb24gYXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKSB7XHJcbiAgbGV0IG9ialZhbHVlID0gb2JqZWN0W2tleV07XHJcbiAgaWYgKFxyXG4gICAgIShoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSAmJiBlcShvYmpWYWx1ZSwgdmFsdWUpKSB8fFxyXG4gICAgKHZhbHVlID09PSB1bmRlZmluZWQgJiYgIShrZXkgaW4gb2JqZWN0KSlcclxuICApIHtcclxuICAgIG9iamVjdFtrZXldID0gdmFsdWU7XHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBhc3NvY0luZGV4T2YoYXJyYXksIGtleSkge1xyXG4gIGxldCBsZW5ndGggPSBhcnJheS5sZW5ndGg7XHJcbiAgd2hpbGUgKGxlbmd0aC0tKSB7XHJcbiAgICBpZiAoZXEoYXJyYXlbbGVuZ3RoXVswXSwga2V5KSkge1xyXG4gICAgICByZXR1cm4gbGVuZ3RoO1xyXG4gICAgfVxyXG4gIH1cclxuICByZXR1cm4gLTE7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGJhc2VBc3NpZ24ob2JqZWN0LCBzb3VyY2UpIHtcclxuICByZXR1cm4gb2JqZWN0ICYmIGNvcHlPYmplY3Qoc291cmNlLCBrZXlzKHNvdXJjZSksIG9iamVjdCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGJhc2VDbG9uZSh2YWx1ZSwgaXNEZWVwLCBpc0Z1bGwsIGN1c3RvbWl6ZXIsIGtleSwgb2JqZWN0LCBzdGFjaykge1xyXG4gIGxldCByZXN1bHQ7XHJcbiAgaWYgKGN1c3RvbWl6ZXIpIHtcclxuICAgIHJlc3VsdCA9IG9iamVjdCA/IGN1c3RvbWl6ZXIodmFsdWUsIGtleSwgb2JqZWN0LCBzdGFjaykgOiBjdXN0b21pemVyKHZhbHVlKTtcclxuICB9XHJcbiAgaWYgKHJlc3VsdCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuICBpZiAoIWlzT2JqZWN0KHZhbHVlKSkge1xyXG4gICAgcmV0dXJuIHZhbHVlO1xyXG4gIH1cclxuICBsZXQgaXNBcnIgPSBpc0FycmF5KHZhbHVlKTtcclxuICBpZiAoaXNBcnIpIHtcclxuICAgIHJlc3VsdCA9IGluaXRDbG9uZUFycmF5KHZhbHVlKTtcclxuICAgIGlmICghaXNEZWVwKSB7XHJcbiAgICAgIHJldHVybiBjb3B5QXJyYXkodmFsdWUsIHJlc3VsdCk7XHJcbiAgICB9XHJcbiAgfSBlbHNlIHtcclxuICAgIGxldCB0YWcgPSBnZXRUYWcodmFsdWUpLFxyXG4gICAgICBpc0Z1bmMgPSB0YWcgPT0gZnVuY1RhZyB8fCB0YWcgPT0gZ2VuVGFnO1xyXG5cclxuICAgIGlmIChpc0J1ZmZlcih2YWx1ZSkpIHtcclxuICAgICAgcmV0dXJuIGNsb25lQnVmZmVyKHZhbHVlLCBpc0RlZXApO1xyXG4gICAgfVxyXG4gICAgaWYgKHRhZyA9PSBvYmplY3RUYWcgfHwgdGFnID09IGFyZ3NUYWcgfHwgKGlzRnVuYyAmJiAhb2JqZWN0KSkge1xyXG4gICAgICBpZiAoaXNIb3N0T2JqZWN0KHZhbHVlKSkge1xyXG4gICAgICAgIHJldHVybiBvYmplY3QgPyB2YWx1ZSA6IHt9O1xyXG4gICAgICB9XHJcbiAgICAgIHJlc3VsdCA9IGluaXRDbG9uZU9iamVjdChpc0Z1bmMgPyB7fSA6IHZhbHVlKTtcclxuICAgICAgaWYgKCFpc0RlZXApIHtcclxuICAgICAgICByZXR1cm4gY29weVN5bWJvbHModmFsdWUsIGJhc2VBc3NpZ24ocmVzdWx0LCB2YWx1ZSkpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAoIWNsb25lYWJsZVRhZ3NbdGFnXSkge1xyXG4gICAgICAgIHJldHVybiBvYmplY3QgPyB2YWx1ZSA6IHt9O1xyXG4gICAgICB9XHJcbiAgICAgIHJlc3VsdCA9IGluaXRDbG9uZUJ5VGFnKHZhbHVlLCB0YWcsIGJhc2VDbG9uZSwgaXNEZWVwKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHN0YWNrIHx8IChzdGFjayA9IG5ldyBTdGFjaygpKTtcclxuICBsZXQgc3RhY2tlZCA9IHN0YWNrLmdldCh2YWx1ZSk7XHJcbiAgaWYgKHN0YWNrZWQpIHtcclxuICAgIHJldHVybiBzdGFja2VkO1xyXG4gIH1cclxuICBzdGFjay5zZXQodmFsdWUsIHJlc3VsdCk7XHJcblxyXG4gIGlmICghaXNBcnIpIHtcclxuICAgIHZhciBjbG9uZURlZXBQcm9wcyA9IGlzRnVsbCA/IGdldEFsbEtleXModmFsdWUpIDoga2V5cyh2YWx1ZSk7XHJcbiAgfVxyXG4gIGFycmF5RWFjaChjbG9uZURlZXBQcm9wcyB8fCB2YWx1ZSwgZnVuY3Rpb24gKHN1YlZhbHVlLCBrZXkpIHtcclxuICAgIGlmIChjbG9uZURlZXBQcm9wcykge1xyXG4gICAgICBrZXkgPSBzdWJWYWx1ZTtcclxuICAgICAgc3ViVmFsdWUgPSB2YWx1ZVtrZXldO1xyXG4gICAgfVxyXG5cclxuICAgIGFzc2lnblZhbHVlKHJlc3VsdCwga2V5LCBiYXNlQ2xvbmUoc3ViVmFsdWUsIGlzRGVlcCwgaXNGdWxsLCBjdXN0b21pemVyLCBrZXksIHZhbHVlLCBzdGFjaykpO1xyXG4gIH0pO1xyXG4gIHJldHVybiByZXN1bHQ7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGJhc2VDcmVhdGUocHJvdG8pIHtcclxuICByZXR1cm4gaXNPYmplY3QocHJvdG8pID8gb2JqZWN0Q3JlYXRlKHByb3RvKSA6IHt9O1xyXG59XHJcblxyXG5mdW5jdGlvbiBiYXNlR2V0QWxsS2V5cyhvYmplY3QsIGtleXNGdW5jLCBzeW1ib2xzRnVuYykge1xyXG4gIGxldCByZXN1bHQgPSBrZXlzRnVuYyhvYmplY3QpO1xyXG4gIHJldHVybiBpc0FycmF5KG9iamVjdCkgPyByZXN1bHQgOiBhcnJheVB1c2gocmVzdWx0LCBzeW1ib2xzRnVuYyhvYmplY3QpKTtcclxufVxyXG5cclxuZnVuY3Rpb24gYmFzZUdldFRhZyh2YWx1ZSkge1xyXG4gIHJldHVybiBvYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKTtcclxufVxyXG5cclxuZnVuY3Rpb24gYmFzZUlzTmF0aXZlKHZhbHVlKSB7XHJcbiAgaWYgKCFpc09iamVjdCh2YWx1ZSkgfHwgaXNNYXNrZWQodmFsdWUpKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIGxldCBwYXR0ZXJuID0gaXNGdW5jdGlvbih2YWx1ZSkgfHwgaXNIb3N0T2JqZWN0KHZhbHVlKSA/IHJlSXNOYXRpdmUgOiByZUlzSG9zdEN0b3I7XHJcbiAgcmV0dXJuIHBhdHRlcm4udGVzdCh0b1NvdXJjZSh2YWx1ZSkpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBiYXNlS2V5cyhvYmplY3QpIHtcclxuICBpZiAoIWlzUHJvdG90eXBlKG9iamVjdCkpIHtcclxuICAgIHJldHVybiBuYXRpdmVLZXlzKG9iamVjdCk7XHJcbiAgfVxyXG4gIGxldCByZXN1bHQgPSBbXTtcclxuICBmb3IgKGxldCBrZXkgaW4gT2JqZWN0KG9iamVjdCkpIHtcclxuICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSAmJiBrZXkgIT0gJ2NvbnN0cnVjdG9yJykge1xyXG4gICAgICByZXN1bHQucHVzaChrZXkpO1xyXG4gICAgfVxyXG4gIH1cclxuICByZXR1cm4gcmVzdWx0O1xyXG59XHJcblxyXG5mdW5jdGlvbiBjbG9uZUJ1ZmZlcihidWZmZXIsIGlzRGVlcCkge1xyXG4gIGlmIChpc0RlZXApIHtcclxuICAgIHJldHVybiBidWZmZXIuc2xpY2UoKTtcclxuICB9XHJcbiAgbGV0IHJlc3VsdCA9IG5ldyBidWZmZXIuY29uc3RydWN0b3IoYnVmZmVyLmxlbmd0aCk7XHJcbiAgYnVmZmVyLmNvcHkocmVzdWx0KTtcclxuICByZXR1cm4gcmVzdWx0O1xyXG59XHJcblxyXG5mdW5jdGlvbiBjbG9uZUFycmF5QnVmZmVyKGFycmF5QnVmZmVyKSB7XHJcbiAgbGV0IHJlc3VsdCA9IG5ldyBhcnJheUJ1ZmZlci5jb25zdHJ1Y3RvcihhcnJheUJ1ZmZlci5ieXRlTGVuZ3RoKTtcclxuICBuZXcgVWludDhBcnJheShyZXN1bHQpLnNldChuZXcgVWludDhBcnJheShhcnJheUJ1ZmZlcikpO1xyXG4gIHJldHVybiByZXN1bHQ7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNsb25lRGF0YVZpZXcoZGF0YVZpZXcsIGlzRGVlcCkge1xyXG4gIGxldCBidWZmZXIgPSBpc0RlZXAgPyBjbG9uZUFycmF5QnVmZmVyKGRhdGFWaWV3LmJ1ZmZlcikgOiBkYXRhVmlldy5idWZmZXI7XHJcbiAgcmV0dXJuIG5ldyBkYXRhVmlldy5jb25zdHJ1Y3RvcihidWZmZXIsIGRhdGFWaWV3LmJ5dGVPZmZzZXQsIGRhdGFWaWV3LmJ5dGVMZW5ndGgpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjbG9uZU1hcChtYXAsIGlzRGVlcCwgY2xvbmVGdW5jKSB7XHJcbiAgbGV0IGFycmF5ID0gaXNEZWVwID8gY2xvbmVGdW5jKG1hcFRvQXJyYXkobWFwKSwgdHJ1ZSkgOiBtYXBUb0FycmF5KG1hcCk7XHJcbiAgcmV0dXJuIGFycmF5UmVkdWNlKGFycmF5LCBhZGRNYXBFbnRyeSwgbmV3IG1hcC5jb25zdHJ1Y3RvcigpKTtcclxufVxyXG5cclxuZnVuY3Rpb24gY2xvbmVSZWdFeHAocmVnZXhwKSB7XHJcbiAgbGV0IHJlc3VsdCA9IG5ldyByZWdleHAuY29uc3RydWN0b3IocmVnZXhwLnNvdXJjZSwgcmVGbGFncy5leGVjKHJlZ2V4cCkpO1xyXG4gIHJlc3VsdC5sYXN0SW5kZXggPSByZWdleHAubGFzdEluZGV4O1xyXG4gIHJldHVybiByZXN1bHQ7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNsb25lU2V0KHNldCwgaXNEZWVwLCBjbG9uZUZ1bmMpIHtcclxuICBsZXQgYXJyYXkgPSBpc0RlZXAgPyBjbG9uZUZ1bmMoc2V0VG9BcnJheShzZXQpLCB0cnVlKSA6IHNldFRvQXJyYXkoc2V0KTtcclxuICByZXR1cm4gYXJyYXlSZWR1Y2UoYXJyYXksIGFkZFNldEVudHJ5LCBuZXcgc2V0LmNvbnN0cnVjdG9yKCkpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjbG9uZVN5bWJvbChzeW1ib2wpIHtcclxuICByZXR1cm4gc3ltYm9sVmFsdWVPZiA/IE9iamVjdChzeW1ib2xWYWx1ZU9mLmNhbGwoc3ltYm9sKSkgOiB7fTtcclxufVxyXG5cclxuZnVuY3Rpb24gY2xvbmVUeXBlZEFycmF5KHR5cGVkQXJyYXksIGlzRGVlcCkge1xyXG4gIGxldCBidWZmZXIgPSBpc0RlZXAgPyBjbG9uZUFycmF5QnVmZmVyKHR5cGVkQXJyYXkuYnVmZmVyKSA6IHR5cGVkQXJyYXkuYnVmZmVyO1xyXG4gIHJldHVybiBuZXcgdHlwZWRBcnJheS5jb25zdHJ1Y3RvcihidWZmZXIsIHR5cGVkQXJyYXkuYnl0ZU9mZnNldCwgdHlwZWRBcnJheS5sZW5ndGgpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjb3B5QXJyYXkoc291cmNlLCBhcnJheSkge1xyXG4gIGxldCBpbmRleCA9IC0xLFxyXG4gICAgbGVuZ3RoID0gc291cmNlLmxlbmd0aDtcclxuXHJcbiAgYXJyYXkgfHwgKGFycmF5ID0gQXJyYXkobGVuZ3RoKSk7XHJcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcclxuICAgIGFycmF5W2luZGV4XSA9IHNvdXJjZVtpbmRleF07XHJcbiAgfVxyXG4gIHJldHVybiBhcnJheTtcclxufVxyXG5cclxuZnVuY3Rpb24gY29weU9iamVjdChzb3VyY2UsIGNsb25lRGVlcFByb3BzLCBvYmplY3QsIGN1c3RvbWl6ZXIpIHtcclxuICBvYmplY3QgfHwgKG9iamVjdCA9IHt9KTtcclxuXHJcbiAgbGV0IGluZGV4ID0gLTEsXHJcbiAgICBsZW5ndGggPSBjbG9uZURlZXBQcm9wcy5sZW5ndGg7XHJcblxyXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XHJcbiAgICBsZXQga2V5ID0gY2xvbmVEZWVwUHJvcHNbaW5kZXhdO1xyXG5cclxuICAgIGxldCBuZXdWYWx1ZSA9IGN1c3RvbWl6ZXJcclxuICAgICAgPyBjdXN0b21pemVyKG9iamVjdFtrZXldLCBzb3VyY2Vba2V5XSwga2V5LCBvYmplY3QsIHNvdXJjZSlcclxuICAgICAgOiB1bmRlZmluZWQ7XHJcblxyXG4gICAgYXNzaWduVmFsdWUob2JqZWN0LCBrZXksIG5ld1ZhbHVlID09PSB1bmRlZmluZWQgPyBzb3VyY2Vba2V5XSA6IG5ld1ZhbHVlKTtcclxuICB9XHJcbiAgcmV0dXJuIG9iamVjdDtcclxufVxyXG5cclxuZnVuY3Rpb24gY29weVN5bWJvbHMoc291cmNlLCBvYmplY3QpIHtcclxuICByZXR1cm4gY29weU9iamVjdChzb3VyY2UsIGdldFN5bWJvbHMoc291cmNlKSwgb2JqZWN0KTtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0QWxsS2V5cyhvYmplY3QpIHtcclxuICByZXR1cm4gYmFzZUdldEFsbEtleXMob2JqZWN0LCBrZXlzLCBnZXRTeW1ib2xzKTtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0TWFwRGF0YShtYXAsIGtleSkge1xyXG4gIGxldCBkYXRhID0gbWFwLl9fZGF0YV9fO1xyXG4gIHJldHVybiBpc0tleWFibGUoa2V5KSA/IGRhdGFbdHlwZW9mIGtleSA9PSAnc3RyaW5nJyA/ICdzdHJpbmcnIDogJ2hhc2gnXSA6IGRhdGEubWFwO1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXROYXRpdmUob2JqZWN0LCBrZXkpIHtcclxuICBsZXQgdmFsdWUgPSBnZXRWYWx1ZShvYmplY3QsIGtleSk7XHJcbiAgcmV0dXJuIGJhc2VJc05hdGl2ZSh2YWx1ZSkgPyB2YWx1ZSA6IHVuZGVmaW5lZDtcclxufVxyXG5cclxubGV0IGdldFN5bWJvbHMgPSBuYXRpdmVHZXRTeW1ib2xzID8gb3ZlckFyZyhuYXRpdmVHZXRTeW1ib2xzLCBPYmplY3QpIDogc3R1YkFycmF5O1xyXG5sZXQgZ2V0VGFnID0gYmFzZUdldFRhZztcclxuXHJcbmlmIChcclxuICAoRGF0YVZpZXcgJiYgZ2V0VGFnKG5ldyBEYXRhVmlldyhuZXcgQXJyYXlCdWZmZXIoMSkpKSAhPSBkYXRhVmlld1RhZykgfHxcclxuICAoTWFwICYmIGdldFRhZyhuZXcgTWFwKCkpICE9IG1hcFRhZykgfHxcclxuICAoUHJvbWlzZSAmJiBnZXRUYWcoUHJvbWlzZS5yZXNvbHZlKCkpICE9IHByb21pc2VUYWcpIHx8XHJcbiAgKFNldCAmJiBnZXRUYWcobmV3IFNldCgpKSAhPSBzZXRUYWcpIHx8XHJcbiAgKFdlYWtNYXAgJiYgZ2V0VGFnKG5ldyBXZWFrTWFwKCkpICE9IHdlYWtNYXBUYWcpXHJcbikge1xyXG4gIGdldFRhZyA9IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgbGV0IHJlc3VsdCA9IG9iamVjdFRvU3RyaW5nLmNhbGwodmFsdWUpLFxyXG4gICAgICBDdG9yID0gcmVzdWx0ID09IG9iamVjdFRhZyA/IHZhbHVlLmNvbnN0cnVjdG9yIDogdW5kZWZpbmVkLFxyXG4gICAgICBjdG9yU3RyaW5nID0gQ3RvciA/IHRvU291cmNlKEN0b3IpIDogdW5kZWZpbmVkO1xyXG5cclxuICAgIGlmIChjdG9yU3RyaW5nKSB7XHJcbiAgICAgIHN3aXRjaCAoY3RvclN0cmluZykge1xyXG4gICAgICAgIGNhc2UgZGF0YVZpZXdDdG9yU3RyaW5nOlxyXG4gICAgICAgICAgcmV0dXJuIGRhdGFWaWV3VGFnO1xyXG4gICAgICAgIGNhc2UgbWFwQ3RvclN0cmluZzpcclxuICAgICAgICAgIHJldHVybiBtYXBUYWc7XHJcbiAgICAgICAgY2FzZSBwcm9taXNlQ3RvclN0cmluZzpcclxuICAgICAgICAgIHJldHVybiBwcm9taXNlVGFnO1xyXG4gICAgICAgIGNhc2Ugc2V0Q3RvclN0cmluZzpcclxuICAgICAgICAgIHJldHVybiBzZXRUYWc7XHJcbiAgICAgICAgY2FzZSB3ZWFrTWFwQ3RvclN0cmluZzpcclxuICAgICAgICAgIHJldHVybiB3ZWFrTWFwVGFnO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH07XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGluaXRDbG9uZUFycmF5KGFycmF5KSB7XHJcbiAgbGV0IGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcclxuICAgIHJlc3VsdCA9IGFycmF5LmNvbnN0cnVjdG9yKGxlbmd0aCk7XHJcblxyXG4gIGlmIChsZW5ndGggJiYgdHlwZW9mIGFycmF5WzBdID09ICdzdHJpbmcnICYmIGhhc093blByb3BlcnR5LmNhbGwoYXJyYXksICdpbmRleCcpKSB7XHJcbiAgICByZXN1bHQuaW5kZXggPSBhcnJheS5pbmRleDtcclxuICAgIHJlc3VsdC5pbnB1dCA9IGFycmF5LmlucHV0O1xyXG4gIH1cclxuICByZXR1cm4gcmVzdWx0O1xyXG59XHJcblxyXG5mdW5jdGlvbiBpbml0Q2xvbmVPYmplY3Qob2JqZWN0KSB7XHJcbiAgcmV0dXJuIHR5cGVvZiBvYmplY3QuY29uc3RydWN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNQcm90b3R5cGUob2JqZWN0KVxyXG4gICAgPyBiYXNlQ3JlYXRlKGdldFByb3RvdHlwZShvYmplY3QpKVxyXG4gICAgOiB7fTtcclxufVxyXG5cclxuZnVuY3Rpb24gaW5pdENsb25lQnlUYWcob2JqZWN0LCB0YWcsIGNsb25lRnVuYywgaXNEZWVwKSB7XHJcbiAgbGV0IEN0b3IgPSBvYmplY3QuY29uc3RydWN0b3I7XHJcbiAgc3dpdGNoICh0YWcpIHtcclxuICAgIGNhc2UgYXJyYXlCdWZmZXJUYWc6XHJcbiAgICAgIHJldHVybiBjbG9uZUFycmF5QnVmZmVyKG9iamVjdCk7XHJcblxyXG4gICAgY2FzZSBib29sVGFnOlxyXG4gICAgY2FzZSBkYXRlVGFnOlxyXG4gICAgICByZXR1cm4gbmV3IEN0b3IoK29iamVjdCk7XHJcblxyXG4gICAgY2FzZSBkYXRhVmlld1RhZzpcclxuICAgICAgcmV0dXJuIGNsb25lRGF0YVZpZXcob2JqZWN0LCBpc0RlZXApO1xyXG5cclxuICAgIGNhc2UgZmxvYXQzMlRhZzpcclxuICAgIGNhc2UgZmxvYXQ2NFRhZzpcclxuICAgIGNhc2UgaW50OFRhZzpcclxuICAgIGNhc2UgaW50MTZUYWc6XHJcbiAgICBjYXNlIGludDMyVGFnOlxyXG4gICAgY2FzZSB1aW50OFRhZzpcclxuICAgIGNhc2UgdWludDhDbGFtcGVkVGFnOlxyXG4gICAgY2FzZSB1aW50MTZUYWc6XHJcbiAgICBjYXNlIHVpbnQzMlRhZzpcclxuICAgICAgcmV0dXJuIGNsb25lVHlwZWRBcnJheShvYmplY3QsIGlzRGVlcCk7XHJcblxyXG4gICAgY2FzZSBtYXBUYWc6XHJcbiAgICAgIHJldHVybiBjbG9uZU1hcChvYmplY3QsIGlzRGVlcCwgY2xvbmVGdW5jKTtcclxuXHJcbiAgICBjYXNlIG51bWJlclRhZzpcclxuICAgIGNhc2Ugc3RyaW5nVGFnOlxyXG4gICAgICByZXR1cm4gbmV3IEN0b3Iob2JqZWN0KTtcclxuXHJcbiAgICBjYXNlIHJlZ2V4cFRhZzpcclxuICAgICAgcmV0dXJuIGNsb25lUmVnRXhwKG9iamVjdCk7XHJcblxyXG4gICAgY2FzZSBzZXRUYWc6XHJcbiAgICAgIHJldHVybiBjbG9uZVNldChvYmplY3QsIGlzRGVlcCwgY2xvbmVGdW5jKTtcclxuXHJcbiAgICBjYXNlIHN5bWJvbFRhZzpcclxuICAgICAgcmV0dXJuIGNsb25lU3ltYm9sKG9iamVjdCk7XHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBpc0luZGV4KHZhbHVlLCBsZW5ndGgpIHtcclxuICBsZW5ndGggPSBsZW5ndGggPT0gbnVsbCA/IE1BWF9TQUZFX0lOVEVHRVIgOiBsZW5ndGg7XHJcbiAgcmV0dXJuIChcclxuICAgICEhbGVuZ3RoICYmXHJcbiAgICAodHlwZW9mIHZhbHVlID09ICdudW1iZXInIHx8IHJlSXNVaW50LnRlc3QodmFsdWUpKSAmJlxyXG4gICAgdmFsdWUgPiAtMSAmJlxyXG4gICAgdmFsdWUgJSAxID09IDAgJiZcclxuICAgIHZhbHVlIDwgbGVuZ3RoXHJcbiAgKTtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNLZXlhYmxlKHZhbHVlKSB7XHJcbiAgbGV0IHR5cGUgPSB0eXBlb2YgdmFsdWU7XHJcbiAgcmV0dXJuIHR5cGUgPT0gJ3N0cmluZycgfHwgdHlwZSA9PSAnbnVtYmVyJyB8fCB0eXBlID09ICdzeW1ib2wnIHx8IHR5cGUgPT0gJ2Jvb2xlYW4nXHJcbiAgICA/IHZhbHVlICE9PSAnX19wcm90b19fJ1xyXG4gICAgOiB2YWx1ZSA9PT0gbnVsbDtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNNYXNrZWQoZnVuYykge1xyXG4gIHJldHVybiAhIW1hc2tTcmNLZXkgJiYgbWFza1NyY0tleSBpbiBmdW5jO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc1Byb3RvdHlwZSh2YWx1ZSkge1xyXG4gIGxldCBDdG9yID0gdmFsdWUgJiYgdmFsdWUuY29uc3RydWN0b3IsXHJcbiAgICBwcm90byA9ICh0eXBlb2YgQ3RvciA9PSAnZnVuY3Rpb24nICYmIEN0b3IucHJvdG90eXBlKSB8fCBvYmplY3RQcm90bztcclxuXHJcbiAgcmV0dXJuIHZhbHVlID09PSBwcm90bztcclxufVxyXG5cclxuZnVuY3Rpb24gdG9Tb3VyY2UoZnVuYykge1xyXG4gIGlmIChmdW5jICE9IG51bGwpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIHJldHVybiBmdW5jVG9TdHJpbmcuY2FsbChmdW5jKTtcclxuICAgIH0gY2F0Y2ggKGUpIHt9XHJcbiAgICB0cnkge1xyXG4gICAgICByZXR1cm4gZnVuYyArICcnO1xyXG4gICAgfSBjYXRjaCAoZSkge31cclxuICB9XHJcbiAgcmV0dXJuICcnO1xyXG59XHJcblxyXG5mdW5jdGlvbiB6eGhpZGRlbkN1c3RvbUNsb25lRGVlcEJ5SmVyZW15QXNoa2VuYXModmFsdWUpIHtcclxuICByZXR1cm4gYmFzZUNsb25lKHZhbHVlLCB0cnVlLCB0cnVlKTtcclxufVxyXG5cclxuZnVuY3Rpb24gZXEodmFsdWUsIG90aGVyKSB7XHJcbiAgcmV0dXJuIHZhbHVlID09PSBvdGhlciB8fCAodmFsdWUgIT09IHZhbHVlICYmIG90aGVyICE9PSBvdGhlcik7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzQXJndW1lbnRzKHZhbHVlKSB7XHJcbiAgcmV0dXJuIChcclxuICAgIGlzQXJyYXlMaWtlT2JqZWN0KHZhbHVlKSAmJlxyXG4gICAgaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgJ2NhbGxlZScpICYmXHJcbiAgICAoIXByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwodmFsdWUsICdjYWxsZWUnKSB8fCBvYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKSA9PSBhcmdzVGFnKVxyXG4gICk7XHJcbn1cclxuXHJcbmxldCBpc0FycmF5ID0gQXJyYXkuaXNBcnJheTtcclxuXHJcbmZ1bmN0aW9uIGlzQXJyYXlMaWtlKHZhbHVlKSB7XHJcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgaXNMZW5ndGgodmFsdWUubGVuZ3RoKSAmJiAhaXNGdW5jdGlvbih2YWx1ZSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzQXJyYXlMaWtlT2JqZWN0KHZhbHVlKSB7XHJcbiAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgaXNBcnJheUxpa2UodmFsdWUpO1xyXG59XHJcblxyXG5sZXQgaXNCdWZmZXIgPSBuYXRpdmVJc0J1ZmZlciB8fCBzdHViRmFsc2U7XHJcblxyXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKHZhbHVlKSB7XHJcbiAgbGV0IHRhZyA9IGlzT2JqZWN0KHZhbHVlKSA/IG9iamVjdFRvU3RyaW5nLmNhbGwodmFsdWUpIDogJyc7XHJcbiAgcmV0dXJuIHRhZyA9PSBmdW5jVGFnIHx8IHRhZyA9PSBnZW5UYWc7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzTGVuZ3RoKHZhbHVlKSB7XHJcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnbnVtYmVyJyAmJiB2YWx1ZSA+IC0xICYmIHZhbHVlICUgMSA9PSAwICYmIHZhbHVlIDw9IE1BWF9TQUZFX0lOVEVHRVI7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzT2JqZWN0KHZhbHVlKSB7XHJcbiAgbGV0IHR5cGUgPSB0eXBlb2YgdmFsdWU7XHJcbiAgcmV0dXJuICEhdmFsdWUgJiYgKHR5cGUgPT0gJ29iamVjdCcgfHwgdHlwZSA9PSAnZnVuY3Rpb24nKTtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNPYmplY3RMaWtlKHZhbHVlKSB7XHJcbiAgcmV0dXJuICEhdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09ICdvYmplY3QnO1xyXG59XHJcblxyXG5mdW5jdGlvbiBrZXlzKG9iamVjdCkge1xyXG4gIHJldHVybiBpc0FycmF5TGlrZShvYmplY3QpID8gYXJyYXlMaWtlS2V5cyhvYmplY3QpIDogYmFzZUtleXMob2JqZWN0KTtcclxufVxyXG5cclxuZnVuY3Rpb24gc3R1YkFycmF5KCkge1xyXG4gIHJldHVybiBbXTtcclxufVxyXG5cclxuZnVuY3Rpb24gc3R1YkZhbHNlKCkge1xyXG4gIHJldHVybiBmYWxzZTtcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgenhoaWRkZW5DdXN0b21DbG9uZURlZXBCeUplcmVteUFzaGtlbmFzO1xyXG4iXX0=
|