generated from erangel1/generic-template
25 lines
40 KiB
JavaScript
25 lines
40 KiB
JavaScript
"use strict";
|
||
/*
|
||
* ATTENTION: An "eval-source-map" devtool has been used.
|
||
* This devtool is neither made for production nor for readable output files.
|
||
* It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools.
|
||
* If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
|
||
* or disable the default devtool with "devtool: false".
|
||
* If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
|
||
*/
|
||
exports.id = "vendor-chunks/object-hash";
|
||
exports.ids = ["vendor-chunks/object-hash"];
|
||
exports.modules = {
|
||
|
||
/***/ "(rsc)/./node_modules/object-hash/index.js":
|
||
/*!*******************************************!*\
|
||
!*** ./node_modules/object-hash/index.js ***!
|
||
\*******************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
eval("\n\nvar crypto = __webpack_require__(/*! crypto */ \"crypto\");\n\n/**\n * Exported function\n *\n * Options:\n *\n * - `algorithm` hash algo to be used by this instance: *'sha1', 'md5'\n * - `excludeValues` {true|*false} hash object keys, values ignored\n * - `encoding` hash encoding, supports 'buffer', '*hex', 'binary', 'base64'\n * - `ignoreUnknown` {true|*false} ignore unknown object types\n * - `replacer` optional function that replaces values before hashing\n * - `respectFunctionProperties` {*true|false} consider function properties when hashing\n * - `respectFunctionNames` {*true|false} consider 'name' property of functions for hashing\n * - `respectType` {*true|false} Respect special properties (prototype, constructor)\n * when hashing to distinguish between types\n * - `unorderedArrays` {true|*false} Sort all arrays before hashing\n * - `unorderedSets` {*true|false} Sort `Set` and `Map` instances before hashing\n * * = default\n *\n * @param {object} object value to hash\n * @param {object} options hashing options\n * @return {string} hash value\n * @api public\n */\nexports = module.exports = objectHash;\n\nfunction objectHash(object, options){\n options = applyDefaults(object, options);\n\n return hash(object, options);\n}\n\n/**\n * Exported sugar methods\n *\n * @param {object} object value to hash\n * @return {string} hash value\n * @api public\n */\nexports.sha1 = function(object){\n return objectHash(object);\n};\nexports.keys = function(object){\n return objectHash(object, {excludeValues: true, algorithm: 'sha1', encoding: 'hex'});\n};\nexports.MD5 = function(object){\n return objectHash(object, {algorithm: 'md5', encoding: 'hex'});\n};\nexports.keysMD5 = function(object){\n return objectHash(object, {algorithm: 'md5', encoding: 'hex', excludeValues: true});\n};\n\n// Internals\nvar hashes = crypto.getHashes ? crypto.getHashes().slice() : ['sha1', 'md5'];\nhashes.push('passthrough');\nvar encodings = ['buffer', 'hex', 'binary', 'base64'];\n\nfunction applyDefaults(object, sourceOptions){\n sourceOptions = sourceOptions || {};\n\n // create a copy rather than mutating\n var options = {};\n options.algorithm = sourceOptions.algorithm || 'sha1';\n options.encoding = sourceOptions.encoding || 'hex';\n options.excludeValues = sourceOptions.excludeValues ? true : false;\n options.algorithm = options.algorithm.toLowerCase();\n options.encoding = options.encoding.toLowerCase();\n options.ignoreUnknown = sourceOptions.ignoreUnknown !== true ? false : true; // default to false\n options.respectType = sourceOptions.respectType === false ? false : true; // default to true\n options.respectFunctionNames = sourceOptions.respectFunctionNames === false ? false : true;\n options.respectFunctionProperties = sourceOptions.respectFunctionProperties === false ? false : true;\n options.unorderedArrays = sourceOptions.unorderedArrays !== true ? false : true; // default to false\n options.unorderedSets = sourceOptions.unorderedSets === false ? false : true; // default to false\n options.unorderedObjects = sourceOptions.unorderedObjects === false ? false : true; // default to true\n options.replacer = sourceOptions.replacer || undefined;\n options.excludeKeys = sourceOptions.excludeKeys || undefined;\n\n if(typeof object === 'undefined') {\n throw new Error('Object argument required.');\n }\n\n // if there is a case-insensitive match in the hashes list, accept it\n // (i.e. SHA256 for sha256)\n for (var i = 0; i < hashes.length; ++i) {\n if (hashes[i].toLowerCase() === options.algorithm.toLowerCase()) {\n options.algorithm = hashes[i];\n }\n }\n\n if(hashes.indexOf(options.algorithm) === -1){\n throw new Error('Algorithm \"' + options.algorithm + '\" not supported. ' +\n 'supported values: ' + hashes.join(', '));\n }\n\n if(encodings.indexOf(options.encoding) === -1 &&\n options.algorithm !== 'passthrough'){\n throw new Error('Encoding \"' + options.encoding + '\" not supported. ' +\n 'supported values: ' + encodings.join(', '));\n }\n\n return options;\n}\n\n/** Check if the given function is a native function */\nfunction isNativeFunction(f) {\n if ((typeof f) !== 'function') {\n return false;\n }\n var exp = /^function\\s+\\w*\\s*\\(\\s*\\)\\s*{\\s+\\[native code\\]\\s+}$/i;\n return exp.exec(Function.prototype.toString.call(f)) != null;\n}\n\nfunction hash(object, options) {\n var hashingStream;\n\n if (options.algorithm !== 'passthrough') {\n hashingStream = crypto.createHash(options.algorithm);\n } else {\n hashingStream = new PassThrough();\n }\n\n if (typeof hashingStream.write === 'undefined') {\n hashingStream.write = hashingStream.update;\n hashingStream.end = hashingStream.update;\n }\n\n var hasher = typeHasher(options, hashingStream);\n hasher.dispatch(object);\n if (!hashingStream.update) {\n hashingStream.end('');\n }\n\n if (hashingStream.digest) {\n return hashingStream.digest(options.encoding === 'buffer' ? undefined : options.encoding);\n }\n\n var buf = hashingStream.read();\n if (options.encoding === 'buffer') {\n return buf;\n }\n\n return buf.toString(options.encoding);\n}\n\n/**\n * Expose streaming API\n *\n * @param {object} object Value to serialize\n * @param {object} options Options, as for hash()\n * @param {object} stream A stream to write the serializiation to\n * @api public\n */\nexports.writeToStream = function(object, options, stream) {\n if (typeof stream === 'undefined') {\n stream = options;\n options = {};\n }\n\n options = applyDefaults(object, options);\n\n return typeHasher(options, stream).dispatch(object);\n};\n\nfunction typeHasher(options, writeTo, context){\n context = context || [];\n var write = function(str) {\n if (writeTo.update) {\n return writeTo.update(str, 'utf8');\n } else {\n return writeTo.write(str, 'utf8');\n }\n };\n\n return {\n dispatch: function(value){\n if (options.replacer) {\n value = options.replacer(value);\n }\n\n var type = typeof value;\n if (value === null) {\n type = 'null';\n }\n\n //console.log(\"[DEBUG] Dispatch: \", value, \"->\", type, \" -> \", \"_\" + type);\n\n return this['_' + type](value);\n },\n _object: function(object) {\n var pattern = (/\\[object (.*)\\]/i);\n var objString = Object.prototype.toString.call(object);\n var objType = pattern.exec(objString);\n if (!objType) { // object type did not match [object ...]\n objType = 'unknown:[' + objString + ']';\n } else {\n objType = objType[1]; // take only the class name\n }\n\n objType = objType.toLowerCase();\n\n var objectNumber = null;\n\n if ((objectNumber = context.indexOf(object)) >= 0) {\n return this.dispatch('[CIRCULAR:' + objectNumber + ']');\n } else {\n context.push(object);\n }\n\n if (typeof Buffer !== 'undefined' && Buffer.isBuffer && Buffer.isBuffer(object)) {\n write('buffer:');\n return write(object);\n }\n\n if(objType !== 'object' && objType !== 'function' && objType !== 'asyncfunction') {\n if(this['_' + objType]) {\n this['_' + objType](object);\n } else if (options.ignoreUnknown) {\n return write('[' + objType + ']');\n } else {\n throw new Error('Unknown object type \"' + objType + '\"');\n }\n }else{\n var keys = Object.keys(object);\n if (options.unorderedObjects) {\n keys = keys.sort();\n }\n // Make sure to incorporate special properties, so\n // Types with different prototypes will produce\n // a different hash and objects derived from\n // different functions (`new Foo`, `new Bar`) will\n // produce different hashes.\n // We never do this for native functions since some\n // seem to break because of that.\n if (options.respectType !== false && !isNativeFunction(object)) {\n keys.splice(0, 0, 'prototype', '__proto__', 'constructor');\n }\n\n if (options.excludeKeys) {\n keys = keys.filter(function(key) { return !options.excludeKeys(key); });\n }\n\n write('object:' + keys.length + ':');\n var self = this;\n return keys.forEach(function(key){\n self.dispatch(key);\n write(':');\n if(!options.excludeValues) {\n self.dispatch(object[key]);\n }\n write(',');\n });\n }\n },\n _array: function(arr, unordered){\n unordered = typeof unordered !== 'undefined' ? unordered :\n options.unorderedArrays !== false; // default to options.unorderedArrays\n\n var self = this;\n write('array:' + arr.length + ':');\n if (!unordered || arr.length <= 1) {\n return arr.forEach(function(entry) {\n return self.dispatch(entry);\n });\n }\n\n // the unordered case is a little more complicated:\n // since there is no canonical ordering on objects,\n // i.e. {a:1} < {a:2} and {a:1} > {a:2} are both false,\n // we first serialize each entry using a PassThrough stream\n // before sorting.\n // also: we can’t use the same context array for all entries\n // since the order of hashing should *not* matter. instead,\n // we keep track of the additions to a copy of the context array\n // and add all of them to the global context array when we’re done\n var contextAdditions = [];\n var entries = arr.map(function(entry) {\n var strm = new PassThrough();\n var localContext = context.slice(); // make copy\n var hasher = typeHasher(options, strm, localContext);\n hasher.dispatch(entry);\n // take only what was added to localContext and append it to contextAdditions\n contextAdditions = contextAdditions.concat(localContext.slice(context.length));\n return strm.read().toString();\n });\n context = context.concat(contextAdditions);\n entries.sort();\n return this._array(entries, false);\n },\n _date: function(date){\n return write('date:' + date.toJSON());\n },\n _symbol: function(sym){\n return write('symbol:' + sym.toString());\n },\n _error: function(err){\n return write('error:' + err.toString());\n },\n _boolean: function(bool){\n return write('bool:' + bool.toString());\n },\n _string: function(string){\n write('string:' + string.length + ':');\n write(string.toString());\n },\n _function: function(fn){\n write('fn:');\n if (isNativeFunction(fn)) {\n this.dispatch('[native]');\n } else {\n this.dispatch(fn.toString());\n }\n\n if (options.respectFunctionNames !== false) {\n // Make sure we can still distinguish native functions\n // by their name, otherwise String and Function will\n // have the same hash\n this.dispatch(\"function-name:\" + String(fn.name));\n }\n\n if (options.respectFunctionProperties) {\n this._object(fn);\n }\n },\n _number: function(number){\n return write('number:' + number.toString());\n },\n _xml: function(xml){\n return write('xml:' + xml.toString());\n },\n _null: function() {\n return write('Null');\n },\n _undefined: function() {\n return write('Undefined');\n },\n _regexp: function(regex){\n return write('regex:' + regex.toString());\n },\n _uint8array: function(arr){\n write('uint8array:');\n return this.dispatch(Array.prototype.slice.call(arr));\n },\n _uint8clampedarray: function(arr){\n write('uint8clampedarray:');\n return this.dispatch(Array.prototype.slice.call(arr));\n },\n _int8array: function(arr){\n write('uint8array:');\n return this.dispatch(Array.prototype.slice.call(arr));\n },\n _uint16array: function(arr){\n write('uint16array:');\n return this.dispatch(Array.prototype.slice.call(arr));\n },\n _int16array: function(arr){\n write('uint16array:');\n return this.dispatch(Array.prototype.slice.call(arr));\n },\n _uint32array: function(arr){\n write('uint32array:');\n return this.dispatch(Array.prototype.slice.call(arr));\n },\n _int32array: function(arr){\n write('uint32array:');\n return this.dispatch(Array.prototype.slice.call(arr));\n },\n _float32array: function(arr){\n write('float32array:');\n return this.dispatch(Array.prototype.slice.call(arr));\n },\n _float64array: function(arr){\n write('float64array:');\n return this.dispatch(Array.prototype.slice.call(arr));\n },\n _arraybuffer: function(arr){\n write('arraybuffer:');\n return this.dispatch(new Uint8Array(arr));\n },\n _url: function(url) {\n return write('url:' + url.toString(), 'utf8');\n },\n _map: function(map) {\n write('map:');\n var arr = Array.from(map);\n return this._array(arr, options.unorderedSets !== false);\n },\n _set: function(set) {\n write('set:');\n var arr = Array.from(set);\n return this._array(arr, options.unorderedSets !== false);\n },\n _file: function(file) {\n write('file:');\n return this.dispatch([file.name, file.size, file.type, file.lastModfied]);\n },\n _blob: function() {\n if (options.ignoreUnknown) {\n return write('[blob]');\n }\n\n throw Error('Hashing Blob objects is currently not supported\\n' +\n '(see https://github.com/puleos/object-hash/issues/26)\\n' +\n 'Use \"options.replacer\" or \"options.ignoreUnknown\"\\n');\n },\n _domwindow: function() { return write('domwindow'); },\n _bigint: function(number){\n return write('bigint:' + number.toString());\n },\n /* Node.js standard native objects */\n _process: function() { return write('process'); },\n _timer: function() { return write('timer'); },\n _pipe: function() { return write('pipe'); },\n _tcp: function() { return write('tcp'); },\n _udp: function() { return write('udp'); },\n _tty: function() { return write('tty'); },\n _statwatcher: function() { return write('statwatcher'); },\n _securecontext: function() { return write('securecontext'); },\n _connection: function() { return write('connection'); },\n _zlib: function() { return write('zlib'); },\n _context: function() { return write('context'); },\n _nodescript: function() { return write('nodescript'); },\n _httpparser: function() { return write('httpparser'); },\n _dataview: function() { return write('dataview'); },\n _signal: function() { return write('signal'); },\n _fsevent: function() { return write('fsevent'); },\n _tlswrap: function() { return write('tlswrap'); },\n };\n}\n\n// Mini-implementation of stream.PassThrough\n// We are far from having need for the full implementation, and we can\n// make assumptions like \"many writes, then only one final read\"\n// and we can ignore encoding specifics\nfunction PassThrough() {\n return {\n buf: '',\n\n write: function(b) {\n this.buf += b;\n },\n\n end: function(b) {\n this.buf += b;\n },\n\n read: function() {\n return this.buf;\n }\n };\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9ub2RlX21vZHVsZXMvb2JqZWN0LWhhc2gvaW5kZXguanMiLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIsYUFBYSxtQkFBTyxDQUFDLHNCQUFROztBQUU3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsYUFBYTtBQUNwQztBQUNBLHVCQUF1QixhQUFhO0FBQ3BDO0FBQ0EsbUNBQW1DLGFBQWE7QUFDaEQsOEJBQThCLGFBQWE7QUFDM0MscUJBQXFCLGFBQWE7QUFDbEM7QUFDQSx5QkFBeUIsYUFBYTtBQUN0Qyx1QkFBdUIsYUFBYTtBQUNwQztBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixZQUFZLFFBQVE7QUFDcEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsWUFBWSxRQUFRO0FBQ3BCO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBLFlBQVk7QUFDWiw2QkFBNkIsd0RBQXdEO0FBQ3JGO0FBQ0EsV0FBVztBQUNYLDZCQUE2QixrQ0FBa0M7QUFDL0Q7QUFDQSxlQUFlO0FBQ2YsNkJBQTZCLHVEQUF1RDtBQUNwRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0VBQStFO0FBQy9FLDRFQUE0RTtBQUM1RTtBQUNBO0FBQ0EsbUZBQW1GO0FBQ25GLGdGQUFnRjtBQUNoRixzRkFBc0Y7QUFDdEY7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGtCQUFrQixtQkFBbUI7QUFDckM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQ0FBMEMsc0JBQXNCO0FBQ2hFO0FBQ0E7O0FBRUE7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QXNCO0FBQzdDLHVCQUF1QixzQkFBc0I7QUFDN0MsdUJBQXVCLHNCQUFzQjtBQUM3QywrQkFBK0IsOEJBQThCO0FBQzdELGlDQUFpQyxnQ0FBZ0M7QUFDakUsOEJBQThCLDZCQUE2QjtBQUMzRCx3QkFBd0IsdUJBQXVCO0FBQy9DLDJCQUEyQiwwQkFBMEI7QUFDckQsOEJBQThCLDZCQUE2QjtBQUMzRCw4QkFBOEIsNkJBQTZCO0FBQzNELDRCQUE0QiwyQkFBMkI7QUFDdkQsMEJBQTBCLHlCQUF5QjtBQUNuRCwyQkFBMkIsMEJBQTBCO0FBQ3JELDJCQUEyQiwwQkFBMEI7QUFDckQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vbGFiZ3JhcGgtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvb2JqZWN0LWhhc2gvaW5kZXguanM/ZjMzMSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBjcnlwdG8gPSByZXF1aXJlKCdjcnlwdG8nKTtcblxuLyoqXG4gKiBFeHBvcnRlZCBmdW5jdGlvblxuICpcbiAqIE9wdGlvbnM6XG4gKlxuICogIC0gYGFsZ29yaXRobWAgaGFzaCBhbGdvIHRvIGJlIHVzZWQgYnkgdGhpcyBpbnN0YW5jZTogKidzaGExJywgJ21kNSdcbiAqICAtIGBleGNsdWRlVmFsdWVzYCB7dHJ1ZXwqZmFsc2V9IGhhc2ggb2JqZWN0IGtleXMsIHZhbHVlcyBpZ25vcmVkXG4gKiAgLSBgZW5jb2RpbmdgIGhhc2ggZW5jb2RpbmcsIHN1cHBvcnRzICdidWZmZXInLCAnKmhleCcsICdiaW5hcnknLCAnYmFzZTY0J1xuICogIC0gYGlnbm9yZVVua25vd25gIHt0cnVlfCpmYWxzZX0gaWdub3JlIHVua25vd24gb2JqZWN0IHR5cGVzXG4gKiAgLSBgcmVwbGFjZXJgIG9wdGlvbmFsIGZ1bmN0aW9uIHRoYXQgcmVwbGFjZXMgdmFsdWVzIGJlZm9yZSBoYXNoaW5nXG4gKiAgLSBgcmVzcGVjdEZ1bmN0aW9uUHJvcGVydGllc2Ageyp0cnVlfGZhbHNlfSBjb25zaWRlciBmdW5jdGlvbiBwcm9wZXJ0aWVzIHdoZW4gaGFzaGluZ1xuICogIC0gYHJlc3BlY3RGdW5jdGlvbk5hbWVzYCB7KnRydWV8ZmFsc2V9IGNvbnNpZGVyICduYW1lJyBwcm9wZXJ0eSBvZiBmdW5jdGlvbnMgZm9yIGhhc2hpbmdcbiAqICAtIGByZXNwZWN0VHlwZWAgeyp0cnVlfGZhbHNlfSBSZXNwZWN0IHNwZWNpYWwgcHJvcGVydGllcyAocHJvdG90eXBlLCBjb25zdHJ1Y3RvcilcbiAqICAgIHdoZW4gaGFzaGluZyB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIHR5cGVzXG4gKiAgLSBgdW5vcmRlcmVkQXJyYXlzYCB7dHJ1ZXwqZmFsc2V9IFNvcnQgYWxsIGFycmF5cyBiZWZvcmUgaGFzaGluZ1xuICogIC0gYHVub3JkZXJlZFNldHNgIHsqdHJ1ZXxmYWxzZX0gU29ydCBgU2V0YCBhbmQgYE1hcGAgaW5zdGFuY2VzIGJlZm9yZSBoYXNoaW5nXG4gKiAgKiA9IGRlZmF1bHRcbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gb2JqZWN0IHZhbHVlIHRvIGhhc2hcbiAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zIGhhc2hpbmcgb3B0aW9uc1xuICogQHJldHVybiB7c3RyaW5nfSBoYXNoIHZhbHVlXG4gKiBAYXBpIHB1YmxpY1xuICovXG5leHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSBvYmplY3RIYXNoO1xuXG5mdW5jdGlvbiBvYmplY3RIYXNoKG9iamVjdCwgb3B0aW9ucyl7XG4gIG9wdGlvbnMgPSBhcHBseURlZmF1bHRzKG9iamVjdCwgb3B0aW9ucyk7XG5cbiAgcmV0dXJuIGhhc2gob2JqZWN0LCBvcHRpb25zKTtcbn1cblxuLyoqXG4gKiBFeHBvcnRlZCBzdWdhciBtZXRob2RzXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG9iamVjdCB2YWx1ZSB0byBoYXNoXG4gKiBAcmV0dXJuIHtzdHJpbmd9IGhhc2ggdmFsdWVcbiAqIEBhcGkgcHVibGljXG4gKi9cbmV4cG9ydHMuc2hhMSA9IGZ1bmN0aW9uKG9iamVjdCl7XG4gIHJldHVybiBvYmplY3RIYXNoKG9iamVjdCk7XG59O1xuZXhwb3J0cy5rZXlzID0gZnVuY3Rpb24ob2JqZWN0KXtcbiAgcmV0dXJuIG9iamVjdEhhc2gob2JqZWN0LCB7ZXhjbHVkZVZhbHVlczogdHJ1ZSwgYWxnb3JpdGhtOiAnc2hhMScsIGVuY29kaW5nOiAnaGV4J30pO1xufTtcbmV4cG9ydHMuTUQ1ID0gZnVuY3Rpb24ob2JqZWN0KXtcbiAgcmV0dXJuIG9iamVjdEhhc2gob2JqZWN0LCB7YWxnb3JpdGhtOiAnbWQ1JywgZW5jb2Rpbmc6ICdoZXgnfSk7XG59O1xuZXhwb3J0cy5rZXlzTUQ1ID0gZnVuY3Rpb24ob2JqZWN0KXtcbiAgcmV0dXJuIG9iamVjdEhhc2gob2JqZWN0LCB7YWxnb3JpdGhtOiAnbWQ1JywgZW5jb2Rpbmc6ICdoZXgnLCBleGNsdWRlVmFsdWVzOiB0cnVlfSk7XG59O1xuXG4vLyBJbnRlcm5hbHNcbnZhciBoYXNoZXMgPSBjcnlwdG8uZ2V0SGFzaGVzID8gY3J5cHRvLmdldEhhc2hlcygpLnNsaWNlKCkgOiBbJ3NoYTEnLCAnbWQ1J107XG5oYXNoZXMucHVzaCgncGFzc3Rocm91Z2gnKTtcbnZhciBlbmNvZGluZ3MgPSBbJ2J1ZmZlcicsICdoZXgnLCAnYmluYXJ5JywgJ2Jhc2U2NCddO1xuXG5mdW5jdGlvbiBhcHBseURlZmF1bHRzKG9iamVjdCwgc291cmNlT3B0aW9ucyl7XG4gIHNvdXJjZU9wdGlvbnMgPSBzb3VyY2VPcHRpb25zIHx8IHt9O1xuXG4gIC8vIGNyZWF0ZSBhIGNvcHkgcmF0aGVyIHRoYW4gbXV0YXRpbmdcbiAgdmFyIG9wdGlvbnMgPSB7fTtcbiAgb3B0aW9ucy5hbGdvcml0aG0gPSBzb3VyY2VPcHRpb25zLmFsZ29yaXRobSB8fCAnc2hhMSc7XG4gIG9wdGlvbnMuZW5jb2RpbmcgPSBzb3VyY2VPcHRpb25zLmVuY29kaW5nIHx8ICdoZXgnO1xuICBvcHRpb25zLmV4Y2x1ZGVWYWx1ZXMgPSBzb3VyY2VPcHRpb25zLmV4Y2x1ZGVWYWx1ZXMgPyB0cnVlIDogZmFsc2U7XG4gIG9wdGlvbnMuYWxnb3JpdGhtID0gb3B0aW9ucy5hbGdvcml0aG0udG9Mb3dlckNhc2UoKTtcbiAgb3B0aW9ucy5lbmNvZGluZyA9IG9wdGlvbnMuZW5jb2RpbmcudG9Mb3dlckNhc2UoKTtcbiAgb3B0aW9ucy5pZ25vcmVVbmtub3duID0gc291cmNlT3B0aW9ucy5pZ25vcmVVbmtub3duICE9PSB0cnVlID8gZmFsc2UgOiB0cnVlOyAvLyBkZWZhdWx0IHRvIGZhbHNlXG4gIG9wdGlvbnMucmVzcGVjdFR5cGUgPSBzb3VyY2VPcHRpb25zLnJlc3BlY3RUeXBlID09PSBmYWxzZSA/IGZhbHNlIDogdHJ1ZTsgLy8gZGVmYXVsdCB0byB0cnVlXG4gIG9wdGlvbnMucmVzcGVjdEZ1bmN0aW9uTmFtZXMgPSBzb3VyY2VPcHRpb25zLnJlc3BlY3RGdW5jdGlvbk5hbWVzID09PSBmYWxzZSA/IGZhbHNlIDogdHJ1ZTtcbiAgb3B0aW9ucy5yZXNwZWN0RnVuY3Rpb25Qcm9wZXJ0aWVzID0gc291cmNlT3B0aW9ucy5yZXNwZWN0RnVuY3Rpb25Qcm9wZXJ0aWVzID09PSBmYWxzZSA/IGZhbHNlIDogdHJ1ZTtcbiAgb3B0aW9ucy51bm9yZGVyZWRBcnJheXMgPSBzb3VyY2VPcHRpb25zLnVub3JkZXJlZEFycmF5cyAhPT0gdHJ1ZSA/IGZhbHNlIDogdHJ1ZTsgLy8gZGVmYXVsdCB0byBmYWxzZVxuICBvcHRpb25zLnVub3JkZXJlZFNldHMgPSBzb3VyY2VPcHRpb25zLnVub3JkZXJlZFNldHMgPT09IGZhbHNlID8gZmFsc2UgOiB0cnVlOyAvLyBkZWZhdWx0IHRvIGZhbHNlXG4gIG9wdGlvbnMudW5vcmRlcmVkT2JqZWN0cyA9IHNvdXJjZU9wdGlvbnMudW5vcmRlcmVkT2JqZWN0cyA9PT0gZmFsc2UgPyBmYWxzZSA6IHRydWU7IC8vIGRlZmF1bHQgdG8gdHJ1ZVxuICBvcHRpb25zLnJlcGxhY2VyID0gc291cmNlT3B0aW9ucy5yZXBsYWNlciB8fCB1bmRlZmluZWQ7XG4gIG9wdGlvbnMuZXhjbHVkZUtleXMgPSBzb3VyY2VPcHRpb25zLmV4Y2x1ZGVLZXlzIHx8IHVuZGVmaW5lZDtcblxuICBpZih0eXBlb2Ygb2JqZWN0ID09PSAndW5kZWZpbmVkJykge1xuICAgIHRocm93IG5ldyBFcnJvcignT2JqZWN0IGFyZ3VtZW50IHJlcXVpcmVkLicpO1xuICB9XG5cbiAgLy8gaWYgdGhlcmUgaXMgYSBjYXNlLWluc2Vuc2l0aXZlIG1hdGNoIGluIHRoZSBoYXNoZXMgbGlzdCwgYWNjZXB0IGl0XG4gIC8vIChpLmUuIFNIQTI1NiBmb3Igc2hhMjU2KVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGhhc2hlcy5sZW5ndGg7ICsraSkge1xuICAgIGlmIChoYXNoZXNbaV0udG9Mb3dlckNhc2UoKSA9PT0gb3B0aW9ucy5hbGdvcml0aG0udG9Mb3dlckNhc2UoKSkge1xuICAgICAgb3B0aW9ucy5hbGdvcml0aG0gPSBoYXNoZXNbaV07XG4gICAgfVxuICB9XG5cbiAgaWYoaGFzaGVzLmluZGV4T2Yob3B0aW9ucy5hbGdvcml0aG0pID09PSAtMSl7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdBbGdvcml0aG0gXCInICsgb3B0aW9ucy5hbGdvcml0aG0gKyAnXCIgIG5vdCBzdXBwb3J0ZWQuICcgK1xuICAgICAgJ3N1cHBvcnRlZCB2YWx1ZXM6ICcgKyBoYXNoZXMuam9pbignLCAnKSk7XG4gIH1cblxuICBpZihlbmNvZGluZ3MuaW5kZXhPZihvcHRpb25zLmVuY29kaW5nKSA9PT0gLTEgJiZcbiAgICAgb3B0aW9ucy5hbGdvcml0aG0gIT09ICdwYXNzdGhyb3VnaCcpe1xuICAgIHRocm93IG5ldyBFcnJvcignRW5jb2RpbmcgXCInICsgb3B0aW9ucy5lbmNvZGluZyArICdcIiAgbm90IHN1cHBvcnRlZC4gJyArXG4gICAgICAnc3VwcG9ydGVkIHZhbHVlczogJyArIGVuY29kaW5ncy5qb2luKCcsICcpKTtcbiAgfVxuXG4gIHJldHVybiBvcHRpb25zO1xufVxuXG4vKiogQ2hlY2sgaWYgdGhlIGdpdmVuIGZ1bmN0aW9uIGlzIGEgbmF0aXZlIGZ1bmN0aW9uICovXG5mdW5jdGlvbiBpc05hdGl2ZUZ1bmN0aW9uKGYpIHtcbiAgaWYgKCh0eXBlb2YgZikgIT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIGV4cCA9IC9eZnVuY3Rpb25cXHMrXFx3KlxccypcXChcXHMqXFwpXFxzKntcXHMrXFxbbmF0aXZlIGNvZGVcXF1cXHMrfSQvaTtcbiAgcmV0dXJuIGV4cC5leGVjKEZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGYpKSAhPSBudWxsO1xufVxuXG5mdW5jdGlvbiBoYXNoKG9iamVjdCwgb3B0aW9ucykge1xuICB2YXIgaGFzaGluZ1N0cmVhbTtcblxuICBpZiAob3B0aW9ucy5hbGdvcml0aG0gIT09ICdwYXNzdGhyb3VnaCcpIHtcbiAgICBoYXNoaW5nU3RyZWFtID0gY3J5cHRvLmNyZWF0ZUhhc2gob3B0aW9ucy5hbGdvcml0aG0pO1xuICB9IGVsc2Uge1xuICAgIGhhc2hpbmdTdHJlYW0gPSBuZXcgUGFzc1Rocm91Z2goKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgaGFzaGluZ1N0cmVhbS53cml0ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBoYXNoaW5nU3RyZWFtLndyaXRlID0gaGFzaGluZ1N0cmVhbS51cGRhdGU7XG4gICAgaGFzaGluZ1N0cmVhbS5lbmQgICA9IGhhc2hpbmdTdHJlYW0udXBkYXRlO1xuICB9XG5cbiAgdmFyIGhhc2hlciA9IHR5cGVIYXNoZXIob3B0aW9ucywgaGFzaGluZ1N0cmVhbSk7XG4gIGhhc2hlci5kaXNwYXRjaChvYmplY3QpO1xuICBpZiAoIWhhc2hpbmdTdHJlYW0udXBkYXRlKSB7XG4gICAgaGFzaGluZ1N0cmVhbS5lbmQoJycpO1xuICB9XG5cbiAgaWYgKGhhc2hpbmdTdHJlYW0uZGlnZXN0KSB7XG4gICAgcmV0dXJuIGhhc2hpbmdTdHJlYW0uZGlnZXN0KG9wdGlvbnMuZW5jb2RpbmcgPT09ICdidWZmZXInID8gdW5kZWZpbmVkIDogb3B0aW9ucy5lbmNvZGluZyk7XG4gIH1cblxuICB2YXIgYnVmID0gaGFzaGluZ1N0cmVhbS5yZWFkKCk7XG4gIGlmIChvcHRpb25zLmVuY29kaW5nID09PSAnYnVmZmVyJykge1xuICAgIHJldHVybiBidWY7XG4gIH1cblxuICByZXR1cm4gYnVmLnRvU3RyaW5nKG9wdGlvbnMuZW5jb2RpbmcpO1xufVxuXG4vKipcbiAqIEV4cG9zZSBzdHJlYW1pbmcgQVBJXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG9iamVjdCAgVmFsdWUgdG8gc2VyaWFsaXplXG4gKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucyAgT3B0aW9ucywgYXMgZm9yIGhhc2goKVxuICogQHBhcmFtIHtvYmplY3R9IHN0cmVhbSAgQSBzdHJlYW0gdG8gd3JpdGUgdGhlIHNlcmlhbGl6aWF0aW9uIHRvXG4gKiBAYXBpIHB1YmxpY1xuICovXG5leHBvcnRzLndyaXRlVG9TdHJlYW0gPSBmdW5jdGlvbihvYmplY3QsIG9wdGlvbnMsIHN0cmVhbSkge1xuICBpZiAodHlwZW9mIHN0cmVhbSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBzdHJlYW0gPSBvcHRpb25zO1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuXG4gIG9wdGlvbnMgPSBhcHBseURlZmF1bHRzKG9iamVjdCwgb3B0aW9ucyk7XG5cbiAgcmV0dXJuIHR5cGVIYXNoZXIob3B0aW9ucywgc3RyZWFtKS5kaXNwYXRjaChvYmplY3QpO1xufTtcblxuZnVuY3Rpb24gdHlwZUhhc2hlcihvcHRpb25zLCB3cml0ZVRvLCBjb250ZXh0KXtcbiAgY29udGV4dCA9IGNvbnRleHQgfHwgW107XG4gIHZhciB3cml0ZSA9IGZ1bmN0aW9uKHN0cikge1xuICAgIGlmICh3cml0ZVRvLnVwZGF0ZSkge1xuICAgICAgcmV0dXJuIHdyaXRlVG8udXBkYXRlKHN0ciwgJ3V0ZjgnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHdyaXRlVG8ud3JpdGUoc3RyLCAndXRmOCcpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4ge1xuICAgIGRpc3BhdGNoOiBmdW5jdGlvbih2YWx1ZSl7XG4gICAgICBpZiAob3B0aW9ucy5yZXBsYWNlcikge1xuICAgICAgICB2YWx1ZSA9IG9wdGlvbnMucmVwbGFjZXIodmFsdWUpO1xuICAgICAgfVxuXG4gICAgICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICB0eXBlID0gJ251bGwnO1xuICAgICAgfVxuXG4gICAgICAvL2NvbnNvbGUubG9nKFwiW0RFQlVHXSBEaXNwYXRjaDogXCIsIHZhbHVlLCBcIi0+XCIsIHR5cGUsIFwiIC0+IFwiLCBcIl9cIiArIHR5cGUpO1xuXG4gICAgICByZXR1cm4gdGhpc1snXycgKyB0eXBlXSh2YWx1ZSk7XG4gICAgfSxcbiAgICBfb2JqZWN0OiBmdW5jdGlvbihvYmplY3QpIHtcbiAgICAgIHZhciBwYXR0ZXJuID0gKC9cXFtvYmplY3QgKC4qKVxcXS9pKTtcbiAgICAgIHZhciBvYmpTdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqZWN0KTtcbiAgICAgIHZhciBvYmpUeXBlID0gcGF0dGVybi5leGVjKG9ialN0cmluZyk7XG4gICAgICBpZiAoIW9ialR5cGUpIHsgLy8gb2JqZWN0IHR5cGUgZGlkIG5vdCBtYXRjaCBbb2JqZWN0IC4uLl1cbiAgICAgICAgb2JqVHlwZSA9ICd1bmtub3duOlsnICsgb2JqU3RyaW5nICsgJ10nO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb2JqVHlwZSA9IG9ialR5cGVbMV07IC8vIHRha2Ugb25seSB0aGUgY2xhc3MgbmFtZVxuICAgICAgfVxuXG4gICAgICBvYmpUeXBlID0gb2JqVHlwZS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICB2YXIgb2JqZWN0TnVtYmVyID0gbnVsbDtcblxuICAgICAgaWYgKChvYmplY3ROdW1iZXIgPSBjb250ZXh0LmluZGV4T2Yob2JqZWN0KSkgPj0gMCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kaXNwYXRjaCgnW0NJUkNVTEFSOicgKyBvYmplY3ROdW1iZXIgKyAnXScpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29udGV4dC5wdXNoKG9iamVjdCk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgQnVmZmVyICE9PSAndW5kZWZpbmVkJyAmJiBCdWZmZXIuaXNCdWZmZXIgJiYgQnVmZmVyLmlzQnVmZmVyKG9iamVjdCkpIHtcbiAgICAgICAgd3JpdGUoJ2J1ZmZlcjonKTtcbiAgICAgICAgcmV0dXJuIHdyaXRlKG9iamVjdCk7XG4gICAgICB9XG5cbiAgICAgIGlmKG9ialR5cGUgIT09ICdvYmplY3QnICYmIG9ialR5cGUgIT09ICdmdW5jdGlvbicgJiYgb2JqVHlwZSAhPT0gJ2FzeW5jZnVuY3Rpb24nKSB7XG4gICAgICAgIGlmKHRoaXNbJ18nICsgb2JqVHlwZV0pIHtcbiAgICAgICAgICB0aGlzWydfJyArIG9ialR5cGVdKG9iamVjdCk7XG4gICAgICAgIH0gZWxzZSBpZiAob3B0aW9ucy5pZ25vcmVVbmtub3duKSB7XG4gICAgICAgICAgcmV0dXJuIHdyaXRlKCdbJyArIG9ialR5cGUgKyAnXScpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5rbm93biBvYmplY3QgdHlwZSBcIicgKyBvYmpUeXBlICsgJ1wiJyk7XG4gICAgICAgIH1cbiAgICAgIH1lbHNle1xuICAgICAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7XG4gICAgICAgIGlmIChvcHRpb25zLnVub3JkZXJlZE9iamVjdHMpIHtcbiAgICAgICAgICBrZXlzID0ga2V5cy5zb3J0KCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gTWFrZSBzdXJlIHRvIGluY29ycG9yYXRlIHNwZWNpYWwgcHJvcGVydGllcywgc29cbiAgICAgICAgLy8gVHlwZXMgd2l0aCBkaWZmZXJlbnQgcHJvdG90eXBlcyB3aWxsIHByb2R1Y2VcbiAgICAgICAgLy8gYSBkaWZmZXJlbnQgaGFzaCBhbmQgb2JqZWN0cyBkZXJpdmVkIGZyb21cbiAgICAgICAgLy8gZGlmZmVyZW50IGZ1bmN0aW9ucyAoYG5ldyBGb29gLCBgbmV3IEJhcmApIHdpbGxcbiAgICAgICAgLy8gcHJvZHVjZSBkaWZmZXJlbnQgaGFzaGVzLlxuICAgICAgICAvLyBXZSBuZXZlciBkbyB0aGlzIGZvciBuYXRpdmUgZnVuY3Rpb25zIHNpbmNlIHNvbWVcbiAgICAgICAgLy8gc2VlbSB0byBicmVhayBiZWNhdXNlIG9mIHRoYXQuXG4gICAgICAgIGlmIChvcHRpb25zLnJlc3BlY3RUeXBlICE9PSBmYWxzZSAmJiAhaXNOYXRpdmVGdW5jdGlvbihvYmplY3QpKSB7XG4gICAgICAgICAga2V5cy5zcGxpY2UoMCwgMCwgJ3Byb3RvdHlwZScsICdfX3Byb3RvX18nLCAnY29uc3RydWN0b3InKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zLmV4Y2x1ZGVLZXlzKSB7XG4gICAgICAgICAga2V5cyA9IGtleXMuZmlsdGVyKGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gIW9wdGlvbnMuZXhjbHVkZUtleXMoa2V5KTsgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB3cml0ZSgnb2JqZWN0OicgKyBrZXlzLmxlbmd0aCArICc6Jyk7XG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAgICAgcmV0dXJuIGtleXMuZm9yRWFjaChmdW5jdGlvbihrZXkpe1xuICAgICAgICAgIHNlbGYuZGlzcGF0Y2goa2V5KTtcbiAgICAgICAgICB3cml0ZSgnOicpO1xuICAgICAgICAgIGlmKCFvcHRpb25zLmV4Y2x1ZGVWYWx1ZXMpIHtcbiAgICAgICAgICAgIHNlbGYuZGlzcGF0Y2gob2JqZWN0W2tleV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICB3cml0ZSgnLCcpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIF9hcnJheTogZnVuY3Rpb24oYXJyLCB1bm9yZGVyZWQpe1xuICAgICAgdW5vcmRlcmVkID0gdHlwZW9mIHVub3JkZXJlZCAhPT0gJ3VuZGVmaW5lZCcgPyB1bm9yZGVyZWQgOlxuICAgICAgICBvcHRpb25zLnVub3JkZXJlZEFycmF5cyAhPT0gZmFsc2U7IC8vIGRlZmF1bHQgdG8gb3B0aW9ucy51bm9yZGVyZWRBcnJheXNcblxuICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgICAgd3JpdGUoJ2FycmF5OicgKyBhcnIubGVuZ3RoICsgJzonKTtcbiAgICAgIGlmICghdW5vcmRlcmVkIHx8IGFyci5sZW5ndGggPD0gMSkge1xuICAgICAgICByZXR1cm4gYXJyLmZvckVhY2goZnVuY3Rpb24oZW50cnkpIHtcbiAgICAgICAgICByZXR1cm4gc2VsZi5kaXNwYXRjaChlbnRyeSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICAvLyB0aGUgdW5vcmRlcmVkIGNhc2UgaXMgYSBsaXR0bGUgbW9yZSBjb21wbGljYXRlZDpcbiAgICAgIC8vIHNpbmNlIHRoZXJlIGlzIG5vIGNhbm9uaWNhbCBvcmRlcmluZyBvbiBvYmplY3RzLFxuICAgICAgLy8gaS5lLiB7YToxfSA8IHthOjJ9IGFuZCB7YToxfSA+IHthOjJ9IGFyZSBib3RoIGZhbHNlLFxuICAgICAgLy8gd2UgZmlyc3Qgc2VyaWFsaXplIGVhY2ggZW50cnkgdXNpbmcgYSBQYXNzVGhyb3VnaCBzdHJlYW1cbiAgICAgIC8vIGJlZm9yZSBzb3J0aW5nLlxuICAgICAgLy8gYWxzbzogd2UgY2Fu4oCZdCB1c2UgdGhlIHNhbWUgY29udGV4dCBhcnJheSBmb3IgYWxsIGVudHJpZXNcbiAgICAgIC8vIHNpbmNlIHRoZSBvcmRlciBvZiBoYXNoaW5nIHNob3VsZCAqbm90KiBtYXR0ZXIuIGluc3RlYWQsXG4gICAgICAvLyB3ZSBrZWVwIHRyYWNrIG9mIHRoZSBhZGRpdGlvbnMgdG8gYSBjb3B5IG9mIHRoZSBjb250ZXh0IGFycmF5XG4gICAgICAvLyBhbmQgYWRkIGFsbCBvZiB0aGVtIHRvIHRoZSBnbG9iYWwgY29udGV4dCBhcnJheSB3aGVuIHdl4oCZcmUgZG9uZVxuICAgICAgdmFyIGNvbnRleHRBZGRpdGlvbnMgPSBbXTtcbiAgICAgIHZhciBlbnRyaWVzID0gYXJyLm1hcChmdW5jdGlvbihlbnRyeSkge1xuICAgICAgICB2YXIgc3RybSA9IG5ldyBQYXNzVGhyb3VnaCgpO1xuICAgICAgICB2YXIgbG9jYWxDb250ZXh0ID0gY29udGV4dC5zbGljZSgpOyAvLyBtYWtlIGNvcHlcbiAgICAgICAgdmFyIGhhc2hlciA9IHR5cGVIYXNoZXIob3B0aW9ucywgc3RybSwgbG9jYWxDb250ZXh0KTtcbiAgICAgICAgaGFzaGVyLmRpc3BhdGNoKGVudHJ5KTtcbiAgICAgICAgLy8gdGFrZSBvbmx5IHdoYXQgd2FzIGFkZGVkIHRvIGxvY2FsQ29udGV4dCBhbmQgYXBwZW5kIGl0IHRvIGNvbnRleHRBZGRpdGlvbnNcbiAgICAgICAgY29udGV4dEFkZGl0aW9ucyA9IGNvbnRleHRBZGRpdGlvbnMuY29uY2F0KGxvY2FsQ29udGV4dC5zbGljZShjb250ZXh0Lmxlbmd0aCkpO1xuICAgICAgICByZXR1cm4gc3RybS5yZWFkKCkudG9TdHJpbmcoKTtcbiAgICAgIH0pO1xuICAgICAgY29udGV4dCA9IGNvbnRleHQuY29uY2F0KGNvbnRleHRBZGRpdGlvbnMpO1xuICAgICAgZW50cmllcy5zb3J0KCk7XG4gICAgICByZXR1cm4gdGhpcy5fYXJyYXkoZW50cmllcywgZmFsc2UpO1xuICAgIH0sXG4gICAgX2RhdGU6IGZ1bmN0aW9uKGRhdGUpe1xuICAgICAgcmV0dXJuIHdyaXRlKCdkYXRlOicgKyBkYXRlLnRvSlNPTigpKTtcbiAgICB9LFxuICAgIF9zeW1ib2w6IGZ1bmN0aW9uKHN5bSl7XG4gICAgICByZXR1cm4gd3JpdGUoJ3N5bWJvbDonICsgc3ltLnRvU3RyaW5nKCkpO1xuICAgIH0sXG4gICAgX2Vycm9yOiBmdW5jdGlvbihlcnIpe1xuICAgICAgcmV0dXJuIHdyaXRlKCdlcnJvcjonICsgZXJyLnRvU3RyaW5nKCkpO1xuICAgIH0sXG4gICAgX2Jvb2xlYW46IGZ1bmN0aW9uKGJvb2wpe1xuICAgICAgcmV0dXJuIHdyaXRlKCdib29sOicgKyBib29sLnRvU3RyaW5nKCkpO1xuICAgIH0sXG4gICAgX3N0cmluZzogZnVuY3Rpb24oc3RyaW5nKXtcbiAgICAgIHdyaXRlKCdzdHJpbmc6JyArIHN0cmluZy5sZW5ndGggKyAnOicpO1xuICAgICAgd3JpdGUoc3RyaW5nLnRvU3RyaW5nKCkpO1xuICAgIH0sXG4gICAgX2Z1bmN0aW9uOiBmdW5jdGlvbihmbil7XG4gICAgICB3cml0ZSgnZm46Jyk7XG4gICAgICBpZiAoaXNOYXRpdmVGdW5jdGlvbihmbikpIHtcbiAgICAgICAgdGhpcy5kaXNwYXRjaCgnW25hdGl2ZV0nKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2goZm4udG9TdHJpbmcoKSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLnJlc3BlY3RGdW5jdGlvbk5hbWVzICE9PSBmYWxzZSkge1xuICAgICAgICAvLyBNYWtlIHN1cmUgd2UgY2FuIHN0aWxsIGRpc3Rpbmd1aXNoIG5hdGl2ZSBmdW5jdGlvbnNcbiAgICAgICAgLy8gYnkgdGhlaXIgbmFtZSwgb3RoZXJ3aXNlIFN0cmluZyBhbmQgRnVuY3Rpb24gd2lsbFxuICAgICAgICAvLyBoYXZlIHRoZSBzYW1lIGhhc2hcbiAgICAgICAgdGhpcy5kaXNwYXRjaChcImZ1bmN0aW9uLW5hbWU6XCIgKyBTdHJpbmcoZm4ubmFtZSkpO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5yZXNwZWN0RnVuY3Rpb25Qcm9wZXJ0aWVzKSB7XG4gICAgICAgIHRoaXMuX29iamVjdChmbik7XG4gICAgICB9XG4gICAgfSxcbiAgICBfbnVtYmVyOiBmdW5jdGlvbihudW1iZXIpe1xuICAgICAgcmV0dXJuIHdyaXRlKCdudW1iZXI6JyArIG51bWJlci50b1N0cmluZygpKTtcbiAgICB9LFxuICAgIF94bWw6IGZ1bmN0aW9uKHhtbCl7XG4gICAgICByZXR1cm4gd3JpdGUoJ3htbDonICsgeG1sLnRvU3RyaW5nKCkpO1xuICAgIH0sXG4gICAgX251bGw6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHdyaXRlKCdOdWxsJyk7XG4gICAgfSxcbiAgICBfdW5kZWZpbmVkOiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB3cml0ZSgnVW5kZWZpbmVkJyk7XG4gICAgfSxcbiAgICBfcmVnZXhwOiBmdW5jdGlvbihyZWdleCl7XG4gICAgICByZXR1cm4gd3JpdGUoJ3JlZ2V4OicgKyByZWdleC50b1N0cmluZygpKTtcbiAgICB9LFxuICAgIF91aW50OGFycmF5OiBmdW5jdGlvbihhcnIpe1xuICAgICAgd3JpdGUoJ3VpbnQ4YXJyYXk6Jyk7XG4gICAgICByZXR1cm4gdGhpcy5kaXNwYXRjaChBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcnIpKTtcbiAgICB9LFxuICAgIF91aW50OGNsYW1wZWRhcnJheTogZnVuY3Rpb24oYXJyKXtcbiAgICAgIHdyaXRlKCd1aW50OGNsYW1wZWRhcnJheTonKTtcbiAgICAgIHJldHVybiB0aGlzLmRpc3BhdGNoKEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFycikpO1xuICAgIH0sXG4gICAgX2ludDhhcnJheTogZnVuY3Rpb24oYXJyKXtcbiAgICAgIHdyaXRlKCd1aW50OGFycmF5OicpO1xuICAgICAgcmV0dXJuIHRoaXMuZGlzcGF0Y2goQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJyKSk7XG4gICAgfSxcbiAgICBfdWludDE2YXJyYXk6IGZ1bmN0aW9uKGFycil7XG4gICAgICB3cml0ZSgndWludDE2YXJyYXk6Jyk7XG4gICAgICByZXR1cm4gdGhpcy5kaXNwYXRjaChBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcnIpKTtcbiAgICB9LFxuICAgIF9pbnQxNmFycmF5OiBmdW5jdGlvbihhcnIpe1xuICAgICAgd3JpdGUoJ3VpbnQxNmFycmF5OicpO1xuICAgICAgcmV0dXJuIHRoaXMuZGlzcGF0Y2goQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJyKSk7XG4gICAgfSxcbiAgICBfdWludDMyYXJyYXk6IGZ1bmN0aW9uKGFycil7XG4gICAgICB3cml0ZSgndWludDMyYXJyYXk6Jyk7XG4gICAgICByZXR1cm4gdGhpcy5kaXNwYXRjaChBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcnIpKTtcbiAgICB9LFxuICAgIF9pbnQzMmFycmF5OiBmdW5jdGlvbihhcnIpe1xuICAgICAgd3JpdGUoJ3VpbnQzMmFycmF5OicpO1xuICAgICAgcmV0dXJuIHRoaXMuZGlzcGF0Y2goQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJyKSk7XG4gICAgfSxcbiAgICBfZmxvYXQzMmFycmF5OiBmdW5jdGlvbihhcnIpe1xuICAgICAgd3JpdGUoJ2Zsb2F0MzJhcnJheTonKTtcbiAgICAgIHJldHVybiB0aGlzLmRpc3BhdGNoKEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFycikpO1xuICAgIH0sXG4gICAgX2Zsb2F0NjRhcnJheTogZnVuY3Rpb24oYXJyKXtcbiAgICAgIHdyaXRlKCdmbG9hdDY0YXJyYXk6Jyk7XG4gICAgICByZXR1cm4gdGhpcy5kaXNwYXRjaChBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcnIpKTtcbiAgICB9LFxuICAgIF9hcnJheWJ1ZmZlcjogZnVuY3Rpb24oYXJyKXtcbiAgICAgIHdyaXRlKCdhcnJheWJ1ZmZlcjonKTtcbiAgICAgIHJldHVybiB0aGlzLmRpc3BhdGNoKG5ldyBVaW50OEFycmF5KGFycikpO1xuICAgIH0sXG4gICAgX3VybDogZnVuY3Rpb24odXJsKSB7XG4gICAgICByZXR1cm4gd3JpdGUoJ3VybDonICsgdXJsLnRvU3RyaW5nKCksICd1dGY4Jyk7XG4gICAgfSxcbiAgICBfbWFwOiBmdW5jdGlvbihtYXApIHtcbiAgICAgIHdyaXRlKCdtYXA6Jyk7XG4gICAgICB2YXIgYXJyID0gQXJyYXkuZnJvbShtYXApO1xuICAgICAgcmV0dXJuIHRoaXMuX2FycmF5KGFyciwgb3B0aW9ucy51bm9yZGVyZWRTZXRzICE9PSBmYWxzZSk7XG4gICAgfSxcbiAgICBfc2V0OiBmdW5jdGlvbihzZXQpIHtcbiAgICAgIHdyaXRlKCdzZXQ6Jyk7XG4gICAgICB2YXIgYXJyID0gQXJyYXkuZnJvbShzZXQpO1xuICAgICAgcmV0dXJuIHRoaXMuX2FycmF5KGFyciwgb3B0aW9ucy51bm9yZGVyZWRTZXRzICE9PSBmYWxzZSk7XG4gICAgfSxcbiAgICBfZmlsZTogZnVuY3Rpb24oZmlsZSkge1xuICAgICAgd3JpdGUoJ2ZpbGU6Jyk7XG4gICAgICByZXR1cm4gdGhpcy5kaXNwYXRjaChbZmlsZS5uYW1lLCBmaWxlLnNpemUsIGZpbGUudHlwZSwgZmlsZS5sYXN0TW9kZmllZF0pO1xuICAgIH0sXG4gICAgX2Jsb2I6IGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKG9wdGlvbnMuaWdub3JlVW5rbm93bikge1xuICAgICAgICByZXR1cm4gd3JpdGUoJ1tibG9iXScpO1xuICAgICAgfVxuXG4gICAgICB0aHJvdyBFcnJvcignSGFzaGluZyBCbG9iIG9iamVjdHMgaXMgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWRcXG4nICtcbiAgICAgICAgJyhzZWUgaHR0cHM6Ly9naXRodWIuY29tL3B1bGVvcy9vYmplY3QtaGFzaC9pc3N1ZXMvMjYpXFxuJyArXG4gICAgICAgICdVc2UgXCJvcHRpb25zLnJlcGxhY2VyXCIgb3IgXCJvcHRpb25zLmlnbm9yZVVua25vd25cIlxcbicpO1xuICAgIH0sXG4gICAgX2RvbXdpbmRvdzogZnVuY3Rpb24oKSB7IHJldHVybiB3cml0ZSgnZG9td2luZG93Jyk7IH0sXG4gICAgX2JpZ2ludDogZnVuY3Rpb24obnVtYmVyKXtcbiAgICAgIHJldHVybiB3cml0ZSgnYmlnaW50OicgKyBudW1iZXIudG9TdHJpbmcoKSk7XG4gICAgfSxcbiAgICAvKiBOb2RlLmpzIHN0YW5kYXJkIG5hdGl2ZSBvYmplY3RzICovXG4gICAgX3Byb2Nlc3M6IGZ1bmN0aW9uKCkgeyByZXR1cm4gd3JpdGUoJ3Byb2Nlc3MnKTsgfSxcbiAgICBfdGltZXI6IGZ1bmN0aW9uKCkgeyByZXR1cm4gd3JpdGUoJ3RpbWVyJyk7IH0sXG4gICAgX3BpcGU6IGZ1bmN0aW9uKCkgeyByZXR1cm4gd3JpdGUoJ3BpcGUnKTsgfSxcbiAgICBfdGNwOiBmdW5jdGlvbigpIHsgcmV0dXJuIHdyaXRlKCd0Y3AnKTsgfSxcbiAgICBfdWRwOiBmdW5jdGlvbigpIHsgcmV0dXJuIHdyaXRlKCd1ZHAnKTsgfSxcbiAgICBfdHR5OiBmdW5jdGlvbigpIHsgcmV0dXJuIHdyaXRlKCd0dHknKTsgfSxcbiAgICBfc3RhdHdhdGNoZXI6IGZ1bmN0aW9uKCkgeyByZXR1cm4gd3JpdGUoJ3N0YXR3YXRjaGVyJyk7IH0sXG4gICAgX3NlY3VyZWNvbnRleHQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gd3JpdGUoJ3NlY3VyZWNvbnRleHQnKTsgfSxcbiAgICBfY29ubmVjdGlvbjogZnVuY3Rpb24oKSB7IHJldHVybiB3cml0ZSgnY29ubmVjdGlvbicpOyB9LFxuICAgIF96bGliOiBmdW5jdGlvbigpIHsgcmV0dXJuIHdyaXRlKCd6bGliJyk7IH0sXG4gICAgX2NvbnRleHQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gd3JpdGUoJ2NvbnRleHQnKTsgfSxcbiAgICBfbm9kZXNjcmlwdDogZnVuY3Rpb24oKSB7IHJldHVybiB3cml0ZSgnbm9kZXNjcmlwdCcpOyB9LFxuICAgIF9odHRwcGFyc2VyOiBmdW5jdGlvbigpIHsgcmV0dXJuIHdyaXRlKCdodHRwcGFyc2VyJyk7IH0sXG4gICAgX2RhdGF2aWV3OiBmdW5jdGlvbigpIHsgcmV0dXJuIHdyaXRlKCdkYXRhdmlldycpOyB9LFxuICAgIF9zaWduYWw6IGZ1bmN0aW9uKCkgeyByZXR1cm4gd3JpdGUoJ3NpZ25hbCcpOyB9LFxuICAgIF9mc2V2ZW50OiBmdW5jdGlvbigpIHsgcmV0dXJuIHdyaXRlKCdmc2V2ZW50Jyk7IH0sXG4gICAgX3Rsc3dyYXA6IGZ1bmN0aW9uKCkgeyByZXR1cm4gd3JpdGUoJ3Rsc3dyYXAnKTsgfSxcbiAgfTtcbn1cblxuLy8gTWluaS1pbXBsZW1lbnRhdGlvbiBvZiBzdHJlYW0uUGFzc1Rocm91Z2hcbi8vIFdlIGFyZSBmYXIgZnJvbSBoYXZpbmcgbmVlZCBmb3IgdGhlIGZ1bGwgaW1wbGVtZW50YXRpb24sIGFuZCB3ZSBjYW5cbi8vIG1ha2UgYXNzdW1wdGlvbnMgbGlrZSBcIm1hbnkgd3JpdGVzLCB0aGVuIG9ubHkgb25lIGZpbmFsIHJlYWRcIlxuLy8gYW5kIHdlIGNhbiBpZ25vcmUgZW5jb2Rpbmcgc3BlY2lmaWNzXG5mdW5jdGlvbiBQYXNzVGhyb3VnaCgpIHtcbiAgcmV0dXJuIHtcbiAgICBidWY6ICcnLFxuXG4gICAgd3JpdGU6IGZ1bmN0aW9uKGIpIHtcbiAgICAgIHRoaXMuYnVmICs9IGI7XG4gICAgfSxcblxuICAgIGVuZDogZnVuY3Rpb24oYikge1xuICAgICAgdGhpcy5idWYgKz0gYjtcbiAgICB9LFxuXG4gICAgcmVhZDogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5idWY7XG4gICAgfVxuICB9O1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(rsc)/./node_modules/object-hash/index.js\n");
|
||
|
||
/***/ })
|
||
|
||
};
|
||
; |