diff --git a/public/scripts/jszip.js b/public/scripts/jszip.js
deleted file mode 100644
index 7c7977b..0000000
--- a/public/scripts/jszip.js
+++ /dev/null
@@ -1,12901 +0,0 @@
-/*!
-
-JSZip v3.10.1 - A JavaScript class for generating and reading zip files
-<http://stuartk.com/jszip>
-
-(c) 2009-2016 Stuart Knightley <stuart [at] stuartk.com>
-Dual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip/main/LICENSE.markdown.
-
-JSZip uses the library pako released under the MIT license :
-https://github.com/nodeca/pako/blob/main/LICENSE
-*/
-
-(function (f) {
-  if (typeof exports === "object" && typeof module !== "undefined") {
-    module.exports = f();
-  } else if (typeof define === "function" && define.amd) {
-    define([], f);
-  } else {
-    var g;
-    if (typeof window !== "undefined") {
-      g = window;
-    } else if (typeof global !== "undefined") {
-      g = global;
-    } else if (typeof self !== "undefined") {
-      g = self;
-    } else {
-      g = this;
-    }
-    g.JSZip = f();
-  }
-})(function () {
-  var define, module, exports;
-  return (function e(t, n, r) {
-    function s(o, u) {
-      if (!n[o]) {
-        if (!t[o]) {
-          var a = typeof require == "function" && require;
-          if (!u && a) return a(o, !0);
-          if (i) return i(o, !0);
-          var f = new Error("Cannot find module '" + o + "'");
-          throw ((f.code = "MODULE_NOT_FOUND"), f);
-        }
-        var l = (n[o] = { exports: {} });
-        t[o][0].call(
-          l.exports,
-          function (e) {
-            var n = t[o][1][e];
-            return s(n ? n : e);
-          },
-          l,
-          l.exports,
-          e,
-          t,
-          n,
-          r,
-        );
-      }
-      return n[o].exports;
-    }
-    var i = typeof require == "function" && require;
-    for (var o = 0; o < r.length; o++) s(r[o]);
-    return s;
-  })(
-    {
-      1: [
-        function (require, module, exports) {
-          "use strict";
-          var utils = require("./utils");
-          var support = require("./support");
-          // private property
-          var _keyStr =
-            "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
-
-          // public method for encoding
-          exports.encode = function (input) {
-            var output = [];
-            var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
-            var i = 0,
-              len = input.length,
-              remainingBytes = len;
-
-            var isArray = utils.getTypeOf(input) !== "string";
-            while (i < input.length) {
-              remainingBytes = len - i;
-
-              if (!isArray) {
-                chr1 = input.charCodeAt(i++);
-                chr2 = i < len ? input.charCodeAt(i++) : 0;
-                chr3 = i < len ? input.charCodeAt(i++) : 0;
-              } else {
-                chr1 = input[i++];
-                chr2 = i < len ? input[i++] : 0;
-                chr3 = i < len ? input[i++] : 0;
-              }
-
-              enc1 = chr1 >> 2;
-              enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
-              enc3 = remainingBytes > 1 ? ((chr2 & 15) << 2) | (chr3 >> 6) : 64;
-              enc4 = remainingBytes > 2 ? chr3 & 63 : 64;
-
-              output.push(
-                _keyStr.charAt(enc1) +
-                  _keyStr.charAt(enc2) +
-                  _keyStr.charAt(enc3) +
-                  _keyStr.charAt(enc4),
-              );
-            }
-
-            return output.join("");
-          };
-
-          // public method for decoding
-          exports.decode = function (input) {
-            var chr1, chr2, chr3;
-            var enc1, enc2, enc3, enc4;
-            var i = 0,
-              resultIndex = 0;
-
-            var dataUrlPrefix = "data:";
-
-            if (input.substr(0, dataUrlPrefix.length) === dataUrlPrefix) {
-              // This is a common error: people give a data url
-              // (data:image/png;base64,iVBOR...) with a {base64: true} and
-              // wonders why things don't work.
-              // We can detect that the string input looks like a data url but we
-              // *can't* be sure it is one: removing everything up to the comma would
-              // be too dangerous.
-              throw new Error(
-                "Invalid base64 input, it looks like a data url.",
-              );
-            }
-
-            input = input.replace(/[^A-Za-z0-9+/=]/g, "");
-
-            var totalLength = (input.length * 3) / 4;
-            if (input.charAt(input.length - 1) === _keyStr.charAt(64)) {
-              totalLength--;
-            }
-            if (input.charAt(input.length - 2) === _keyStr.charAt(64)) {
-              totalLength--;
-            }
-            if (totalLength % 1 !== 0) {
-              // totalLength is not an integer, the length does not match a valid
-              // base64 content. That can happen if:
-              // - the input is not a base64 content
-              // - the input is *almost* a base64 content, with a extra chars at the
-              //   beginning or at the end
-              // - the input uses a base64 variant (base64url for example)
-              throw new Error("Invalid base64 input, bad content length.");
-            }
-            var output;
-            if (support.uint8array) {
-              output = new Uint8Array(totalLength | 0);
-            } else {
-              output = new Array(totalLength | 0);
-            }
-
-            while (i < input.length) {
-              enc1 = _keyStr.indexOf(input.charAt(i++));
-              enc2 = _keyStr.indexOf(input.charAt(i++));
-              enc3 = _keyStr.indexOf(input.charAt(i++));
-              enc4 = _keyStr.indexOf(input.charAt(i++));
-
-              chr1 = (enc1 << 2) | (enc2 >> 4);
-              chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
-              chr3 = ((enc3 & 3) << 6) | enc4;
-
-              output[resultIndex++] = chr1;
-
-              if (enc3 !== 64) {
-                output[resultIndex++] = chr2;
-              }
-              if (enc4 !== 64) {
-                output[resultIndex++] = chr3;
-              }
-            }
-
-            return output;
-          };
-        },
-        { "./support": 30, "./utils": 32 },
-      ],
-      2: [
-        function (require, module, exports) {
-          "use strict";
-
-          var external = require("./external");
-          var DataWorker = require("./stream/DataWorker");
-          var Crc32Probe = require("./stream/Crc32Probe");
-          var DataLengthProbe = require("./stream/DataLengthProbe");
-
-          /**
-           * Represent a compressed object, with everything needed to decompress it.
-           * @constructor
-           * @param {number} compressedSize the size of the data compressed.
-           * @param {number} uncompressedSize the size of the data after decompression.
-           * @param {number} crc32 the crc32 of the decompressed file.
-           * @param {object} compression the type of compression, see lib/compressions.js.
-           * @param {String|ArrayBuffer|Uint8Array|Buffer} data the compressed data.
-           */
-          function CompressedObject(
-            compressedSize,
-            uncompressedSize,
-            crc32,
-            compression,
-            data,
-          ) {
-            this.compressedSize = compressedSize;
-            this.uncompressedSize = uncompressedSize;
-            this.crc32 = crc32;
-            this.compression = compression;
-            this.compressedContent = data;
-          }
-
-          CompressedObject.prototype = {
-            /**
-             * Create a worker to get the uncompressed content.
-             * @return {GenericWorker} the worker.
-             */
-            getContentWorker: function () {
-              var worker = new DataWorker(
-                external.Promise.resolve(this.compressedContent),
-              )
-                .pipe(this.compression.uncompressWorker())
-                .pipe(new DataLengthProbe("data_length"));
-
-              var that = this;
-              worker.on("end", function () {
-                if (this.streamInfo["data_length"] !== that.uncompressedSize) {
-                  throw new Error("Bug : uncompressed data size mismatch");
-                }
-              });
-              return worker;
-            },
-            /**
-             * Create a worker to get the compressed content.
-             * @return {GenericWorker} the worker.
-             */
-            getCompressedWorker: function () {
-              return new DataWorker(
-                external.Promise.resolve(this.compressedContent),
-              )
-                .withStreamInfo("compressedSize", this.compressedSize)
-                .withStreamInfo("uncompressedSize", this.uncompressedSize)
-                .withStreamInfo("crc32", this.crc32)
-                .withStreamInfo("compression", this.compression);
-            },
-          };
-
-          /**
-           * Chain the given worker with other workers to compress the content with the
-           * given compression.
-           * @param {GenericWorker} uncompressedWorker the worker to pipe.
-           * @param {Object} compression the compression object.
-           * @param {Object} compressionOptions the options to use when compressing.
-           * @return {GenericWorker} the new worker compressing the content.
-           */
-          CompressedObject.createWorkerFrom = function (
-            uncompressedWorker,
-            compression,
-            compressionOptions,
-          ) {
-            return uncompressedWorker
-              .pipe(new Crc32Probe())
-              .pipe(new DataLengthProbe("uncompressedSize"))
-              .pipe(compression.compressWorker(compressionOptions))
-              .pipe(new DataLengthProbe("compressedSize"))
-              .withStreamInfo("compression", compression);
-          };
-
-          module.exports = CompressedObject;
-        },
-        {
-          "./external": 6,
-          "./stream/Crc32Probe": 25,
-          "./stream/DataLengthProbe": 26,
-          "./stream/DataWorker": 27,
-        },
-      ],
-      3: [
-        function (require, module, exports) {
-          "use strict";
-
-          var GenericWorker = require("./stream/GenericWorker");
-
-          exports.STORE = {
-            magic: "\x00\x00",
-            compressWorker: function () {
-              return new GenericWorker("STORE compression");
-            },
-            uncompressWorker: function () {
-              return new GenericWorker("STORE decompression");
-            },
-          };
-          exports.DEFLATE = require("./flate");
-        },
-        { "./flate": 7, "./stream/GenericWorker": 28 },
-      ],
-      4: [
-        function (require, module, exports) {
-          "use strict";
-
-          var utils = require("./utils");
-
-          /**
-           * The following functions come from pako, from pako/lib/zlib/crc32.js
-           * released under the MIT license, see pako https://github.com/nodeca/pako/
-           */
-
-          // Use ordinary array, since untyped makes no boost here
-          function makeTable() {
-            var c,
-              table = [];
-
-            for (var n = 0; n < 256; n++) {
-              c = n;
-              for (var k = 0; k < 8; k++) {
-                c = c & 1 ? 0xedb88320 ^ (c >>> 1) : c >>> 1;
-              }
-              table[n] = c;
-            }
-
-            return table;
-          }
-
-          // Create table on load. Just 255 signed longs. Not a problem.
-          var crcTable = makeTable();
-
-          function crc32(crc, buf, len, pos) {
-            var t = crcTable,
-              end = pos + len;
-
-            crc = crc ^ -1;
-
-            for (var i = pos; i < end; i++) {
-              crc = (crc >>> 8) ^ t[(crc ^ buf[i]) & 0xff];
-            }
-
-            return crc ^ -1; // >>> 0;
-          }
-
-          // That's all for the pako functions.
-
-          /**
-           * Compute the crc32 of a string.
-           * This is almost the same as the function crc32, but for strings. Using the
-           * same function for the two use cases leads to horrible performances.
-           * @param {Number} crc the starting value of the crc.
-           * @param {String} str the string to use.
-           * @param {Number} len the length of the string.
-           * @param {Number} pos the starting position for the crc32 computation.
-           * @return {Number} the computed crc32.
-           */
-          function crc32str(crc, str, len, pos) {
-            var t = crcTable,
-              end = pos + len;
-
-            crc = crc ^ -1;
-
-            for (var i = pos; i < end; i++) {
-              crc = (crc >>> 8) ^ t[(crc ^ str.charCodeAt(i)) & 0xff];
-            }
-
-            return crc ^ -1; // >>> 0;
-          }
-
-          module.exports = function crc32wrapper(input, crc) {
-            if (typeof input === "undefined" || !input.length) {
-              return 0;
-            }
-
-            var isArray = utils.getTypeOf(input) !== "string";
-
-            if (isArray) {
-              return crc32(crc | 0, input, input.length, 0);
-            } else {
-              return crc32str(crc | 0, input, input.length, 0);
-            }
-          };
-        },
-        { "./utils": 32 },
-      ],
-      5: [
-        function (require, module, exports) {
-          "use strict";
-          exports.base64 = false;
-          exports.binary = false;
-          exports.dir = false;
-          exports.createFolders = true;
-          exports.date = null;
-          exports.compression = null;
-          exports.compressionOptions = null;
-          exports.comment = null;
-          exports.unixPermissions = null;
-          exports.dosPermissions = null;
-        },
-        {},
-      ],
-      6: [
-        function (require, module, exports) {
-          "use strict";
-
-          // load the global object first:
-          // - it should be better integrated in the system (unhandledRejection in node)
-          // - the environment may have a custom Promise implementation (see zone.js)
-          var ES6Promise = null;
-          if (typeof Promise !== "undefined") {
-            ES6Promise = Promise;
-          } else {
-            ES6Promise = require("lie");
-          }
-
-          /**
-           * Let the user use/change some implementations.
-           */
-          module.exports = {
-            Promise: ES6Promise,
-          };
-        },
-        { lie: 37 },
-      ],
-      7: [
-        function (require, module, exports) {
-          "use strict";
-          var USE_TYPEDARRAY =
-            typeof Uint8Array !== "undefined" &&
-            typeof Uint16Array !== "undefined" &&
-            typeof Uint32Array !== "undefined";
-
-          var pako = require("pako");
-          var utils = require("./utils");
-          var GenericWorker = require("./stream/GenericWorker");
-
-          var ARRAY_TYPE = USE_TYPEDARRAY ? "uint8array" : "array";
-
-          exports.magic = "\x08\x00";
-
-          /**
-           * Create a worker that uses pako to inflate/deflate.
-           * @constructor
-           * @param {String} action the name of the pako function to call : either "Deflate" or "Inflate".
-           * @param {Object} options the options to use when (de)compressing.
-           */
-          function FlateWorker(action, options) {
-            GenericWorker.call(this, "FlateWorker/" + action);
-
-            this._pako = null;
-            this._pakoAction = action;
-            this._pakoOptions = options;
-            // the `meta` object from the last chunk received
-            // this allow this worker to pass around metadata
-            this.meta = {};
-          }
-
-          utils.inherits(FlateWorker, GenericWorker);
-
-          /**
-           * @see GenericWorker.processChunk
-           */
-          FlateWorker.prototype.processChunk = function (chunk) {
-            this.meta = chunk.meta;
-            if (this._pako === null) {
-              this._createPako();
-            }
-            this._pako.push(utils.transformTo(ARRAY_TYPE, chunk.data), false);
-          };
-
-          /**
-           * @see GenericWorker.flush
-           */
-          FlateWorker.prototype.flush = function () {
-            GenericWorker.prototype.flush.call(this);
-            if (this._pako === null) {
-              this._createPako();
-            }
-            this._pako.push([], true);
-          };
-          /**
-           * @see GenericWorker.cleanUp
-           */
-          FlateWorker.prototype.cleanUp = function () {
-            GenericWorker.prototype.cleanUp.call(this);
-            this._pako = null;
-          };
-
-          /**
-           * Create the _pako object.
-           * TODO: lazy-loading this object isn't the best solution but it's the
-           * quickest. The best solution is to lazy-load the worker list. See also the
-           * issue #446.
-           */
-          FlateWorker.prototype._createPako = function () {
-            this._pako = new pako[this._pakoAction]({
-              raw: true,
-              level: this._pakoOptions.level || -1, // default compression
-            });
-            var self = this;
-            this._pako.onData = function (data) {
-              self.push({
-                data: data,
-                meta: self.meta,
-              });
-            };
-          };
-
-          exports.compressWorker = function (compressionOptions) {
-            return new FlateWorker("Deflate", compressionOptions);
-          };
-          exports.uncompressWorker = function () {
-            return new FlateWorker("Inflate", {});
-          };
-        },
-        { "./stream/GenericWorker": 28, "./utils": 32, pako: 38 },
-      ],
-      8: [
-        function (require, module, exports) {
-          "use strict";
-
-          var utils = require("../utils");
-          var GenericWorker = require("../stream/GenericWorker");
-          var utf8 = require("../utf8");
-          var crc32 = require("../crc32");
-          var signature = require("../signature");
-
-          /**
-           * Transform an integer into a string in hexadecimal.
-           * @private
-           * @param {number} dec the number to convert.
-           * @param {number} bytes the number of bytes to generate.
-           * @returns {string} the result.
-           */
-          var decToHex = function (dec, bytes) {
-            var hex = "",
-              i;
-            for (i = 0; i < bytes; i++) {
-              hex += String.fromCharCode(dec & 0xff);
-              dec = dec >>> 8;
-            }
-            return hex;
-          };
-
-          /**
-           * Generate the UNIX part of the external file attributes.
-           * @param {Object} unixPermissions the unix permissions or null.
-           * @param {Boolean} isDir true if the entry is a directory, false otherwise.
-           * @return {Number} a 32 bit integer.
-           *
-           * adapted from http://unix.stackexchange.com/questions/14705/the-zip-formats-external-file-attribute :
-           *
-           * TTTTsstrwxrwxrwx0000000000ADVSHR
-           * ^^^^____________________________ file type, see zipinfo.c (UNX_*)
-           *     ^^^_________________________ setuid, setgid, sticky
-           *        ^^^^^^^^^________________ permissions
-           *                 ^^^^^^^^^^______ not used ?
-           *                           ^^^^^^ DOS attribute bits : Archive, Directory, Volume label, System file, Hidden, Read only
-           */
-          var generateUnixExternalFileAttr = function (unixPermissions, isDir) {
-            var result = unixPermissions;
-            if (!unixPermissions) {
-              // I can't use octal values in strict mode, hence the hexa.
-              //  040775 => 0x41fd
-              // 0100664 => 0x81b4
-              result = isDir ? 0x41fd : 0x81b4;
-            }
-            return (result & 0xffff) << 16;
-          };
-
-          /**
-           * Generate the DOS part of the external file attributes.
-           * @param {Object} dosPermissions the dos permissions or null.
-           * @param {Boolean} isDir true if the entry is a directory, false otherwise.
-           * @return {Number} a 32 bit integer.
-           *
-           * Bit 0     Read-Only
-           * Bit 1     Hidden
-           * Bit 2     System
-           * Bit 3     Volume Label
-           * Bit 4     Directory
-           * Bit 5     Archive
-           */
-          var generateDosExternalFileAttr = function (dosPermissions) {
-            // the dir flag is already set for compatibility
-            return (dosPermissions || 0) & 0x3f;
-          };
-
-          /**
-           * Generate the various parts used in the construction of the final zip file.
-           * @param {Object} streamInfo the hash with information about the compressed file.
-           * @param {Boolean} streamedContent is the content streamed ?
-           * @param {Boolean} streamingEnded is the stream finished ?
-           * @param {number} offset the current offset from the start of the zip file.
-           * @param {String} platform let's pretend we are this platform (change platform dependents fields)
-           * @param {Function} encodeFileName the function to encode the file name / comment.
-           * @return {Object} the zip parts.
-           */
-          var generateZipParts = function (
-            streamInfo,
-            streamedContent,
-            streamingEnded,
-            offset,
-            platform,
-            encodeFileName,
-          ) {
-            var file = streamInfo["file"],
-              compression = streamInfo["compression"],
-              useCustomEncoding = encodeFileName !== utf8.utf8encode,
-              encodedFileName = utils.transformTo(
-                "string",
-                encodeFileName(file.name),
-              ),
-              utfEncodedFileName = utils.transformTo(
-                "string",
-                utf8.utf8encode(file.name),
-              ),
-              comment = file.comment,
-              encodedComment = utils.transformTo(
-                "string",
-                encodeFileName(comment),
-              ),
-              utfEncodedComment = utils.transformTo(
-                "string",
-                utf8.utf8encode(comment),
-              ),
-              useUTF8ForFileName =
-                utfEncodedFileName.length !== file.name.length,
-              useUTF8ForComment = utfEncodedComment.length !== comment.length,
-              dosTime,
-              dosDate,
-              extraFields = "",
-              unicodePathExtraField = "",
-              unicodeCommentExtraField = "",
-              dir = file.dir,
-              date = file.date;
-
-            var dataInfo = {
-              crc32: 0,
-              compressedSize: 0,
-              uncompressedSize: 0,
-            };
-
-            // if the content is streamed, the sizes/crc32 are only available AFTER
-            // the end of the stream.
-            if (!streamedContent || streamingEnded) {
-              dataInfo.crc32 = streamInfo["crc32"];
-              dataInfo.compressedSize = streamInfo["compressedSize"];
-              dataInfo.uncompressedSize = streamInfo["uncompressedSize"];
-            }
-
-            var bitflag = 0;
-            if (streamedContent) {
-              // Bit 3: the sizes/crc32 are set to zero in the local header.
-              // The correct values are put in the data descriptor immediately
-              // following the compressed data.
-              bitflag |= 0x0008;
-            }
-            if (
-              !useCustomEncoding &&
-              (useUTF8ForFileName || useUTF8ForComment)
-            ) {
-              // Bit 11: Language encoding flag (EFS).
-              bitflag |= 0x0800;
-            }
-
-            var extFileAttr = 0;
-            var versionMadeBy = 0;
-            if (dir) {
-              // dos or unix, we set the dos dir flag
-              extFileAttr |= 0x00010;
-            }
-            if (platform === "UNIX") {
-              versionMadeBy = 0x031e; // UNIX, version 3.0
-              extFileAttr |= generateUnixExternalFileAttr(
-                file.unixPermissions,
-                dir,
-              );
-            } else {
-              // DOS or other, fallback to DOS
-              versionMadeBy = 0x0014; // DOS, version 2.0
-              extFileAttr |= generateDosExternalFileAttr(
-                file.dosPermissions,
-                dir,
-              );
-            }
-
-            // date
-            // @see http://www.delorie.com/djgpp/doc/rbinter/it/52/13.html
-            // @see http://www.delorie.com/djgpp/doc/rbinter/it/65/16.html
-            // @see http://www.delorie.com/djgpp/doc/rbinter/it/66/16.html
-
-            dosTime = date.getUTCHours();
-            dosTime = dosTime << 6;
-            dosTime = dosTime | date.getUTCMinutes();
-            dosTime = dosTime << 5;
-            dosTime = dosTime | (date.getUTCSeconds() / 2);
-
-            dosDate = date.getUTCFullYear() - 1980;
-            dosDate = dosDate << 4;
-            dosDate = dosDate | (date.getUTCMonth() + 1);
-            dosDate = dosDate << 5;
-            dosDate = dosDate | date.getUTCDate();
-
-            if (useUTF8ForFileName) {
-              // set the unicode path extra field. unzip needs at least one extra
-              // field to correctly handle unicode path, so using the path is as good
-              // as any other information. This could improve the situation with
-              // other archive managers too.
-              // This field is usually used without the utf8 flag, with a non
-              // unicode path in the header (winrar, winzip). This helps (a bit)
-              // with the messy Windows' default compressed folders feature but
-              // breaks on p7zip which doesn't seek the unicode path extra field.
-              // So for now, UTF-8 everywhere !
-              unicodePathExtraField =
-                // Version
-                decToHex(1, 1) +
-                // NameCRC32
-                decToHex(crc32(encodedFileName), 4) +
-                // UnicodeName
-                utfEncodedFileName;
-
-              extraFields +=
-                // Info-ZIP Unicode Path Extra Field
-                "\x75\x70" +
-                // size
-                decToHex(unicodePathExtraField.length, 2) +
-                // content
-                unicodePathExtraField;
-            }
-
-            if (useUTF8ForComment) {
-              unicodeCommentExtraField =
-                // Version
-                decToHex(1, 1) +
-                // CommentCRC32
-                decToHex(crc32(encodedComment), 4) +
-                // UnicodeName
-                utfEncodedComment;
-
-              extraFields +=
-                // Info-ZIP Unicode Path Extra Field
-                "\x75\x63" +
-                // size
-                decToHex(unicodeCommentExtraField.length, 2) +
-                // content
-                unicodeCommentExtraField;
-            }
-
-            var header = "";
-
-            // version needed to extract
-            header += "\x0A\x00";
-            // general purpose bit flag
-            header += decToHex(bitflag, 2);
-            // compression method
-            header += compression.magic;
-            // last mod file time
-            header += decToHex(dosTime, 2);
-            // last mod file date
-            header += decToHex(dosDate, 2);
-            // crc-32
-            header += decToHex(dataInfo.crc32, 4);
-            // compressed size
-            header += decToHex(dataInfo.compressedSize, 4);
-            // uncompressed size
-            header += decToHex(dataInfo.uncompressedSize, 4);
-            // file name length
-            header += decToHex(encodedFileName.length, 2);
-            // extra field length
-            header += decToHex(extraFields.length, 2);
-
-            var fileRecord =
-              signature.LOCAL_FILE_HEADER +
-              header +
-              encodedFileName +
-              extraFields;
-
-            var dirRecord =
-              signature.CENTRAL_FILE_HEADER +
-              // version made by (00: DOS)
-              decToHex(versionMadeBy, 2) +
-              // file header (common to file and central directory)
-              header +
-              // file comment length
-              decToHex(encodedComment.length, 2) +
-              // disk number start
-              "\x00\x00" +
-              // internal file attributes TODO
-              "\x00\x00" +
-              // external file attributes
-              decToHex(extFileAttr, 4) +
-              // relative offset of local header
-              decToHex(offset, 4) +
-              // file name
-              encodedFileName +
-              // extra field
-              extraFields +
-              // file comment
-              encodedComment;
-
-            return {
-              fileRecord: fileRecord,
-              dirRecord: dirRecord,
-            };
-          };
-
-          /**
-           * Generate the EOCD record.
-           * @param {Number} entriesCount the number of entries in the zip file.
-           * @param {Number} centralDirLength the length (in bytes) of the central dir.
-           * @param {Number} localDirLength the length (in bytes) of the local dir.
-           * @param {String} comment the zip file comment as a binary string.
-           * @param {Function} encodeFileName the function to encode the comment.
-           * @return {String} the EOCD record.
-           */
-          var generateCentralDirectoryEnd = function (
-            entriesCount,
-            centralDirLength,
-            localDirLength,
-            comment,
-            encodeFileName,
-          ) {
-            var dirEnd = "";
-            var encodedComment = utils.transformTo(
-              "string",
-              encodeFileName(comment),
-            );
-
-            // end of central dir signature
-            dirEnd =
-              signature.CENTRAL_DIRECTORY_END +
-              // number of this disk
-              "\x00\x00" +
-              // number of the disk with the start of the central directory
-              "\x00\x00" +
-              // total number of entries in the central directory on this disk
-              decToHex(entriesCount, 2) +
-              // total number of entries in the central directory
-              decToHex(entriesCount, 2) +
-              // size of the central directory   4 bytes
-              decToHex(centralDirLength, 4) +
-              // offset of start of central directory with respect to the starting disk number
-              decToHex(localDirLength, 4) +
-              // .ZIP file comment length
-              decToHex(encodedComment.length, 2) +
-              // .ZIP file comment
-              encodedComment;
-
-            return dirEnd;
-          };
-
-          /**
-           * Generate data descriptors for a file entry.
-           * @param {Object} streamInfo the hash generated by a worker, containing information
-           * on the file entry.
-           * @return {String} the data descriptors.
-           */
-          var generateDataDescriptors = function (streamInfo) {
-            var descriptor = "";
-            descriptor =
-              signature.DATA_DESCRIPTOR +
-              // crc-32                          4 bytes
-              decToHex(streamInfo["crc32"], 4) +
-              // compressed size                 4 bytes
-              decToHex(streamInfo["compressedSize"], 4) +
-              // uncompressed size               4 bytes
-              decToHex(streamInfo["uncompressedSize"], 4);
-
-            return descriptor;
-          };
-
-          /**
-           * A worker to concatenate other workers to create a zip file.
-           * @param {Boolean} streamFiles `true` to stream the content of the files,
-           * `false` to accumulate it.
-           * @param {String} comment the comment to use.
-           * @param {String} platform the platform to use, "UNIX" or "DOS".
-           * @param {Function} encodeFileName the function to encode file names and comments.
-           */
-          function ZipFileWorker(
-            streamFiles,
-            comment,
-            platform,
-            encodeFileName,
-          ) {
-            GenericWorker.call(this, "ZipFileWorker");
-            // The number of bytes written so far. This doesn't count accumulated chunks.
-            this.bytesWritten = 0;
-            // The comment of the zip file
-            this.zipComment = comment;
-            // The platform "generating" the zip file.
-            this.zipPlatform = platform;
-            // the function to encode file names and comments.
-            this.encodeFileName = encodeFileName;
-            // Should we stream the content of the files ?
-            this.streamFiles = streamFiles;
-            // If `streamFiles` is false, we will need to accumulate the content of the
-            // files to calculate sizes / crc32 (and write them *before* the content).
-            // This boolean indicates if we are accumulating chunks (it will change a lot
-            // during the lifetime of this worker).
-            this.accumulate = false;
-            // The buffer receiving chunks when accumulating content.
-            this.contentBuffer = [];
-            // The list of generated directory records.
-            this.dirRecords = [];
-            // The offset (in bytes) from the beginning of the zip file for the current source.
-            this.currentSourceOffset = 0;
-            // The total number of entries in this zip file.
-            this.entriesCount = 0;
-            // the name of the file currently being added, null when handling the end of the zip file.
-            // Used for the emitted metadata.
-            this.currentFile = null;
-
-            this._sources = [];
-          }
-          utils.inherits(ZipFileWorker, GenericWorker);
-
-          /**
-           * @see GenericWorker.push
-           */
-          ZipFileWorker.prototype.push = function (chunk) {
-            var currentFilePercent = chunk.meta.percent || 0;
-            var entriesCount = this.entriesCount;
-            var remainingFiles = this._sources.length;
-
-            if (this.accumulate) {
-              this.contentBuffer.push(chunk);
-            } else {
-              this.bytesWritten += chunk.data.length;
-
-              GenericWorker.prototype.push.call(this, {
-                data: chunk.data,
-                meta: {
-                  currentFile: this.currentFile,
-                  percent: entriesCount
-                    ? (currentFilePercent +
-                        100 * (entriesCount - remainingFiles - 1)) /
-                      entriesCount
-                    : 100,
-                },
-              });
-            }
-          };
-
-          /**
-           * The worker started a new source (an other worker).
-           * @param {Object} streamInfo the streamInfo object from the new source.
-           */
-          ZipFileWorker.prototype.openedSource = function (streamInfo) {
-            this.currentSourceOffset = this.bytesWritten;
-            this.currentFile = streamInfo["file"].name;
-
-            var streamedContent = this.streamFiles && !streamInfo["file"].dir;
-
-            // don't stream folders (because they don't have any content)
-            if (streamedContent) {
-              var record = generateZipParts(
-                streamInfo,
-                streamedContent,
-                false,
-                this.currentSourceOffset,
-                this.zipPlatform,
-                this.encodeFileName,
-              );
-              this.push({
-                data: record.fileRecord,
-                meta: { percent: 0 },
-              });
-            } else {
-              // we need to wait for the whole file before pushing anything
-              this.accumulate = true;
-            }
-          };
-
-          /**
-           * The worker finished a source (an other worker).
-           * @param {Object} streamInfo the streamInfo object from the finished source.
-           */
-          ZipFileWorker.prototype.closedSource = function (streamInfo) {
-            this.accumulate = false;
-            var streamedContent = this.streamFiles && !streamInfo["file"].dir;
-            var record = generateZipParts(
-              streamInfo,
-              streamedContent,
-              true,
-              this.currentSourceOffset,
-              this.zipPlatform,
-              this.encodeFileName,
-            );
-
-            this.dirRecords.push(record.dirRecord);
-            if (streamedContent) {
-              // after the streamed file, we put data descriptors
-              this.push({
-                data: generateDataDescriptors(streamInfo),
-                meta: { percent: 100 },
-              });
-            } else {
-              // the content wasn't streamed, we need to push everything now
-              // first the file record, then the content
-              this.push({
-                data: record.fileRecord,
-                meta: { percent: 0 },
-              });
-              while (this.contentBuffer.length) {
-                this.push(this.contentBuffer.shift());
-              }
-            }
-            this.currentFile = null;
-          };
-
-          /**
-           * @see GenericWorker.flush
-           */
-          ZipFileWorker.prototype.flush = function () {
-            var localDirLength = this.bytesWritten;
-            for (var i = 0; i < this.dirRecords.length; i++) {
-              this.push({
-                data: this.dirRecords[i],
-                meta: { percent: 100 },
-              });
-            }
-            var centralDirLength = this.bytesWritten - localDirLength;
-
-            var dirEnd = generateCentralDirectoryEnd(
-              this.dirRecords.length,
-              centralDirLength,
-              localDirLength,
-              this.zipComment,
-              this.encodeFileName,
-            );
-
-            this.push({
-              data: dirEnd,
-              meta: { percent: 100 },
-            });
-          };
-
-          /**
-           * Prepare the next source to be read.
-           */
-          ZipFileWorker.prototype.prepareNextSource = function () {
-            this.previous = this._sources.shift();
-            this.openedSource(this.previous.streamInfo);
-            if (this.isPaused) {
-              this.previous.pause();
-            } else {
-              this.previous.resume();
-            }
-          };
-
-          /**
-           * @see GenericWorker.registerPrevious
-           */
-          ZipFileWorker.prototype.registerPrevious = function (previous) {
-            this._sources.push(previous);
-            var self = this;
-
-            previous.on("data", function (chunk) {
-              self.processChunk(chunk);
-            });
-            previous.on("end", function () {
-              self.closedSource(self.previous.streamInfo);
-              if (self._sources.length) {
-                self.prepareNextSource();
-              } else {
-                self.end();
-              }
-            });
-            previous.on("error", function (e) {
-              self.error(e);
-            });
-            return this;
-          };
-
-          /**
-           * @see GenericWorker.resume
-           */
-          ZipFileWorker.prototype.resume = function () {
-            if (!GenericWorker.prototype.resume.call(this)) {
-              return false;
-            }
-
-            if (!this.previous && this._sources.length) {
-              this.prepareNextSource();
-              return true;
-            }
-            if (
-              !this.previous &&
-              !this._sources.length &&
-              !this.generatedError
-            ) {
-              this.end();
-              return true;
-            }
-          };
-
-          /**
-           * @see GenericWorker.error
-           */
-          ZipFileWorker.prototype.error = function (e) {
-            var sources = this._sources;
-            if (!GenericWorker.prototype.error.call(this, e)) {
-              return false;
-            }
-            for (var i = 0; i < sources.length; i++) {
-              try {
-                sources[i].error(e);
-              } catch (e) {
-                // the `error` exploded, nothing to do
-              }
-            }
-            return true;
-          };
-
-          /**
-           * @see GenericWorker.lock
-           */
-          ZipFileWorker.prototype.lock = function () {
-            GenericWorker.prototype.lock.call(this);
-            var sources = this._sources;
-            for (var i = 0; i < sources.length; i++) {
-              sources[i].lock();
-            }
-          };
-
-          module.exports = ZipFileWorker;
-        },
-        {
-          "../crc32": 4,
-          "../signature": 23,
-          "../stream/GenericWorker": 28,
-          "../utf8": 31,
-          "../utils": 32,
-        },
-      ],
-      9: [
-        function (require, module, exports) {
-          "use strict";
-
-          var compressions = require("../compressions");
-          var ZipFileWorker = require("./ZipFileWorker");
-
-          /**
-           * Find the compression to use.
-           * @param {String} fileCompression the compression defined at the file level, if any.
-           * @param {String} zipCompression the compression defined at the load() level.
-           * @return {Object} the compression object to use.
-           */
-          var getCompression = function (fileCompression, zipCompression) {
-            var compressionName = fileCompression || zipCompression;
-            var compression = compressions[compressionName];
-            if (!compression) {
-              throw new Error(
-                compressionName + " is not a valid compression method !",
-              );
-            }
-            return compression;
-          };
-
-          /**
-           * Create a worker to generate a zip file.
-           * @param {JSZip} zip the JSZip instance at the right root level.
-           * @param {Object} options to generate the zip file.
-           * @param {String} comment the comment to use.
-           */
-          exports.generateWorker = function (zip, options, comment) {
-            var zipFileWorker = new ZipFileWorker(
-              options.streamFiles,
-              comment,
-              options.platform,
-              options.encodeFileName,
-            );
-            var entriesCount = 0;
-            try {
-              zip.forEach(function (relativePath, file) {
-                entriesCount++;
-                var compression = getCompression(
-                  file.options.compression,
-                  options.compression,
-                );
-                var compressionOptions =
-                  file.options.compressionOptions ||
-                  options.compressionOptions ||
-                  {};
-                var dir = file.dir,
-                  date = file.date;
-
-                file
-                  ._compressWorker(compression, compressionOptions)
-                  .withStreamInfo("file", {
-                    name: relativePath,
-                    dir: dir,
-                    date: date,
-                    comment: file.comment || "",
-                    unixPermissions: file.unixPermissions,
-                    dosPermissions: file.dosPermissions,
-                  })
-                  .pipe(zipFileWorker);
-              });
-              zipFileWorker.entriesCount = entriesCount;
-            } catch (e) {
-              zipFileWorker.error(e);
-            }
-
-            return zipFileWorker;
-          };
-        },
-        { "../compressions": 3, "./ZipFileWorker": 8 },
-      ],
-      10: [
-        function (require, module, exports) {
-          "use strict";
-
-          /**
-           * Representation a of zip file in js
-           * @constructor
-           */
-          function JSZip() {
-            // if this constructor is used without `new`, it adds `new` before itself:
-            if (!(this instanceof JSZip)) {
-              return new JSZip();
-            }
-
-            if (arguments.length) {
-              throw new Error(
-                "The constructor with parameters has been removed in JSZip 3.0, please check the upgrade guide.",
-              );
-            }
-
-            // object containing the files :
-            // {
-            //   "folder/" : {...},
-            //   "folder/data.txt" : {...}
-            // }
-            // NOTE: we use a null prototype because we do not
-            // want filenames like "toString" coming from a zip file
-            // to overwrite methods and attributes in a normal Object.
-            this.files = Object.create(null);
-
-            this.comment = null;
-
-            // Where we are in the hierarchy
-            this.root = "";
-            this.clone = function () {
-              var newObj = new JSZip();
-              for (var i in this) {
-                if (typeof this[i] !== "function") {
-                  newObj[i] = this[i];
-                }
-              }
-              return newObj;
-            };
-          }
-          JSZip.prototype = require("./object");
-          JSZip.prototype.loadAsync = require("./load");
-          JSZip.support = require("./support");
-          JSZip.defaults = require("./defaults");
-
-          // TODO find a better way to handle this version,
-          // a require('package.json').version doesn't work with webpack, see #327
-          JSZip.version = "3.10.1";
-
-          JSZip.loadAsync = function (content, options) {
-            return new JSZip().loadAsync(content, options);
-          };
-
-          JSZip.external = require("./external");
-          module.exports = JSZip;
-        },
-        {
-          "./defaults": 5,
-          "./external": 6,
-          "./load": 11,
-          "./object": 15,
-          "./support": 30,
-        },
-      ],
-      11: [
-        function (require, module, exports) {
-          "use strict";
-          var utils = require("./utils");
-          var external = require("./external");
-          var utf8 = require("./utf8");
-          var ZipEntries = require("./zipEntries");
-          var Crc32Probe = require("./stream/Crc32Probe");
-          var nodejsUtils = require("./nodejsUtils");
-
-          /**
-           * Check the CRC32 of an entry.
-           * @param {ZipEntry} zipEntry the zip entry to check.
-           * @return {Promise} the result.
-           */
-          function checkEntryCRC32(zipEntry) {
-            return new external.Promise(function (resolve, reject) {
-              var worker = zipEntry.decompressed
-                .getContentWorker()
-                .pipe(new Crc32Probe());
-              worker
-                .on("error", function (e) {
-                  reject(e);
-                })
-                .on("end", function () {
-                  if (worker.streamInfo.crc32 !== zipEntry.decompressed.crc32) {
-                    reject(new Error("Corrupted zip : CRC32 mismatch"));
-                  } else {
-                    resolve();
-                  }
-                })
-                .resume();
-            });
-          }
-
-          module.exports = function (data, options) {
-            var zip = this;
-            options = utils.extend(options || {}, {
-              base64: false,
-              checkCRC32: false,
-              optimizedBinaryString: false,
-              createFolders: false,
-              decodeFileName: utf8.utf8decode,
-            });
-
-            if (nodejsUtils.isNode && nodejsUtils.isStream(data)) {
-              return external.Promise.reject(
-                new Error(
-                  "JSZip can't accept a stream when loading a zip file.",
-                ),
-              );
-            }
-
-            return utils
-              .prepareContent(
-                "the loaded zip file",
-                data,
-                true,
-                options.optimizedBinaryString,
-                options.base64,
-              )
-              .then(function (data) {
-                var zipEntries = new ZipEntries(options);
-                zipEntries.load(data);
-                return zipEntries;
-              })
-              .then(function checkCRC32(zipEntries) {
-                var promises = [external.Promise.resolve(zipEntries)];
-                var files = zipEntries.files;
-                if (options.checkCRC32) {
-                  for (var i = 0; i < files.length; i++) {
-                    promises.push(checkEntryCRC32(files[i]));
-                  }
-                }
-                return external.Promise.all(promises);
-              })
-              .then(function addFiles(results) {
-                var zipEntries = results.shift();
-                var files = zipEntries.files;
-                for (var i = 0; i < files.length; i++) {
-                  var input = files[i];
-
-                  var unsafeName = input.fileNameStr;
-                  var safeName = utils.resolve(input.fileNameStr);
-
-                  zip.file(safeName, input.decompressed, {
-                    binary: true,
-                    optimizedBinaryString: true,
-                    date: input.date,
-                    dir: input.dir,
-                    comment: input.fileCommentStr.length
-                      ? input.fileCommentStr
-                      : null,
-                    unixPermissions: input.unixPermissions,
-                    dosPermissions: input.dosPermissions,
-                    createFolders: options.createFolders,
-                  });
-                  if (!input.dir) {
-                    zip.file(safeName).unsafeOriginalName = unsafeName;
-                  }
-                }
-                if (zipEntries.zipComment.length) {
-                  zip.comment = zipEntries.zipComment;
-                }
-
-                return zip;
-              });
-          };
-        },
-        {
-          "./external": 6,
-          "./nodejsUtils": 14,
-          "./stream/Crc32Probe": 25,
-          "./utf8": 31,
-          "./utils": 32,
-          "./zipEntries": 33,
-        },
-      ],
-      12: [
-        function (require, module, exports) {
-          "use strict";
-
-          var utils = require("../utils");
-          var GenericWorker = require("../stream/GenericWorker");
-
-          /**
-           * A worker that use a nodejs stream as source.
-           * @constructor
-           * @param {String} filename the name of the file entry for this stream.
-           * @param {Readable} stream the nodejs stream.
-           */
-          function NodejsStreamInputAdapter(filename, stream) {
-            GenericWorker.call(
-              this,
-              "Nodejs stream input adapter for " + filename,
-            );
-            this._upstreamEnded = false;
-            this._bindStream(stream);
-          }
-
-          utils.inherits(NodejsStreamInputAdapter, GenericWorker);
-
-          /**
-           * Prepare the stream and bind the callbacks on it.
-           * Do this ASAP on node 0.10 ! A lazy binding doesn't always work.
-           * @param {Stream} stream the nodejs stream to use.
-           */
-          NodejsStreamInputAdapter.prototype._bindStream = function (stream) {
-            var self = this;
-            this._stream = stream;
-            stream.pause();
-            stream
-              .on("data", function (chunk) {
-                self.push({
-                  data: chunk,
-                  meta: {
-                    percent: 0,
-                  },
-                });
-              })
-              .on("error", function (e) {
-                if (self.isPaused) {
-                  this.generatedError = e;
-                } else {
-                  self.error(e);
-                }
-              })
-              .on("end", function () {
-                if (self.isPaused) {
-                  self._upstreamEnded = true;
-                } else {
-                  self.end();
-                }
-              });
-          };
-          NodejsStreamInputAdapter.prototype.pause = function () {
-            if (!GenericWorker.prototype.pause.call(this)) {
-              return false;
-            }
-            this._stream.pause();
-            return true;
-          };
-          NodejsStreamInputAdapter.prototype.resume = function () {
-            if (!GenericWorker.prototype.resume.call(this)) {
-              return false;
-            }
-
-            if (this._upstreamEnded) {
-              this.end();
-            } else {
-              this._stream.resume();
-            }
-
-            return true;
-          };
-
-          module.exports = NodejsStreamInputAdapter;
-        },
-        { "../stream/GenericWorker": 28, "../utils": 32 },
-      ],
-      13: [
-        function (require, module, exports) {
-          "use strict";
-
-          var Readable = require("readable-stream").Readable;
-
-          var utils = require("../utils");
-          utils.inherits(NodejsStreamOutputAdapter, Readable);
-
-          /**
-           * A nodejs stream using a worker as source.
-           * @see the SourceWrapper in http://nodejs.org/api/stream.html
-           * @constructor
-           * @param {StreamHelper} helper the helper wrapping the worker
-           * @param {Object} options the nodejs stream options
-           * @param {Function} updateCb the update callback.
-           */
-          function NodejsStreamOutputAdapter(helper, options, updateCb) {
-            Readable.call(this, options);
-            this._helper = helper;
-
-            var self = this;
-            helper
-              .on("data", function (data, meta) {
-                if (!self.push(data)) {
-                  self._helper.pause();
-                }
-                if (updateCb) {
-                  updateCb(meta);
-                }
-              })
-              .on("error", function (e) {
-                self.emit("error", e);
-              })
-              .on("end", function () {
-                self.push(null);
-              });
-          }
-
-          NodejsStreamOutputAdapter.prototype._read = function () {
-            this._helper.resume();
-          };
-
-          module.exports = NodejsStreamOutputAdapter;
-        },
-        { "../utils": 32, "readable-stream": 16 },
-      ],
-      14: [
-        function (require, module, exports) {
-          "use strict";
-
-          module.exports = {
-            /**
-             * True if this is running in Nodejs, will be undefined in a browser.
-             * In a browser, browserify won't include this file and the whole module
-             * will be resolved an empty object.
-             */
-            isNode: typeof Buffer !== "undefined",
-            /**
-             * Create a new nodejs Buffer from an existing content.
-             * @param {Object} data the data to pass to the constructor.
-             * @param {String} encoding the encoding to use.
-             * @return {Buffer} a new Buffer.
-             */
-            newBufferFrom: function (data, encoding) {
-              if (Buffer.from && Buffer.from !== Uint8Array.from) {
-                return Buffer.from(data, encoding);
-              } else {
-                if (typeof data === "number") {
-                  // Safeguard for old Node.js versions. On newer versions,
-                  // Buffer.from(number) / Buffer(number, encoding) already throw.
-                  throw new Error('The "data" argument must not be a number');
-                }
-                return new Buffer(data, encoding);
-              }
-            },
-            /**
-             * Create a new nodejs Buffer with the specified size.
-             * @param {Integer} size the size of the buffer.
-             * @return {Buffer} a new Buffer.
-             */
-            allocBuffer: function (size) {
-              if (Buffer.alloc) {
-                return Buffer.alloc(size);
-              } else {
-                var buf = new Buffer(size);
-                buf.fill(0);
-                return buf;
-              }
-            },
-            /**
-             * Find out if an object is a Buffer.
-             * @param {Object} b the object to test.
-             * @return {Boolean} true if the object is a Buffer, false otherwise.
-             */
-            isBuffer: function (b) {
-              return Buffer.isBuffer(b);
-            },
-
-            isStream: function (obj) {
-              return (
-                obj &&
-                typeof obj.on === "function" &&
-                typeof obj.pause === "function" &&
-                typeof obj.resume === "function"
-              );
-            },
-          };
-        },
-        {},
-      ],
-      15: [
-        function (require, module, exports) {
-          "use strict";
-          var utf8 = require("./utf8");
-          var utils = require("./utils");
-          var GenericWorker = require("./stream/GenericWorker");
-          var StreamHelper = require("./stream/StreamHelper");
-          var defaults = require("./defaults");
-          var CompressedObject = require("./compressedObject");
-          var ZipObject = require("./zipObject");
-          var generate = require("./generate");
-          var nodejsUtils = require("./nodejsUtils");
-          var NodejsStreamInputAdapter = require("./nodejs/NodejsStreamInputAdapter");
-
-          /**
-           * Add a file in the current folder.
-           * @private
-           * @param {string} name the name of the file
-           * @param {String|ArrayBuffer|Uint8Array|Buffer} data the data of the file
-           * @param {Object} originalOptions the options of the file
-           * @return {Object} the new file.
-           */
-          var fileAdd = function (name, data, originalOptions) {
-            // be sure sub folders exist
-            var dataType = utils.getTypeOf(data),
-              parent;
-
-            /*
-             * Correct options.
-             */
-
-            var o = utils.extend(originalOptions || {}, defaults);
-            o.date = o.date || new Date();
-            if (o.compression !== null) {
-              o.compression = o.compression.toUpperCase();
-            }
-
-            if (typeof o.unixPermissions === "string") {
-              o.unixPermissions = parseInt(o.unixPermissions, 8);
-            }
-
-            // UNX_IFDIR  0040000 see zipinfo.c
-            if (o.unixPermissions && o.unixPermissions & 0x4000) {
-              o.dir = true;
-            }
-            // Bit 4    Directory
-            if (o.dosPermissions && o.dosPermissions & 0x0010) {
-              o.dir = true;
-            }
-
-            if (o.dir) {
-              name = forceTrailingSlash(name);
-            }
-            if (o.createFolders && (parent = parentFolder(name))) {
-              folderAdd.call(this, parent, true);
-            }
-
-            var isUnicodeString =
-              dataType === "string" && o.binary === false && o.base64 === false;
-            if (
-              !originalOptions ||
-              typeof originalOptions.binary === "undefined"
-            ) {
-              o.binary = !isUnicodeString;
-            }
-
-            var isCompressedEmpty =
-              data instanceof CompressedObject && data.uncompressedSize === 0;
-
-            if (isCompressedEmpty || o.dir || !data || data.length === 0) {
-              o.base64 = false;
-              o.binary = true;
-              data = "";
-              o.compression = "STORE";
-              dataType = "string";
-            }
-
-            /*
-             * Convert content to fit.
-             */
-
-            var zipObjectContent = null;
-            if (
-              data instanceof CompressedObject ||
-              data instanceof GenericWorker
-            ) {
-              zipObjectContent = data;
-            } else if (nodejsUtils.isNode && nodejsUtils.isStream(data)) {
-              zipObjectContent = new NodejsStreamInputAdapter(name, data);
-            } else {
-              zipObjectContent = utils.prepareContent(
-                name,
-                data,
-                o.binary,
-                o.optimizedBinaryString,
-                o.base64,
-              );
-            }
-
-            var object = new ZipObject(name, zipObjectContent, o);
-            this.files[name] = object;
-            /*
-    TODO: we can't throw an exception because we have async promises
-    (we can have a promise of a Date() for example) but returning a
-    promise is useless because file(name, data) returns the JSZip
-    object for chaining. Should we break that to allow the user
-    to catch the error ?
-
-    return external.Promise.resolve(zipObjectContent)
-    .then(function () {
-        return object;
-    });
-    */
-          };
-
-          /**
-           * Find the parent folder of the path.
-           * @private
-           * @param {string} path the path to use
-           * @return {string} the parent folder, or ""
-           */
-          var parentFolder = function (path) {
-            if (path.slice(-1) === "/") {
-              path = path.substring(0, path.length - 1);
-            }
-            var lastSlash = path.lastIndexOf("/");
-            return lastSlash > 0 ? path.substring(0, lastSlash) : "";
-          };
-
-          /**
-           * Returns the path with a slash at the end.
-           * @private
-           * @param {String} path the path to check.
-           * @return {String} the path with a trailing slash.
-           */
-          var forceTrailingSlash = function (path) {
-            // Check the name ends with a /
-            if (path.slice(-1) !== "/") {
-              path += "/"; // IE doesn't like substr(-1)
-            }
-            return path;
-          };
-
-          /**
-           * Add a (sub) folder in the current folder.
-           * @private
-           * @param {string} name the folder's name
-           * @param {boolean=} [createFolders] If true, automatically create sub
-           *  folders. Defaults to false.
-           * @return {Object} the new folder.
-           */
-          var folderAdd = function (name, createFolders) {
-            createFolders =
-              typeof createFolders !== "undefined"
-                ? createFolders
-                : defaults.createFolders;
-
-            name = forceTrailingSlash(name);
-
-            // Does this folder already exist?
-            if (!this.files[name]) {
-              fileAdd.call(this, name, null, {
-                dir: true,
-                createFolders: createFolders,
-              });
-            }
-            return this.files[name];
-          };
-
-          /**
-           * Cross-window, cross-Node-context regular expression detection
-           * @param  {Object}  object Anything
-           * @return {Boolean}        true if the object is a regular expression,
-           * false otherwise
-           */
-          function isRegExp(object) {
-            return Object.prototype.toString.call(object) === "[object RegExp]";
-          }
-
-          // return the actual prototype of JSZip
-          var out = {
-            /**
-             * @see loadAsync
-             */
-            load: function () {
-              throw new Error(
-                "This method has been removed in JSZip 3.0, please check the upgrade guide.",
-              );
-            },
-
-            /**
-             * Call a callback function for each entry at this folder level.
-             * @param {Function} cb the callback function:
-             * function (relativePath, file) {...}
-             * It takes 2 arguments : the relative path and the file.
-             */
-            forEach: function (cb) {
-              var filename, relativePath, file;
-              // ignore warning about unwanted properties because this.files is a null prototype object
-              /* eslint-disable-next-line guard-for-in */
-              for (filename in this.files) {
-                file = this.files[filename];
-                relativePath = filename.slice(
-                  this.root.length,
-                  filename.length,
-                );
-                if (
-                  relativePath &&
-                  filename.slice(0, this.root.length) === this.root
-                ) {
-                  // the file is in the current root
-                  cb(relativePath, file); // TODO reverse the parameters ? need to be clean AND consistent with the filter search fn...
-                }
-              }
-            },
-
-            /**
-             * Filter nested files/folders with the specified function.
-             * @param {Function} search the predicate to use :
-             * function (relativePath, file) {...}
-             * It takes 2 arguments : the relative path and the file.
-             * @return {Array} An array of matching elements.
-             */
-            filter: function (search) {
-              var result = [];
-              this.forEach(function (relativePath, entry) {
-                if (search(relativePath, entry)) {
-                  // the file matches the function
-                  result.push(entry);
-                }
-              });
-              return result;
-            },
-
-            /**
-             * Add a file to the zip file, or search a file.
-             * @param   {string|RegExp} name The name of the file to add (if data is defined),
-             * the name of the file to find (if no data) or a regex to match files.
-             * @param   {String|ArrayBuffer|Uint8Array|Buffer} data  The file data, either raw or base64 encoded
-             * @param   {Object} o     File options
-             * @return  {JSZip|Object|Array} this JSZip object (when adding a file),
-             * a file (when searching by string) or an array of files (when searching by regex).
-             */
-            file: function (name, data, o) {
-              if (arguments.length === 1) {
-                if (isRegExp(name)) {
-                  var regexp = name;
-                  return this.filter(function (relativePath, file) {
-                    return !file.dir && regexp.test(relativePath);
-                  });
-                } else {
-                  // text
-                  var obj = this.files[this.root + name];
-                  if (obj && !obj.dir) {
-                    return obj;
-                  } else {
-                    return null;
-                  }
-                }
-              } else {
-                // more than one argument : we have data !
-                name = this.root + name;
-                fileAdd.call(this, name, data, o);
-              }
-              return this;
-            },
-
-            /**
-             * Add a directory to the zip file, or search.
-             * @param   {String|RegExp} arg The name of the directory to add, or a regex to search folders.
-             * @return  {JSZip} an object with the new directory as the root, or an array containing matching folders.
-             */
-            folder: function (arg) {
-              if (!arg) {
-                return this;
-              }
-
-              if (isRegExp(arg)) {
-                return this.filter(function (relativePath, file) {
-                  return file.dir && arg.test(relativePath);
-                });
-              }
-
-              // else, name is a new folder
-              var name = this.root + arg;
-              var newFolder = folderAdd.call(this, name);
-
-              // Allow chaining by returning a new object with this folder as the root
-              var ret = this.clone();
-              ret.root = newFolder.name;
-              return ret;
-            },
-
-            /**
-             * Delete a file, or a directory and all sub-files, from the zip
-             * @param {string} name the name of the file to delete
-             * @return {JSZip} this JSZip object
-             */
-            remove: function (name) {
-              name = this.root + name;
-              var file = this.files[name];
-              if (!file) {
-                // Look for any folders
-                if (name.slice(-1) !== "/") {
-                  name += "/";
-                }
-                file = this.files[name];
-              }
-
-              if (file && !file.dir) {
-                // file
-                delete this.files[name];
-              } else {
-                // maybe a folder, delete recursively
-                var kids = this.filter(function (relativePath, file) {
-                  return file.name.slice(0, name.length) === name;
-                });
-                for (var i = 0; i < kids.length; i++) {
-                  delete this.files[kids[i].name];
-                }
-              }
-
-              return this;
-            },
-
-            /**
-             * @deprecated This method has been removed in JSZip 3.0, please check the upgrade guide.
-             */
-            generate: function () {
-              throw new Error(
-                "This method has been removed in JSZip 3.0, please check the upgrade guide.",
-              );
-            },
-
-            /**
-             * Generate the complete zip file as an internal stream.
-             * @param {Object} options the options to generate the zip file :
-             * - compression, "STORE" by default.
-             * - type, "base64" by default. Values are : string, base64, uint8array, arraybuffer, blob.
-             * @return {StreamHelper} the streamed zip file.
-             */
-            generateInternalStream: function (options) {
-              var worker,
-                opts = {};
-              try {
-                opts = utils.extend(options || {}, {
-                  streamFiles: false,
-                  compression: "STORE",
-                  compressionOptions: null,
-                  type: "",
-                  platform: "DOS",
-                  comment: null,
-                  mimeType: "application/zip",
-                  encodeFileName: utf8.utf8encode,
-                });
-
-                opts.type = opts.type.toLowerCase();
-                opts.compression = opts.compression.toUpperCase();
-
-                // "binarystring" is preferred but the internals use "string".
-                if (opts.type === "binarystring") {
-                  opts.type = "string";
-                }
-
-                if (!opts.type) {
-                  throw new Error("No output type specified.");
-                }
-
-                utils.checkSupport(opts.type);
-
-                // accept nodejs `process.platform`
-                if (
-                  opts.platform === "darwin" ||
-                  opts.platform === "freebsd" ||
-                  opts.platform === "linux" ||
-                  opts.platform === "sunos"
-                ) {
-                  opts.platform = "UNIX";
-                }
-                if (opts.platform === "win32") {
-                  opts.platform = "DOS";
-                }
-
-                var comment = opts.comment || this.comment || "";
-                worker = generate.generateWorker(this, opts, comment);
-              } catch (e) {
-                worker = new GenericWorker("error");
-                worker.error(e);
-              }
-              return new StreamHelper(
-                worker,
-                opts.type || "string",
-                opts.mimeType,
-              );
-            },
-            /**
-             * Generate the complete zip file asynchronously.
-             * @see generateInternalStream
-             */
-            generateAsync: function (options, onUpdate) {
-              return this.generateInternalStream(options).accumulate(onUpdate);
-            },
-            /**
-             * Generate the complete zip file asynchronously.
-             * @see generateInternalStream
-             */
-            generateNodeStream: function (options, onUpdate) {
-              options = options || {};
-              if (!options.type) {
-                options.type = "nodebuffer";
-              }
-              return this.generateInternalStream(options).toNodejsStream(
-                onUpdate,
-              );
-            },
-          };
-          module.exports = out;
-        },
-        {
-          "./compressedObject": 2,
-          "./defaults": 5,
-          "./generate": 9,
-          "./nodejs/NodejsStreamInputAdapter": 12,
-          "./nodejsUtils": 14,
-          "./stream/GenericWorker": 28,
-          "./stream/StreamHelper": 29,
-          "./utf8": 31,
-          "./utils": 32,
-          "./zipObject": 35,
-        },
-      ],
-      16: [
-        function (require, module, exports) {
-          "use strict";
-          /*
-           * This file is used by module bundlers (browserify/webpack/etc) when
-           * including a stream implementation. We use "readable-stream" to get a
-           * consistent behavior between nodejs versions but bundlers often have a shim
-           * for "stream". Using this shim greatly improve the compatibility and greatly
-           * reduce the final size of the bundle (only one stream implementation, not
-           * two).
-           */
-          module.exports = require("stream");
-        },
-        { stream: undefined },
-      ],
-      17: [
-        function (require, module, exports) {
-          "use strict";
-          var DataReader = require("./DataReader");
-          var utils = require("../utils");
-
-          function ArrayReader(data) {
-            DataReader.call(this, data);
-            for (var i = 0; i < this.data.length; i++) {
-              data[i] = data[i] & 0xff;
-            }
-          }
-          utils.inherits(ArrayReader, DataReader);
-          /**
-           * @see DataReader.byteAt
-           */
-          ArrayReader.prototype.byteAt = function (i) {
-            return this.data[this.zero + i];
-          };
-          /**
-           * @see DataReader.lastIndexOfSignature
-           */
-          ArrayReader.prototype.lastIndexOfSignature = function (sig) {
-            var sig0 = sig.charCodeAt(0),
-              sig1 = sig.charCodeAt(1),
-              sig2 = sig.charCodeAt(2),
-              sig3 = sig.charCodeAt(3);
-            for (var i = this.length - 4; i >= 0; --i) {
-              if (
-                this.data[i] === sig0 &&
-                this.data[i + 1] === sig1 &&
-                this.data[i + 2] === sig2 &&
-                this.data[i + 3] === sig3
-              ) {
-                return i - this.zero;
-              }
-            }
-
-            return -1;
-          };
-          /**
-           * @see DataReader.readAndCheckSignature
-           */
-          ArrayReader.prototype.readAndCheckSignature = function (sig) {
-            var sig0 = sig.charCodeAt(0),
-              sig1 = sig.charCodeAt(1),
-              sig2 = sig.charCodeAt(2),
-              sig3 = sig.charCodeAt(3),
-              data = this.readData(4);
-            return (
-              sig0 === data[0] &&
-              sig1 === data[1] &&
-              sig2 === data[2] &&
-              sig3 === data[3]
-            );
-          };
-          /**
-           * @see DataReader.readData
-           */
-          ArrayReader.prototype.readData = function (size) {
-            this.checkOffset(size);
-            if (size === 0) {
-              return [];
-            }
-            var result = this.data.slice(
-              this.zero + this.index,
-              this.zero + this.index + size,
-            );
-            this.index += size;
-            return result;
-          };
-          module.exports = ArrayReader;
-        },
-        { "../utils": 32, "./DataReader": 18 },
-      ],
-      18: [
-        function (require, module, exports) {
-          "use strict";
-          var utils = require("../utils");
-
-          function DataReader(data) {
-            this.data = data; // type : see implementation
-            this.length = data.length;
-            this.index = 0;
-            this.zero = 0;
-          }
-          DataReader.prototype = {
-            /**
-             * Check that the offset will not go too far.
-             * @param {string} offset the additional offset to check.
-             * @throws {Error} an Error if the offset is out of bounds.
-             */
-            checkOffset: function (offset) {
-              this.checkIndex(this.index + offset);
-            },
-            /**
-             * Check that the specified index will not be too far.
-             * @param {string} newIndex the index to check.
-             * @throws {Error} an Error if the index is out of bounds.
-             */
-            checkIndex: function (newIndex) {
-              if (this.length < this.zero + newIndex || newIndex < 0) {
-                throw new Error(
-                  "End of data reached (data length = " +
-                    this.length +
-                    ", asked index = " +
-                    newIndex +
-                    "). Corrupted zip ?",
-                );
-              }
-            },
-            /**
-             * Change the index.
-             * @param {number} newIndex The new index.
-             * @throws {Error} if the new index is out of the data.
-             */
-            setIndex: function (newIndex) {
-              this.checkIndex(newIndex);
-              this.index = newIndex;
-            },
-            /**
-             * Skip the next n bytes.
-             * @param {number} n the number of bytes to skip.
-             * @throws {Error} if the new index is out of the data.
-             */
-            skip: function (n) {
-              this.setIndex(this.index + n);
-            },
-            /**
-             * Get the byte at the specified index.
-             * @param {number} i the index to use.
-             * @return {number} a byte.
-             */
-            byteAt: function () {
-              // see implementations
-            },
-            /**
-             * Get the next number with a given byte size.
-             * @param {number} size the number of bytes to read.
-             * @return {number} the corresponding number.
-             */
-            readInt: function (size) {
-              var result = 0,
-                i;
-              this.checkOffset(size);
-              for (i = this.index + size - 1; i >= this.index; i--) {
-                result = (result << 8) + this.byteAt(i);
-              }
-              this.index += size;
-              return result;
-            },
-            /**
-             * Get the next string with a given byte size.
-             * @param {number} size the number of bytes to read.
-             * @return {string} the corresponding string.
-             */
-            readString: function (size) {
-              return utils.transformTo("string", this.readData(size));
-            },
-            /**
-             * Get raw data without conversion, <size> bytes.
-             * @param {number} size the number of bytes to read.
-             * @return {Object} the raw data, implementation specific.
-             */
-            readData: function () {
-              // see implementations
-            },
-            /**
-             * Find the last occurrence of a zip signature (4 bytes).
-             * @param {string} sig the signature to find.
-             * @return {number} the index of the last occurrence, -1 if not found.
-             */
-            lastIndexOfSignature: function () {
-              // see implementations
-            },
-            /**
-             * Read the signature (4 bytes) at the current position and compare it with sig.
-             * @param {string} sig the expected signature
-             * @return {boolean} true if the signature matches, false otherwise.
-             */
-            readAndCheckSignature: function () {
-              // see implementations
-            },
-            /**
-             * Get the next date.
-             * @return {Date} the date.
-             */
-            readDate: function () {
-              var dostime = this.readInt(4);
-              return new Date(
-                Date.UTC(
-                  ((dostime >> 25) & 0x7f) + 1980, // year
-                  ((dostime >> 21) & 0x0f) - 1, // month
-                  (dostime >> 16) & 0x1f, // day
-                  (dostime >> 11) & 0x1f, // hour
-                  (dostime >> 5) & 0x3f, // minute
-                  (dostime & 0x1f) << 1,
-                ),
-              ); // second
-            },
-          };
-          module.exports = DataReader;
-        },
-        { "../utils": 32 },
-      ],
-      19: [
-        function (require, module, exports) {
-          "use strict";
-          var Uint8ArrayReader = require("./Uint8ArrayReader");
-          var utils = require("../utils");
-
-          function NodeBufferReader(data) {
-            Uint8ArrayReader.call(this, data);
-          }
-          utils.inherits(NodeBufferReader, Uint8ArrayReader);
-
-          /**
-           * @see DataReader.readData
-           */
-          NodeBufferReader.prototype.readData = function (size) {
-            this.checkOffset(size);
-            var result = this.data.slice(
-              this.zero + this.index,
-              this.zero + this.index + size,
-            );
-            this.index += size;
-            return result;
-          };
-          module.exports = NodeBufferReader;
-        },
-        { "../utils": 32, "./Uint8ArrayReader": 21 },
-      ],
-      20: [
-        function (require, module, exports) {
-          "use strict";
-          var DataReader = require("./DataReader");
-          var utils = require("../utils");
-
-          function StringReader(data) {
-            DataReader.call(this, data);
-          }
-          utils.inherits(StringReader, DataReader);
-          /**
-           * @see DataReader.byteAt
-           */
-          StringReader.prototype.byteAt = function (i) {
-            return this.data.charCodeAt(this.zero + i);
-          };
-          /**
-           * @see DataReader.lastIndexOfSignature
-           */
-          StringReader.prototype.lastIndexOfSignature = function (sig) {
-            return this.data.lastIndexOf(sig) - this.zero;
-          };
-          /**
-           * @see DataReader.readAndCheckSignature
-           */
-          StringReader.prototype.readAndCheckSignature = function (sig) {
-            var data = this.readData(4);
-            return sig === data;
-          };
-          /**
-           * @see DataReader.readData
-           */
-          StringReader.prototype.readData = function (size) {
-            this.checkOffset(size);
-            // this will work because the constructor applied the "& 0xff" mask.
-            var result = this.data.slice(
-              this.zero + this.index,
-              this.zero + this.index + size,
-            );
-            this.index += size;
-            return result;
-          };
-          module.exports = StringReader;
-        },
-        { "../utils": 32, "./DataReader": 18 },
-      ],
-      21: [
-        function (require, module, exports) {
-          "use strict";
-          var ArrayReader = require("./ArrayReader");
-          var utils = require("../utils");
-
-          function Uint8ArrayReader(data) {
-            ArrayReader.call(this, data);
-          }
-          utils.inherits(Uint8ArrayReader, ArrayReader);
-          /**
-           * @see DataReader.readData
-           */
-          Uint8ArrayReader.prototype.readData = function (size) {
-            this.checkOffset(size);
-            if (size === 0) {
-              // in IE10, when using subarray(idx, idx), we get the array [0x00] instead of [].
-              return new Uint8Array(0);
-            }
-            var result = this.data.subarray(
-              this.zero + this.index,
-              this.zero + this.index + size,
-            );
-            this.index += size;
-            return result;
-          };
-          module.exports = Uint8ArrayReader;
-        },
-        { "../utils": 32, "./ArrayReader": 17 },
-      ],
-      22: [
-        function (require, module, exports) {
-          "use strict";
-
-          var utils = require("../utils");
-          var support = require("../support");
-          var ArrayReader = require("./ArrayReader");
-          var StringReader = require("./StringReader");
-          var NodeBufferReader = require("./NodeBufferReader");
-          var Uint8ArrayReader = require("./Uint8ArrayReader");
-
-          /**
-           * Create a reader adapted to the data.
-           * @param {String|ArrayBuffer|Uint8Array|Buffer} data the data to read.
-           * @return {DataReader} the data reader.
-           */
-          module.exports = function (data) {
-            var type = utils.getTypeOf(data);
-            utils.checkSupport(type);
-            if (type === "string" && !support.uint8array) {
-              return new StringReader(data);
-            }
-            if (type === "nodebuffer") {
-              return new NodeBufferReader(data);
-            }
-            if (support.uint8array) {
-              return new Uint8ArrayReader(
-                utils.transformTo("uint8array", data),
-              );
-            }
-            return new ArrayReader(utils.transformTo("array", data));
-          };
-        },
-        {
-          "../support": 30,
-          "../utils": 32,
-          "./ArrayReader": 17,
-          "./NodeBufferReader": 19,
-          "./StringReader": 20,
-          "./Uint8ArrayReader": 21,
-        },
-      ],
-      23: [
-        function (require, module, exports) {
-          "use strict";
-          exports.LOCAL_FILE_HEADER = "PK\x03\x04";
-          exports.CENTRAL_FILE_HEADER = "PK\x01\x02";
-          exports.CENTRAL_DIRECTORY_END = "PK\x05\x06";
-          exports.ZIP64_CENTRAL_DIRECTORY_LOCATOR = "PK\x06\x07";
-          exports.ZIP64_CENTRAL_DIRECTORY_END = "PK\x06\x06";
-          exports.DATA_DESCRIPTOR = "PK\x07\x08";
-        },
-        {},
-      ],
-      24: [
-        function (require, module, exports) {
-          "use strict";
-
-          var GenericWorker = require("./GenericWorker");
-          var utils = require("../utils");
-
-          /**
-           * A worker which convert chunks to a specified type.
-           * @constructor
-           * @param {String} destType the destination type.
-           */
-          function ConvertWorker(destType) {
-            GenericWorker.call(this, "ConvertWorker to " + destType);
-            this.destType = destType;
-          }
-          utils.inherits(ConvertWorker, GenericWorker);
-
-          /**
-           * @see GenericWorker.processChunk
-           */
-          ConvertWorker.prototype.processChunk = function (chunk) {
-            this.push({
-              data: utils.transformTo(this.destType, chunk.data),
-              meta: chunk.meta,
-            });
-          };
-          module.exports = ConvertWorker;
-        },
-        { "../utils": 32, "./GenericWorker": 28 },
-      ],
-      25: [
-        function (require, module, exports) {
-          "use strict";
-
-          var GenericWorker = require("./GenericWorker");
-          var crc32 = require("../crc32");
-          var utils = require("../utils");
-
-          /**
-           * A worker which calculate the crc32 of the data flowing through.
-           * @constructor
-           */
-          function Crc32Probe() {
-            GenericWorker.call(this, "Crc32Probe");
-            this.withStreamInfo("crc32", 0);
-          }
-          utils.inherits(Crc32Probe, GenericWorker);
-
-          /**
-           * @see GenericWorker.processChunk
-           */
-          Crc32Probe.prototype.processChunk = function (chunk) {
-            this.streamInfo.crc32 = crc32(
-              chunk.data,
-              this.streamInfo.crc32 || 0,
-            );
-            this.push(chunk);
-          };
-          module.exports = Crc32Probe;
-        },
-        { "../crc32": 4, "../utils": 32, "./GenericWorker": 28 },
-      ],
-      26: [
-        function (require, module, exports) {
-          "use strict";
-
-          var utils = require("../utils");
-          var GenericWorker = require("./GenericWorker");
-
-          /**
-           * A worker which calculate the total length of the data flowing through.
-           * @constructor
-           * @param {String} propName the name used to expose the length
-           */
-          function DataLengthProbe(propName) {
-            GenericWorker.call(this, "DataLengthProbe for " + propName);
-            this.propName = propName;
-            this.withStreamInfo(propName, 0);
-          }
-          utils.inherits(DataLengthProbe, GenericWorker);
-
-          /**
-           * @see GenericWorker.processChunk
-           */
-          DataLengthProbe.prototype.processChunk = function (chunk) {
-            if (chunk) {
-              var length = this.streamInfo[this.propName] || 0;
-              this.streamInfo[this.propName] = length + chunk.data.length;
-            }
-            GenericWorker.prototype.processChunk.call(this, chunk);
-          };
-          module.exports = DataLengthProbe;
-        },
-        { "../utils": 32, "./GenericWorker": 28 },
-      ],
-      27: [
-        function (require, module, exports) {
-          "use strict";
-
-          var utils = require("../utils");
-          var GenericWorker = require("./GenericWorker");
-
-          // the size of the generated chunks
-          // TODO expose this as a public variable
-          var DEFAULT_BLOCK_SIZE = 16 * 1024;
-
-          /**
-           * A worker that reads a content and emits chunks.
-           * @constructor
-           * @param {Promise} dataP the promise of the data to split
-           */
-          function DataWorker(dataP) {
-            GenericWorker.call(this, "DataWorker");
-            var self = this;
-            this.dataIsReady = false;
-            this.index = 0;
-            this.max = 0;
-            this.data = null;
-            this.type = "";
-
-            this._tickScheduled = false;
-
-            dataP.then(
-              function (data) {
-                self.dataIsReady = true;
-                self.data = data;
-                self.max = (data && data.length) || 0;
-                self.type = utils.getTypeOf(data);
-                if (!self.isPaused) {
-                  self._tickAndRepeat();
-                }
-              },
-              function (e) {
-                self.error(e);
-              },
-            );
-          }
-
-          utils.inherits(DataWorker, GenericWorker);
-
-          /**
-           * @see GenericWorker.cleanUp
-           */
-          DataWorker.prototype.cleanUp = function () {
-            GenericWorker.prototype.cleanUp.call(this);
-            this.data = null;
-          };
-
-          /**
-           * @see GenericWorker.resume
-           */
-          DataWorker.prototype.resume = function () {
-            if (!GenericWorker.prototype.resume.call(this)) {
-              return false;
-            }
-
-            if (!this._tickScheduled && this.dataIsReady) {
-              this._tickScheduled = true;
-              utils.delay(this._tickAndRepeat, [], this);
-            }
-            return true;
-          };
-
-          /**
-           * Trigger a tick a schedule an other call to this function.
-           */
-          DataWorker.prototype._tickAndRepeat = function () {
-            this._tickScheduled = false;
-            if (this.isPaused || this.isFinished) {
-              return;
-            }
-            this._tick();
-            if (!this.isFinished) {
-              utils.delay(this._tickAndRepeat, [], this);
-              this._tickScheduled = true;
-            }
-          };
-
-          /**
-           * Read and push a chunk.
-           */
-          DataWorker.prototype._tick = function () {
-            if (this.isPaused || this.isFinished) {
-              return false;
-            }
-
-            var size = DEFAULT_BLOCK_SIZE;
-            var data = null,
-              nextIndex = Math.min(this.max, this.index + size);
-            if (this.index >= this.max) {
-              // EOF
-              return this.end();
-            } else {
-              switch (this.type) {
-                case "string":
-                  data = this.data.substring(this.index, nextIndex);
-                  break;
-                case "uint8array":
-                  data = this.data.subarray(this.index, nextIndex);
-                  break;
-                case "array":
-                case "nodebuffer":
-                  data = this.data.slice(this.index, nextIndex);
-                  break;
-              }
-              this.index = nextIndex;
-              return this.push({
-                data: data,
-                meta: {
-                  percent: this.max ? (this.index / this.max) * 100 : 0,
-                },
-              });
-            }
-          };
-
-          module.exports = DataWorker;
-        },
-        { "../utils": 32, "./GenericWorker": 28 },
-      ],
-      28: [
-        function (require, module, exports) {
-          "use strict";
-
-          /**
-           * A worker that does nothing but passing chunks to the next one. This is like
-           * a nodejs stream but with some differences. On the good side :
-           * - it works on IE 6-9 without any issue / polyfill
-           * - it weights less than the full dependencies bundled with browserify
-           * - it forwards errors (no need to declare an error handler EVERYWHERE)
-           *
-           * A chunk is an object with 2 attributes : `meta` and `data`. The former is an
-           * object containing anything (`percent` for example), see each worker for more
-           * details. The latter is the real data (String, Uint8Array, etc).
-           *
-           * @constructor
-           * @param {String} name the name of the stream (mainly used for debugging purposes)
-           */
-          function GenericWorker(name) {
-            // the name of the worker
-            this.name = name || "default";
-            // an object containing metadata about the workers chain
-            this.streamInfo = {};
-            // an error which happened when the worker was paused
-            this.generatedError = null;
-            // an object containing metadata to be merged by this worker into the general metadata
-            this.extraStreamInfo = {};
-            // true if the stream is paused (and should not do anything), false otherwise
-            this.isPaused = true;
-            // true if the stream is finished (and should not do anything), false otherwise
-            this.isFinished = false;
-            // true if the stream is locked to prevent further structure updates (pipe), false otherwise
-            this.isLocked = false;
-            // the event listeners
-            this._listeners = {
-              data: [],
-              end: [],
-              error: [],
-            };
-            // the previous worker, if any
-            this.previous = null;
-          }
-
-          GenericWorker.prototype = {
-            /**
-             * Push a chunk to the next workers.
-             * @param {Object} chunk the chunk to push
-             */
-            push: function (chunk) {
-              this.emit("data", chunk);
-            },
-            /**
-             * End the stream.
-             * @return {Boolean} true if this call ended the worker, false otherwise.
-             */
-            end: function () {
-              if (this.isFinished) {
-                return false;
-              }
-
-              this.flush();
-              try {
-                this.emit("end");
-                this.cleanUp();
-                this.isFinished = true;
-              } catch (e) {
-                this.emit("error", e);
-              }
-              return true;
-            },
-            /**
-             * End the stream with an error.
-             * @param {Error} e the error which caused the premature end.
-             * @return {Boolean} true if this call ended the worker with an error, false otherwise.
-             */
-            error: function (e) {
-              if (this.isFinished) {
-                return false;
-              }
-
-              if (this.isPaused) {
-                this.generatedError = e;
-              } else {
-                this.isFinished = true;
-
-                this.emit("error", e);
-
-                // in the workers chain exploded in the middle of the chain,
-                // the error event will go downward but we also need to notify
-                // workers upward that there has been an error.
-                if (this.previous) {
-                  this.previous.error(e);
-                }
-
-                this.cleanUp();
-              }
-              return true;
-            },
-            /**
-             * Add a callback on an event.
-             * @param {String} name the name of the event (data, end, error)
-             * @param {Function} listener the function to call when the event is triggered
-             * @return {GenericWorker} the current object for chainability
-             */
-            on: function (name, listener) {
-              this._listeners[name].push(listener);
-              return this;
-            },
-            /**
-             * Clean any references when a worker is ending.
-             */
-            cleanUp: function () {
-              this.streamInfo =
-                this.generatedError =
-                this.extraStreamInfo =
-                  null;
-              this._listeners = [];
-            },
-            /**
-             * Trigger an event. This will call registered callback with the provided arg.
-             * @param {String} name the name of the event (data, end, error)
-             * @param {Object} arg the argument to call the callback with.
-             */
-            emit: function (name, arg) {
-              if (this._listeners[name]) {
-                for (var i = 0; i < this._listeners[name].length; i++) {
-                  this._listeners[name][i].call(this, arg);
-                }
-              }
-            },
-            /**
-             * Chain a worker with an other.
-             * @param {Worker} next the worker receiving events from the current one.
-             * @return {worker} the next worker for chainability
-             */
-            pipe: function (next) {
-              return next.registerPrevious(this);
-            },
-            /**
-             * Same as `pipe` in the other direction.
-             * Using an API with `pipe(next)` is very easy.
-             * Implementing the API with the point of view of the next one registering
-             * a source is easier, see the ZipFileWorker.
-             * @param {Worker} previous the previous worker, sending events to this one
-             * @return {Worker} the current worker for chainability
-             */
-            registerPrevious: function (previous) {
-              if (this.isLocked) {
-                throw new Error(
-                  "The stream '" + this + "' has already been used.",
-                );
-              }
-
-              // sharing the streamInfo...
-              this.streamInfo = previous.streamInfo;
-              // ... and adding our own bits
-              this.mergeStreamInfo();
-              this.previous = previous;
-              var self = this;
-              previous.on("data", function (chunk) {
-                self.processChunk(chunk);
-              });
-              previous.on("end", function () {
-                self.end();
-              });
-              previous.on("error", function (e) {
-                self.error(e);
-              });
-              return this;
-            },
-            /**
-             * Pause the stream so it doesn't send events anymore.
-             * @return {Boolean} true if this call paused the worker, false otherwise.
-             */
-            pause: function () {
-              if (this.isPaused || this.isFinished) {
-                return false;
-              }
-              this.isPaused = true;
-
-              if (this.previous) {
-                this.previous.pause();
-              }
-              return true;
-            },
-            /**
-             * Resume a paused stream.
-             * @return {Boolean} true if this call resumed the worker, false otherwise.
-             */
-            resume: function () {
-              if (!this.isPaused || this.isFinished) {
-                return false;
-              }
-              this.isPaused = false;
-
-              // if true, the worker tried to resume but failed
-              var withError = false;
-              if (this.generatedError) {
-                this.error(this.generatedError);
-                withError = true;
-              }
-              if (this.previous) {
-                this.previous.resume();
-              }
-
-              return !withError;
-            },
-            /**
-             * Flush any remaining bytes as the stream is ending.
-             */
-            flush: function () {},
-            /**
-             * Process a chunk. This is usually the method overridden.
-             * @param {Object} chunk the chunk to process.
-             */
-            processChunk: function (chunk) {
-              this.push(chunk);
-            },
-            /**
-             * Add a key/value to be added in the workers chain streamInfo once activated.
-             * @param {String} key the key to use
-             * @param {Object} value the associated value
-             * @return {Worker} the current worker for chainability
-             */
-            withStreamInfo: function (key, value) {
-              this.extraStreamInfo[key] = value;
-              this.mergeStreamInfo();
-              return this;
-            },
-            /**
-             * Merge this worker's streamInfo into the chain's streamInfo.
-             */
-            mergeStreamInfo: function () {
-              for (var key in this.extraStreamInfo) {
-                if (
-                  !Object.prototype.hasOwnProperty.call(
-                    this.extraStreamInfo,
-                    key,
-                  )
-                ) {
-                  continue;
-                }
-                this.streamInfo[key] = this.extraStreamInfo[key];
-              }
-            },
-
-            /**
-             * Lock the stream to prevent further updates on the workers chain.
-             * After calling this method, all calls to pipe will fail.
-             */
-            lock: function () {
-              if (this.isLocked) {
-                throw new Error(
-                  "The stream '" + this + "' has already been used.",
-                );
-              }
-              this.isLocked = true;
-              if (this.previous) {
-                this.previous.lock();
-              }
-            },
-
-            /**
-             *
-             * Pretty print the workers chain.
-             */
-            toString: function () {
-              var me = "Worker " + this.name;
-              if (this.previous) {
-                return this.previous + " -> " + me;
-              } else {
-                return me;
-              }
-            },
-          };
-
-          module.exports = GenericWorker;
-        },
-        {},
-      ],
-      29: [
-        function (require, module, exports) {
-          "use strict";
-
-          var utils = require("../utils");
-          var ConvertWorker = require("./ConvertWorker");
-          var GenericWorker = require("./GenericWorker");
-          var base64 = require("../base64");
-          var support = require("../support");
-          var external = require("../external");
-
-          var NodejsStreamOutputAdapter = null;
-          if (support.nodestream) {
-            try {
-              NodejsStreamOutputAdapter = require("../nodejs/NodejsStreamOutputAdapter");
-            } catch (e) {
-              // ignore
-            }
-          }
-
-          /**
-           * Apply the final transformation of the data. If the user wants a Blob for
-           * example, it's easier to work with an U8intArray and finally do the
-           * ArrayBuffer/Blob conversion.
-           * @param {String} type the name of the final type
-           * @param {String|Uint8Array|Buffer} content the content to transform
-           * @param {String} mimeType the mime type of the content, if applicable.
-           * @return {String|Uint8Array|ArrayBuffer|Buffer|Blob} the content in the right format.
-           */
-          function transformZipOutput(type, content, mimeType) {
-            switch (type) {
-              case "blob":
-                return utils.newBlob(
-                  utils.transformTo("arraybuffer", content),
-                  mimeType,
-                );
-              case "base64":
-                return base64.encode(content);
-              default:
-                return utils.transformTo(type, content);
-            }
-          }
-
-          /**
-           * Concatenate an array of data of the given type.
-           * @param {String} type the type of the data in the given array.
-           * @param {Array} dataArray the array containing the data chunks to concatenate
-           * @return {String|Uint8Array|Buffer} the concatenated data
-           * @throws Error if the asked type is unsupported
-           */
-          function concat(type, dataArray) {
-            var i,
-              index = 0,
-              res = null,
-              totalLength = 0;
-            for (i = 0; i < dataArray.length; i++) {
-              totalLength += dataArray[i].length;
-            }
-            switch (type) {
-              case "string":
-                return dataArray.join("");
-              case "array":
-                return Array.prototype.concat.apply([], dataArray);
-              case "uint8array":
-                res = new Uint8Array(totalLength);
-                for (i = 0; i < dataArray.length; i++) {
-                  res.set(dataArray[i], index);
-                  index += dataArray[i].length;
-                }
-                return res;
-              case "nodebuffer":
-                return Buffer.concat(dataArray);
-              default:
-                throw new Error("concat : unsupported type '" + type + "'");
-            }
-          }
-
-          /**
-           * Listen a StreamHelper, accumulate its content and concatenate it into a
-           * complete block.
-           * @param {StreamHelper} helper the helper to use.
-           * @param {Function} updateCallback a callback called on each update. Called
-           * with one arg :
-           * - the metadata linked to the update received.
-           * @return Promise the promise for the accumulation.
-           */
-          function accumulate(helper, updateCallback) {
-            return new external.Promise(function (resolve, reject) {
-              var dataArray = [];
-              var chunkType = helper._internalType,
-                resultType = helper._outputType,
-                mimeType = helper._mimeType;
-              helper
-                .on("data", function (data, meta) {
-                  dataArray.push(data);
-                  if (updateCallback) {
-                    updateCallback(meta);
-                  }
-                })
-                .on("error", function (err) {
-                  dataArray = [];
-                  reject(err);
-                })
-                .on("end", function () {
-                  try {
-                    var result = transformZipOutput(
-                      resultType,
-                      concat(chunkType, dataArray),
-                      mimeType,
-                    );
-                    resolve(result);
-                  } catch (e) {
-                    reject(e);
-                  }
-                  dataArray = [];
-                })
-                .resume();
-            });
-          }
-
-          /**
-           * An helper to easily use workers outside of JSZip.
-           * @constructor
-           * @param {Worker} worker the worker to wrap
-           * @param {String} outputType the type of data expected by the use
-           * @param {String} mimeType the mime type of the content, if applicable.
-           */
-          function StreamHelper(worker, outputType, mimeType) {
-            var internalType = outputType;
-            switch (outputType) {
-              case "blob":
-              case "arraybuffer":
-                internalType = "uint8array";
-                break;
-              case "base64":
-                internalType = "string";
-                break;
-            }
-
-            try {
-              // the type used internally
-              this._internalType = internalType;
-              // the type used to output results
-              this._outputType = outputType;
-              // the mime type
-              this._mimeType = mimeType;
-              utils.checkSupport(internalType);
-              this._worker = worker.pipe(new ConvertWorker(internalType));
-              // the last workers can be rewired without issues but we need to
-              // prevent any updates on previous workers.
-              worker.lock();
-            } catch (e) {
-              this._worker = new GenericWorker("error");
-              this._worker.error(e);
-            }
-          }
-
-          StreamHelper.prototype = {
-            /**
-             * Listen a StreamHelper, accumulate its content and concatenate it into a
-             * complete block.
-             * @param {Function} updateCb the update callback.
-             * @return Promise the promise for the accumulation.
-             */
-            accumulate: function (updateCb) {
-              return accumulate(this, updateCb);
-            },
-            /**
-             * Add a listener on an event triggered on a stream.
-             * @param {String} evt the name of the event
-             * @param {Function} fn the listener
-             * @return {StreamHelper} the current helper.
-             */
-            on: function (evt, fn) {
-              var self = this;
-
-              if (evt === "data") {
-                this._worker.on(evt, function (chunk) {
-                  fn.call(self, chunk.data, chunk.meta);
-                });
-              } else {
-                this._worker.on(evt, function () {
-                  utils.delay(fn, arguments, self);
-                });
-              }
-              return this;
-            },
-            /**
-             * Resume the flow of chunks.
-             * @return {StreamHelper} the current helper.
-             */
-            resume: function () {
-              utils.delay(this._worker.resume, [], this._worker);
-              return this;
-            },
-            /**
-             * Pause the flow of chunks.
-             * @return {StreamHelper} the current helper.
-             */
-            pause: function () {
-              this._worker.pause();
-              return this;
-            },
-            /**
-             * Return a nodejs stream for this helper.
-             * @param {Function} updateCb the update callback.
-             * @return {NodejsStreamOutputAdapter} the nodejs stream.
-             */
-            toNodejsStream: function (updateCb) {
-              utils.checkSupport("nodestream");
-              if (this._outputType !== "nodebuffer") {
-                // an object stream containing blob/arraybuffer/uint8array/string
-                // is strange and I don't know if it would be useful.
-                // I you find this comment and have a good usecase, please open a
-                // bug report !
-                throw new Error(
-                  this._outputType + " is not supported by this method",
-                );
-              }
-
-              return new NodejsStreamOutputAdapter(
-                this,
-                {
-                  objectMode: this._outputType !== "nodebuffer",
-                },
-                updateCb,
-              );
-            },
-          };
-
-          module.exports = StreamHelper;
-        },
-        {
-          "../base64": 1,
-          "../external": 6,
-          "../nodejs/NodejsStreamOutputAdapter": 13,
-          "../support": 30,
-          "../utils": 32,
-          "./ConvertWorker": 24,
-          "./GenericWorker": 28,
-        },
-      ],
-      30: [
-        function (require, module, exports) {
-          "use strict";
-
-          exports.base64 = true;
-          exports.array = true;
-          exports.string = true;
-          exports.arraybuffer =
-            typeof ArrayBuffer !== "undefined" &&
-            typeof Uint8Array !== "undefined";
-          exports.nodebuffer = typeof Buffer !== "undefined";
-          // contains true if JSZip can read/generate Uint8Array, false otherwise.
-          exports.uint8array = typeof Uint8Array !== "undefined";
-
-          if (typeof ArrayBuffer === "undefined") {
-            exports.blob = false;
-          } else {
-            var buffer = new ArrayBuffer(0);
-            try {
-              exports.blob =
-                new Blob([buffer], {
-                  type: "application/zip",
-                }).size === 0;
-            } catch (e) {
-              try {
-                var Builder =
-                  self.BlobBuilder ||
-                  self.WebKitBlobBuilder ||
-                  self.MozBlobBuilder ||
-                  self.MSBlobBuilder;
-                var builder = new Builder();
-                builder.append(buffer);
-                exports.blob = builder.getBlob("application/zip").size === 0;
-              } catch (e) {
-                exports.blob = false;
-              }
-            }
-          }
-
-          try {
-            exports.nodestream = !!require("readable-stream").Readable;
-          } catch (e) {
-            exports.nodestream = false;
-          }
-        },
-        { "readable-stream": 16 },
-      ],
-      31: [
-        function (require, module, exports) {
-          "use strict";
-
-          var utils = require("./utils");
-          var support = require("./support");
-          var nodejsUtils = require("./nodejsUtils");
-          var GenericWorker = require("./stream/GenericWorker");
-
-          /**
-           * The following functions come from pako, from pako/lib/utils/strings
-           * released under the MIT license, see pako https://github.com/nodeca/pako/
-           */
-
-          // Table with utf8 lengths (calculated by first byte of sequence)
-          // Note, that 5 & 6-byte values and some 4-byte values can not be represented in JS,
-          // because max possible codepoint is 0x10ffff
-          var _utf8len = new Array(256);
-          for (var i = 0; i < 256; i++) {
-            _utf8len[i] =
-              i >= 252
-                ? 6
-                : i >= 248
-                ? 5
-                : i >= 240
-                ? 4
-                : i >= 224
-                ? 3
-                : i >= 192
-                ? 2
-                : 1;
-          }
-          _utf8len[254] = _utf8len[254] = 1; // Invalid sequence start
-
-          // convert string to array (typed, when possible)
-          var string2buf = function (str) {
-            var buf,
-              c,
-              c2,
-              m_pos,
-              i,
-              str_len = str.length,
-              buf_len = 0;
-
-            // count binary size
-            for (m_pos = 0; m_pos < str_len; m_pos++) {
-              c = str.charCodeAt(m_pos);
-              if ((c & 0xfc00) === 0xd800 && m_pos + 1 < str_len) {
-                c2 = str.charCodeAt(m_pos + 1);
-                if ((c2 & 0xfc00) === 0xdc00) {
-                  c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);
-                  m_pos++;
-                }
-              }
-              buf_len += c < 0x80 ? 1 : c < 0x800 ? 2 : c < 0x10000 ? 3 : 4;
-            }
-
-            // allocate buffer
-            if (support.uint8array) {
-              buf = new Uint8Array(buf_len);
-            } else {
-              buf = new Array(buf_len);
-            }
-
-            // convert
-            for (i = 0, m_pos = 0; i < buf_len; m_pos++) {
-              c = str.charCodeAt(m_pos);
-              if ((c & 0xfc00) === 0xd800 && m_pos + 1 < str_len) {
-                c2 = str.charCodeAt(m_pos + 1);
-                if ((c2 & 0xfc00) === 0xdc00) {
-                  c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);
-                  m_pos++;
-                }
-              }
-              if (c < 0x80) {
-                /* one byte */
-                buf[i++] = c;
-              } else if (c < 0x800) {
-                /* two bytes */
-                buf[i++] = 0xc0 | (c >>> 6);
-                buf[i++] = 0x80 | (c & 0x3f);
-              } else if (c < 0x10000) {
-                /* three bytes */
-                buf[i++] = 0xe0 | (c >>> 12);
-                buf[i++] = 0x80 | ((c >>> 6) & 0x3f);
-                buf[i++] = 0x80 | (c & 0x3f);
-              } else {
-                /* four bytes */
-                buf[i++] = 0xf0 | (c >>> 18);
-                buf[i++] = 0x80 | ((c >>> 12) & 0x3f);
-                buf[i++] = 0x80 | ((c >>> 6) & 0x3f);
-                buf[i++] = 0x80 | (c & 0x3f);
-              }
-            }
-
-            return buf;
-          };
-
-          // Calculate max possible position in utf8 buffer,
-          // that will not break sequence. If that's not possible
-          // - (very small limits) return max size as is.
-          //
-          // buf[] - utf8 bytes array
-          // max   - length limit (mandatory);
-          var utf8border = function (buf, max) {
-            var pos;
-
-            max = max || buf.length;
-            if (max > buf.length) {
-              max = buf.length;
-            }
-
-            // go back from last position, until start of sequence found
-            pos = max - 1;
-            while (pos >= 0 && (buf[pos] & 0xc0) === 0x80) {
-              pos--;
-            }
-
-            // Fuckup - very small and broken sequence,
-            // return max, because we should return something anyway.
-            if (pos < 0) {
-              return max;
-            }
-
-            // If we came to start of buffer - that means vuffer is too small,
-            // return max too.
-            if (pos === 0) {
-              return max;
-            }
-
-            return pos + _utf8len[buf[pos]] > max ? pos : max;
-          };
-
-          // convert array to string
-          var buf2string = function (buf) {
-            var i, out, c, c_len;
-            var len = buf.length;
-
-            // Reserve max possible length (2 words per char)
-            // NB: by unknown reasons, Array is significantly faster for
-            //     String.fromCharCode.apply than Uint16Array.
-            var utf16buf = new Array(len * 2);
-
-            for (out = 0, i = 0; i < len; ) {
-              c = buf[i++];
-              // quick process ascii
-              if (c < 0x80) {
-                utf16buf[out++] = c;
-                continue;
-              }
-
-              c_len = _utf8len[c];
-              // skip 5 & 6 byte codes
-              if (c_len > 4) {
-                utf16buf[out++] = 0xfffd;
-                i += c_len - 1;
-                continue;
-              }
-
-              // apply mask on first byte
-              c &= c_len === 2 ? 0x1f : c_len === 3 ? 0x0f : 0x07;
-              // join the rest
-              while (c_len > 1 && i < len) {
-                c = (c << 6) | (buf[i++] & 0x3f);
-                c_len--;
-              }
-
-              // terminated by end of string?
-              if (c_len > 1) {
-                utf16buf[out++] = 0xfffd;
-                continue;
-              }
-
-              if (c < 0x10000) {
-                utf16buf[out++] = c;
-              } else {
-                c -= 0x10000;
-                utf16buf[out++] = 0xd800 | ((c >> 10) & 0x3ff);
-                utf16buf[out++] = 0xdc00 | (c & 0x3ff);
-              }
-            }
-
-            // shrinkBuf(utf16buf, out)
-            if (utf16buf.length !== out) {
-              if (utf16buf.subarray) {
-                utf16buf = utf16buf.subarray(0, out);
-              } else {
-                utf16buf.length = out;
-              }
-            }
-
-            // return String.fromCharCode.apply(null, utf16buf);
-            return utils.applyFromCharCode(utf16buf);
-          };
-
-          // That's all for the pako functions.
-
-          /**
-           * Transform a javascript string into an array (typed if possible) of bytes,
-           * UTF-8 encoded.
-           * @param {String} str the string to encode
-           * @return {Array|Uint8Array|Buffer} the UTF-8 encoded string.
-           */
-          exports.utf8encode = function utf8encode(str) {
-            if (support.nodebuffer) {
-              return nodejsUtils.newBufferFrom(str, "utf-8");
-            }
-
-            return string2buf(str);
-          };
-
-          /**
-           * Transform a bytes array (or a representation) representing an UTF-8 encoded
-           * string into a javascript string.
-           * @param {Array|Uint8Array|Buffer} buf the data de decode
-           * @return {String} the decoded string.
-           */
-          exports.utf8decode = function utf8decode(buf) {
-            if (support.nodebuffer) {
-              return utils.transformTo("nodebuffer", buf).toString("utf-8");
-            }
-
-            buf = utils.transformTo(
-              support.uint8array ? "uint8array" : "array",
-              buf,
-            );
-
-            return buf2string(buf);
-          };
-
-          /**
-           * A worker to decode utf8 encoded binary chunks into string chunks.
-           * @constructor
-           */
-          function Utf8DecodeWorker() {
-            GenericWorker.call(this, "utf-8 decode");
-            // the last bytes if a chunk didn't end with a complete codepoint.
-            this.leftOver = null;
-          }
-          utils.inherits(Utf8DecodeWorker, GenericWorker);
-
-          /**
-           * @see GenericWorker.processChunk
-           */
-          Utf8DecodeWorker.prototype.processChunk = function (chunk) {
-            var data = utils.transformTo(
-              support.uint8array ? "uint8array" : "array",
-              chunk.data,
-            );
-
-            // 1st step, re-use what's left of the previous chunk
-            if (this.leftOver && this.leftOver.length) {
-              if (support.uint8array) {
-                var previousData = data;
-                data = new Uint8Array(
-                  previousData.length + this.leftOver.length,
-                );
-                data.set(this.leftOver, 0);
-                data.set(previousData, this.leftOver.length);
-              } else {
-                data = this.leftOver.concat(data);
-              }
-              this.leftOver = null;
-            }
-
-            var nextBoundary = utf8border(data);
-            var usableData = data;
-            if (nextBoundary !== data.length) {
-              if (support.uint8array) {
-                usableData = data.subarray(0, nextBoundary);
-                this.leftOver = data.subarray(nextBoundary, data.length);
-              } else {
-                usableData = data.slice(0, nextBoundary);
-                this.leftOver = data.slice(nextBoundary, data.length);
-              }
-            }
-
-            this.push({
-              data: exports.utf8decode(usableData),
-              meta: chunk.meta,
-            });
-          };
-
-          /**
-           * @see GenericWorker.flush
-           */
-          Utf8DecodeWorker.prototype.flush = function () {
-            if (this.leftOver && this.leftOver.length) {
-              this.push({
-                data: exports.utf8decode(this.leftOver),
-                meta: {},
-              });
-              this.leftOver = null;
-            }
-          };
-          exports.Utf8DecodeWorker = Utf8DecodeWorker;
-
-          /**
-           * A worker to endcode string chunks into utf8 encoded binary chunks.
-           * @constructor
-           */
-          function Utf8EncodeWorker() {
-            GenericWorker.call(this, "utf-8 encode");
-          }
-          utils.inherits(Utf8EncodeWorker, GenericWorker);
-
-          /**
-           * @see GenericWorker.processChunk
-           */
-          Utf8EncodeWorker.prototype.processChunk = function (chunk) {
-            this.push({
-              data: exports.utf8encode(chunk.data),
-              meta: chunk.meta,
-            });
-          };
-          exports.Utf8EncodeWorker = Utf8EncodeWorker;
-        },
-        {
-          "./nodejsUtils": 14,
-          "./stream/GenericWorker": 28,
-          "./support": 30,
-          "./utils": 32,
-        },
-      ],
-      32: [
-        function (require, module, exports) {
-          "use strict";
-
-          var support = require("./support");
-          var base64 = require("./base64");
-          var nodejsUtils = require("./nodejsUtils");
-          var external = require("./external");
-          require("setimmediate");
-
-          /**
-           * Convert a string that pass as a "binary string": it should represent a byte
-           * array but may have > 255 char codes. Be sure to take only the first byte
-           * and returns the byte array.
-           * @param {String} str the string to transform.
-           * @return {Array|Uint8Array} the string in a binary format.
-           */
-          function string2binary(str) {
-            var result = null;
-            if (support.uint8array) {
-              result = new Uint8Array(str.length);
-            } else {
-              result = new Array(str.length);
-            }
-            return stringToArrayLike(str, result);
-          }
-
-          /**
-           * Create a new blob with the given content and the given type.
-           * @param {String|ArrayBuffer} part the content to put in the blob. DO NOT use
-           * an Uint8Array because the stock browser of android 4 won't accept it (it
-           * will be silently converted to a string, "[object Uint8Array]").
-           *
-           * Use only ONE part to build the blob to avoid a memory leak in IE11 / Edge:
-           * when a large amount of Array is used to create the Blob, the amount of
-           * memory consumed is nearly 100 times the original data amount.
-           *
-           * @param {String} type the mime type of the blob.
-           * @return {Blob} the created blob.
-           */
-          exports.newBlob = function (part, type) {
-            exports.checkSupport("blob");
-
-            try {
-              // Blob constructor
-              return new Blob([part], {
-                type: type,
-              });
-            } catch (e) {
-              try {
-                // deprecated, browser only, old way
-                var Builder =
-                  self.BlobBuilder ||
-                  self.WebKitBlobBuilder ||
-                  self.MozBlobBuilder ||
-                  self.MSBlobBuilder;
-                var builder = new Builder();
-                builder.append(part);
-                return builder.getBlob(type);
-              } catch (e) {
-                // well, fuck ?!
-                throw new Error("Bug : can't construct the Blob.");
-              }
-            }
-          };
-          /**
-           * The identity function.
-           * @param {Object} input the input.
-           * @return {Object} the same input.
-           */
-          function identity(input) {
-            return input;
-          }
-
-          /**
-           * Fill in an array with a string.
-           * @param {String} str the string to use.
-           * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to fill in (will be mutated).
-           * @return {Array|ArrayBuffer|Uint8Array|Buffer} the updated array.
-           */
-          function stringToArrayLike(str, array) {
-            for (var i = 0; i < str.length; ++i) {
-              array[i] = str.charCodeAt(i) & 0xff;
-            }
-            return array;
-          }
-
-          /**
-           * An helper for the function arrayLikeToString.
-           * This contains static information and functions that
-           * can be optimized by the browser JIT compiler.
-           */
-          var arrayToStringHelper = {
-            /**
-             * Transform an array of int into a string, chunk by chunk.
-             * See the performances notes on arrayLikeToString.
-             * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to transform.
-             * @param {String} type the type of the array.
-             * @param {Integer} chunk the chunk size.
-             * @return {String} the resulting string.
-             * @throws Error if the chunk is too big for the stack.
-             */
-            stringifyByChunk: function (array, type, chunk) {
-              var result = [],
-                k = 0,
-                len = array.length;
-              // shortcut
-              if (len <= chunk) {
-                return String.fromCharCode.apply(null, array);
-              }
-              while (k < len) {
-                if (type === "array" || type === "nodebuffer") {
-                  result.push(
-                    String.fromCharCode.apply(
-                      null,
-                      array.slice(k, Math.min(k + chunk, len)),
-                    ),
-                  );
-                } else {
-                  result.push(
-                    String.fromCharCode.apply(
-                      null,
-                      array.subarray(k, Math.min(k + chunk, len)),
-                    ),
-                  );
-                }
-                k += chunk;
-              }
-              return result.join("");
-            },
-            /**
-             * Call String.fromCharCode on every item in the array.
-             * This is the naive implementation, which generate A LOT of intermediate string.
-             * This should be used when everything else fail.
-             * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to transform.
-             * @return {String} the result.
-             */
-            stringifyByChar: function (array) {
-              var resultStr = "";
-              for (var i = 0; i < array.length; i++) {
-                resultStr += String.fromCharCode(array[i]);
-              }
-              return resultStr;
-            },
-            applyCanBeUsed: {
-              /**
-               * true if the browser accepts to use String.fromCharCode on Uint8Array
-               */
-              uint8array: (function () {
-                try {
-                  return (
-                    support.uint8array &&
-                    String.fromCharCode.apply(null, new Uint8Array(1))
-                      .length === 1
-                  );
-                } catch (e) {
-                  return false;
-                }
-              })(),
-              /**
-               * true if the browser accepts to use String.fromCharCode on nodejs Buffer.
-               */
-              nodebuffer: (function () {
-                try {
-                  return (
-                    support.nodebuffer &&
-                    String.fromCharCode.apply(null, nodejsUtils.allocBuffer(1))
-                      .length === 1
-                  );
-                } catch (e) {
-                  return false;
-                }
-              })(),
-            },
-          };
-
-          /**
-           * Transform an array-like object to a string.
-           * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to transform.
-           * @return {String} the result.
-           */
-          function arrayLikeToString(array) {
-            // Performances notes :
-            // --------------------
-            // String.fromCharCode.apply(null, array) is the fastest, see
-            // see http://jsperf.com/converting-a-uint8array-to-a-string/2
-            // but the stack is limited (and we can get huge arrays !).
-            //
-            // result += String.fromCharCode(array[i]); generate too many strings !
-            //
-            // This code is inspired by http://jsperf.com/arraybuffer-to-string-apply-performance/2
-            // TODO : we now have workers that split the work. Do we still need that ?
-            var chunk = 65536,
-              type = exports.getTypeOf(array),
-              canUseApply = true;
-            if (type === "uint8array") {
-              canUseApply = arrayToStringHelper.applyCanBeUsed.uint8array;
-            } else if (type === "nodebuffer") {
-              canUseApply = arrayToStringHelper.applyCanBeUsed.nodebuffer;
-            }
-
-            if (canUseApply) {
-              while (chunk > 1) {
-                try {
-                  return arrayToStringHelper.stringifyByChunk(
-                    array,
-                    type,
-                    chunk,
-                  );
-                } catch (e) {
-                  chunk = Math.floor(chunk / 2);
-                }
-              }
-            }
-
-            // no apply or chunk error : slow and painful algorithm
-            // default browser on android 4.*
-            return arrayToStringHelper.stringifyByChar(array);
-          }
-
-          exports.applyFromCharCode = arrayLikeToString;
-
-          /**
-           * Copy the data from an array-like to an other array-like.
-           * @param {Array|ArrayBuffer|Uint8Array|Buffer} arrayFrom the origin array.
-           * @param {Array|ArrayBuffer|Uint8Array|Buffer} arrayTo the destination array which will be mutated.
-           * @return {Array|ArrayBuffer|Uint8Array|Buffer} the updated destination array.
-           */
-          function arrayLikeToArrayLike(arrayFrom, arrayTo) {
-            for (var i = 0; i < arrayFrom.length; i++) {
-              arrayTo[i] = arrayFrom[i];
-            }
-            return arrayTo;
-          }
-
-          // a matrix containing functions to transform everything into everything.
-          var transform = {};
-
-          // string to ?
-          transform["string"] = {
-            string: identity,
-            array: function (input) {
-              return stringToArrayLike(input, new Array(input.length));
-            },
-            arraybuffer: function (input) {
-              return transform["string"]["uint8array"](input).buffer;
-            },
-            uint8array: function (input) {
-              return stringToArrayLike(input, new Uint8Array(input.length));
-            },
-            nodebuffer: function (input) {
-              return stringToArrayLike(
-                input,
-                nodejsUtils.allocBuffer(input.length),
-              );
-            },
-          };
-
-          // array to ?
-          transform["array"] = {
-            string: arrayLikeToString,
-            array: identity,
-            arraybuffer: function (input) {
-              return new Uint8Array(input).buffer;
-            },
-            uint8array: function (input) {
-              return new Uint8Array(input);
-            },
-            nodebuffer: function (input) {
-              return nodejsUtils.newBufferFrom(input);
-            },
-          };
-
-          // arraybuffer to ?
-          transform["arraybuffer"] = {
-            string: function (input) {
-              return arrayLikeToString(new Uint8Array(input));
-            },
-            array: function (input) {
-              return arrayLikeToArrayLike(
-                new Uint8Array(input),
-                new Array(input.byteLength),
-              );
-            },
-            arraybuffer: identity,
-            uint8array: function (input) {
-              return new Uint8Array(input);
-            },
-            nodebuffer: function (input) {
-              return nodejsUtils.newBufferFrom(new Uint8Array(input));
-            },
-          };
-
-          // uint8array to ?
-          transform["uint8array"] = {
-            string: arrayLikeToString,
-            array: function (input) {
-              return arrayLikeToArrayLike(input, new Array(input.length));
-            },
-            arraybuffer: function (input) {
-              return input.buffer;
-            },
-            uint8array: identity,
-            nodebuffer: function (input) {
-              return nodejsUtils.newBufferFrom(input);
-            },
-          };
-
-          // nodebuffer to ?
-          transform["nodebuffer"] = {
-            string: arrayLikeToString,
-            array: function (input) {
-              return arrayLikeToArrayLike(input, new Array(input.length));
-            },
-            arraybuffer: function (input) {
-              return transform["nodebuffer"]["uint8array"](input).buffer;
-            },
-            uint8array: function (input) {
-              return arrayLikeToArrayLike(input, new Uint8Array(input.length));
-            },
-            nodebuffer: identity,
-          };
-
-          /**
-           * Transform an input into any type.
-           * The supported output type are : string, array, uint8array, arraybuffer, nodebuffer.
-           * If no output type is specified, the unmodified input will be returned.
-           * @param {String} outputType the output type.
-           * @param {String|Array|ArrayBuffer|Uint8Array|Buffer} input the input to convert.
-           * @throws {Error} an Error if the browser doesn't support the requested output type.
-           */
-          exports.transformTo = function (outputType, input) {
-            if (!input) {
-              // undefined, null, etc
-              // an empty string won't harm.
-              input = "";
-            }
-            if (!outputType) {
-              return input;
-            }
-            exports.checkSupport(outputType);
-            var inputType = exports.getTypeOf(input);
-            var result = transform[inputType][outputType](input);
-            return result;
-          };
-
-          /**
-           * Resolve all relative path components, "." and "..", in a path. If these relative components
-           * traverse above the root then the resulting path will only contain the final path component.
-           *
-           * All empty components, e.g. "//", are removed.
-           * @param {string} path A path with / or \ separators
-           * @returns {string} The path with all relative path components resolved.
-           */
-          exports.resolve = function (path) {
-            var parts = path.split("/");
-            var result = [];
-            for (var index = 0; index < parts.length; index++) {
-              var part = parts[index];
-              // Allow the first and last component to be empty for trailing slashes.
-              if (
-                part === "." ||
-                (part === "" && index !== 0 && index !== parts.length - 1)
-              ) {
-                continue;
-              } else if (part === "..") {
-                result.pop();
-              } else {
-                result.push(part);
-              }
-            }
-            return result.join("/");
-          };
-
-          /**
-           * Return the type of the input.
-           * The type will be in a format valid for JSZip.utils.transformTo : string, array, uint8array, arraybuffer.
-           * @param {Object} input the input to identify.
-           * @return {String} the (lowercase) type of the input.
-           */
-          exports.getTypeOf = function (input) {
-            if (typeof input === "string") {
-              return "string";
-            }
-            if (Object.prototype.toString.call(input) === "[object Array]") {
-              return "array";
-            }
-            if (support.nodebuffer && nodejsUtils.isBuffer(input)) {
-              return "nodebuffer";
-            }
-            if (support.uint8array && input instanceof Uint8Array) {
-              return "uint8array";
-            }
-            if (support.arraybuffer && input instanceof ArrayBuffer) {
-              return "arraybuffer";
-            }
-          };
-
-          /**
-           * Throw an exception if the type is not supported.
-           * @param {String} type the type to check.
-           * @throws {Error} an Error if the browser doesn't support the requested type.
-           */
-          exports.checkSupport = function (type) {
-            var supported = support[type.toLowerCase()];
-            if (!supported) {
-              throw new Error(type + " is not supported by this platform");
-            }
-          };
-
-          exports.MAX_VALUE_16BITS = 65535;
-          exports.MAX_VALUE_32BITS = -1; // well, "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF" is parsed as -1
-
-          /**
-           * Prettify a string read as binary.
-           * @param {string} str the string to prettify.
-           * @return {string} a pretty string.
-           */
-          exports.pretty = function (str) {
-            var res = "",
-              code,
-              i;
-            for (i = 0; i < (str || "").length; i++) {
-              code = str.charCodeAt(i);
-              res +=
-                "\\x" +
-                (code < 16 ? "0" : "") +
-                code.toString(16).toUpperCase();
-            }
-            return res;
-          };
-
-          /**
-           * Defer the call of a function.
-           * @param {Function} callback the function to call asynchronously.
-           * @param {Array} args the arguments to give to the callback.
-           */
-          exports.delay = function (callback, args, self) {
-            setImmediate(function () {
-              callback.apply(self || null, args || []);
-            });
-          };
-
-          /**
-           * Extends a prototype with an other, without calling a constructor with
-           * side effects. Inspired by nodejs' `utils.inherits`
-           * @param {Function} ctor the constructor to augment
-           * @param {Function} superCtor the parent constructor to use
-           */
-          exports.inherits = function (ctor, superCtor) {
-            var Obj = function () {};
-            Obj.prototype = superCtor.prototype;
-            ctor.prototype = new Obj();
-          };
-
-          /**
-           * Merge the objects passed as parameters into a new one.
-           * @private
-           * @param {...Object} var_args All objects to merge.
-           * @return {Object} a new object with the data of the others.
-           */
-          exports.extend = function () {
-            var result = {},
-              i,
-              attr;
-            for (i = 0; i < arguments.length; i++) {
-              // arguments is not enumerable in some browsers
-              for (attr in arguments[i]) {
-                if (
-                  Object.prototype.hasOwnProperty.call(arguments[i], attr) &&
-                  typeof result[attr] === "undefined"
-                ) {
-                  result[attr] = arguments[i][attr];
-                }
-              }
-            }
-            return result;
-          };
-
-          /**
-           * Transform arbitrary content into a Promise.
-           * @param {String} name a name for the content being processed.
-           * @param {Object} inputData the content to process.
-           * @param {Boolean} isBinary true if the content is not an unicode string
-           * @param {Boolean} isOptimizedBinaryString true if the string content only has one byte per character.
-           * @param {Boolean} isBase64 true if the string content is encoded with base64.
-           * @return {Promise} a promise in a format usable by JSZip.
-           */
-          exports.prepareContent = function (
-            name,
-            inputData,
-            isBinary,
-            isOptimizedBinaryString,
-            isBase64,
-          ) {
-            // if inputData is already a promise, this flatten it.
-            var promise = external.Promise.resolve(inputData).then(
-              function (data) {
-                var isBlob =
-                  support.blob &&
-                  (data instanceof Blob ||
-                    ["[object File]", "[object Blob]"].indexOf(
-                      Object.prototype.toString.call(data),
-                    ) !== -1);
-
-                if (isBlob && typeof FileReader !== "undefined") {
-                  return new external.Promise(function (resolve, reject) {
-                    var reader = new FileReader();
-
-                    reader.onload = function (e) {
-                      resolve(e.target.result);
-                    };
-                    reader.onerror = function (e) {
-                      reject(e.target.error);
-                    };
-                    reader.readAsArrayBuffer(data);
-                  });
-                } else {
-                  return data;
-                }
-              },
-            );
-
-            return promise.then(function (data) {
-              var dataType = exports.getTypeOf(data);
-
-              if (!dataType) {
-                return external.Promise.reject(
-                  new Error(
-                    "Can't read the data of '" +
-                      name +
-                      "'. Is it " +
-                      "in a supported JavaScript type (String, Blob, ArrayBuffer, etc) ?",
-                  ),
-                );
-              }
-              // special case : it's way easier to work with Uint8Array than with ArrayBuffer
-              if (dataType === "arraybuffer") {
-                data = exports.transformTo("uint8array", data);
-              } else if (dataType === "string") {
-                if (isBase64) {
-                  data = base64.decode(data);
-                } else if (isBinary) {
-                  // optimizedBinaryString === true means that the file has already been filtered with a 0xFF mask
-                  if (isOptimizedBinaryString !== true) {
-                    // this is a string, not in a base64 format.
-                    // Be sure that this is a correct "binary string"
-                    data = string2binary(data);
-                  }
-                }
-              }
-              return data;
-            });
-          };
-        },
-        {
-          "./base64": 1,
-          "./external": 6,
-          "./nodejsUtils": 14,
-          "./support": 30,
-          setimmediate: 54,
-        },
-      ],
-      33: [
-        function (require, module, exports) {
-          "use strict";
-          var readerFor = require("./reader/readerFor");
-          var utils = require("./utils");
-          var sig = require("./signature");
-          var ZipEntry = require("./zipEntry");
-          var support = require("./support");
-          //  class ZipEntries {{{
-          /**
-           * All the entries in the zip file.
-           * @constructor
-           * @param {Object} loadOptions Options for loading the stream.
-           */
-          function ZipEntries(loadOptions) {
-            this.files = [];
-            this.loadOptions = loadOptions;
-          }
-          ZipEntries.prototype = {
-            /**
-             * Check that the reader is on the specified signature.
-             * @param {string} expectedSignature the expected signature.
-             * @throws {Error} if it is an other signature.
-             */
-            checkSignature: function (expectedSignature) {
-              if (!this.reader.readAndCheckSignature(expectedSignature)) {
-                this.reader.index -= 4;
-                var signature = this.reader.readString(4);
-                throw new Error(
-                  "Corrupted zip or bug: unexpected signature " +
-                    "(" +
-                    utils.pretty(signature) +
-                    ", expected " +
-                    utils.pretty(expectedSignature) +
-                    ")",
-                );
-              }
-            },
-            /**
-             * Check if the given signature is at the given index.
-             * @param {number} askedIndex the index to check.
-             * @param {string} expectedSignature the signature to expect.
-             * @return {boolean} true if the signature is here, false otherwise.
-             */
-            isSignature: function (askedIndex, expectedSignature) {
-              var currentIndex = this.reader.index;
-              this.reader.setIndex(askedIndex);
-              var signature = this.reader.readString(4);
-              var result = signature === expectedSignature;
-              this.reader.setIndex(currentIndex);
-              return result;
-            },
-            /**
-             * Read the end of the central directory.
-             */
-            readBlockEndOfCentral: function () {
-              this.diskNumber = this.reader.readInt(2);
-              this.diskWithCentralDirStart = this.reader.readInt(2);
-              this.centralDirRecordsOnThisDisk = this.reader.readInt(2);
-              this.centralDirRecords = this.reader.readInt(2);
-              this.centralDirSize = this.reader.readInt(4);
-              this.centralDirOffset = this.reader.readInt(4);
-
-              this.zipCommentLength = this.reader.readInt(2);
-              // warning : the encoding depends of the system locale
-              // On a linux machine with LANG=en_US.utf8, this field is utf8 encoded.
-              // On a windows machine, this field is encoded with the localized windows code page.
-              var zipComment = this.reader.readData(this.zipCommentLength);
-              var decodeParamType = support.uint8array ? "uint8array" : "array";
-              // To get consistent behavior with the generation part, we will assume that
-              // this is utf8 encoded unless specified otherwise.
-              var decodeContent = utils.transformTo(
-                decodeParamType,
-                zipComment,
-              );
-              this.zipComment = this.loadOptions.decodeFileName(decodeContent);
-            },
-            /**
-             * Read the end of the Zip 64 central directory.
-             * Not merged with the method readEndOfCentral :
-             * The end of central can coexist with its Zip64 brother,
-             * I don't want to read the wrong number of bytes !
-             */
-            readBlockZip64EndOfCentral: function () {
-              this.zip64EndOfCentralSize = this.reader.readInt(8);
-              this.reader.skip(4);
-              // this.versionMadeBy = this.reader.readString(2);
-              // this.versionNeeded = this.reader.readInt(2);
-              this.diskNumber = this.reader.readInt(4);
-              this.diskWithCentralDirStart = this.reader.readInt(4);
-              this.centralDirRecordsOnThisDisk = this.reader.readInt(8);
-              this.centralDirRecords = this.reader.readInt(8);
-              this.centralDirSize = this.reader.readInt(8);
-              this.centralDirOffset = this.reader.readInt(8);
-
-              this.zip64ExtensibleData = {};
-              var extraDataSize = this.zip64EndOfCentralSize - 44,
-                index = 0,
-                extraFieldId,
-                extraFieldLength,
-                extraFieldValue;
-              while (index < extraDataSize) {
-                extraFieldId = this.reader.readInt(2);
-                extraFieldLength = this.reader.readInt(4);
-                extraFieldValue = this.reader.readData(extraFieldLength);
-                this.zip64ExtensibleData[extraFieldId] = {
-                  id: extraFieldId,
-                  length: extraFieldLength,
-                  value: extraFieldValue,
-                };
-              }
-            },
-            /**
-             * Read the end of the Zip 64 central directory locator.
-             */
-            readBlockZip64EndOfCentralLocator: function () {
-              this.diskWithZip64CentralDirStart = this.reader.readInt(4);
-              this.relativeOffsetEndOfZip64CentralDir = this.reader.readInt(8);
-              this.disksCount = this.reader.readInt(4);
-              if (this.disksCount > 1) {
-                throw new Error("Multi-volumes zip are not supported");
-              }
-            },
-            /**
-             * Read the local files, based on the offset read in the central part.
-             */
-            readLocalFiles: function () {
-              var i, file;
-              for (i = 0; i < this.files.length; i++) {
-                file = this.files[i];
-                this.reader.setIndex(file.localHeaderOffset);
-                this.checkSignature(sig.LOCAL_FILE_HEADER);
-                file.readLocalPart(this.reader);
-                file.handleUTF8();
-                file.processAttributes();
-              }
-            },
-            /**
-             * Read the central directory.
-             */
-            readCentralDir: function () {
-              var file;
-
-              this.reader.setIndex(this.centralDirOffset);
-              while (
-                this.reader.readAndCheckSignature(sig.CENTRAL_FILE_HEADER)
-              ) {
-                file = new ZipEntry(
-                  {
-                    zip64: this.zip64,
-                  },
-                  this.loadOptions,
-                );
-                file.readCentralPart(this.reader);
-                this.files.push(file);
-              }
-
-              if (this.centralDirRecords !== this.files.length) {
-                if (this.centralDirRecords !== 0 && this.files.length === 0) {
-                  // We expected some records but couldn't find ANY.
-                  // This is really suspicious, as if something went wrong.
-                  throw new Error(
-                    "Corrupted zip or bug: expected " +
-                      this.centralDirRecords +
-                      " records in central dir, got " +
-                      this.files.length,
-                  );
-                } else {
-                  // We found some records but not all.
-                  // Something is wrong but we got something for the user: no error here.
-                  // console.warn("expected", this.centralDirRecords, "records in central dir, got", this.files.length);
-                }
-              }
-            },
-            /**
-             * Read the end of central directory.
-             */
-            readEndOfCentral: function () {
-              var offset = this.reader.lastIndexOfSignature(
-                sig.CENTRAL_DIRECTORY_END,
-              );
-              if (offset < 0) {
-                // Check if the content is a truncated zip or complete garbage.
-                // A "LOCAL_FILE_HEADER" is not required at the beginning (auto
-                // extractible zip for example) but it can give a good hint.
-                // If an ajax request was used without responseType, we will also
-                // get unreadable data.
-                var isGarbage = !this.isSignature(0, sig.LOCAL_FILE_HEADER);
-
-                if (isGarbage) {
-                  throw new Error(
-                    "Can't find end of central directory : is this a zip file ? " +
-                      "If it is, see https://stuk.github.io/jszip/documentation/howto/read_zip.html",
-                  );
-                } else {
-                  throw new Error(
-                    "Corrupted zip: can't find end of central directory",
-                  );
-                }
-              }
-              this.reader.setIndex(offset);
-              var endOfCentralDirOffset = offset;
-              this.checkSignature(sig.CENTRAL_DIRECTORY_END);
-              this.readBlockEndOfCentral();
-
-              /* extract from the zip spec :
-            4)  If one of the fields in the end of central directory
-                record is too small to hold required data, the field
-                should be set to -1 (0xFFFF or 0xFFFFFFFF) and the
-                ZIP64 format record should be created.
-            5)  The end of central directory record and the
-                Zip64 end of central directory locator record must
-                reside on the same disk when splitting or spanning
-                an archive.
-         */
-              if (
-                this.diskNumber === utils.MAX_VALUE_16BITS ||
-                this.diskWithCentralDirStart === utils.MAX_VALUE_16BITS ||
-                this.centralDirRecordsOnThisDisk === utils.MAX_VALUE_16BITS ||
-                this.centralDirRecords === utils.MAX_VALUE_16BITS ||
-                this.centralDirSize === utils.MAX_VALUE_32BITS ||
-                this.centralDirOffset === utils.MAX_VALUE_32BITS
-              ) {
-                this.zip64 = true;
-
-                /*
-            Warning : the zip64 extension is supported, but ONLY if the 64bits integer read from
-            the zip file can fit into a 32bits integer. This cannot be solved : JavaScript represents
-            all numbers as 64-bit double precision IEEE 754 floating point numbers.
-            So, we have 53bits for integers and bitwise operations treat everything as 32bits.
-            see https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/Bitwise_Operators
-            and http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf section 8.5
-            */
-
-                // should look for a zip64 EOCD locator
-                offset = this.reader.lastIndexOfSignature(
-                  sig.ZIP64_CENTRAL_DIRECTORY_LOCATOR,
-                );
-                if (offset < 0) {
-                  throw new Error(
-                    "Corrupted zip: can't find the ZIP64 end of central directory locator",
-                  );
-                }
-                this.reader.setIndex(offset);
-                this.checkSignature(sig.ZIP64_CENTRAL_DIRECTORY_LOCATOR);
-                this.readBlockZip64EndOfCentralLocator();
-
-                // now the zip64 EOCD record
-                if (
-                  !this.isSignature(
-                    this.relativeOffsetEndOfZip64CentralDir,
-                    sig.ZIP64_CENTRAL_DIRECTORY_END,
-                  )
-                ) {
-                  // console.warn("ZIP64 end of central directory not where expected.");
-                  this.relativeOffsetEndOfZip64CentralDir =
-                    this.reader.lastIndexOfSignature(
-                      sig.ZIP64_CENTRAL_DIRECTORY_END,
-                    );
-                  if (this.relativeOffsetEndOfZip64CentralDir < 0) {
-                    throw new Error(
-                      "Corrupted zip: can't find the ZIP64 end of central directory",
-                    );
-                  }
-                }
-                this.reader.setIndex(this.relativeOffsetEndOfZip64CentralDir);
-                this.checkSignature(sig.ZIP64_CENTRAL_DIRECTORY_END);
-                this.readBlockZip64EndOfCentral();
-              }
-
-              var expectedEndOfCentralDirOffset =
-                this.centralDirOffset + this.centralDirSize;
-              if (this.zip64) {
-                expectedEndOfCentralDirOffset += 20; // end of central dir 64 locator
-                expectedEndOfCentralDirOffset +=
-                  12 /* should not include the leading 12 bytes */ +
-                  this.zip64EndOfCentralSize;
-              }
-
-              var extraBytes =
-                endOfCentralDirOffset - expectedEndOfCentralDirOffset;
-
-              if (extraBytes > 0) {
-                // console.warn(extraBytes, "extra bytes at beginning or within zipfile");
-                if (
-                  this.isSignature(
-                    endOfCentralDirOffset,
-                    sig.CENTRAL_FILE_HEADER,
-                  )
-                ) {
-                  // The offsets seem wrong, but we have something at the specified offset.
-                  // So… we keep it.
-                } else {
-                  // the offset is wrong, update the "zero" of the reader
-                  // this happens if data has been prepended (crx files for example)
-                  this.reader.zero = extraBytes;
-                }
-              } else if (extraBytes < 0) {
-                throw new Error(
-                  "Corrupted zip: missing " + Math.abs(extraBytes) + " bytes.",
-                );
-              }
-            },
-            prepareReader: function (data) {
-              this.reader = readerFor(data);
-            },
-            /**
-             * Read a zip file and create ZipEntries.
-             * @param {String|ArrayBuffer|Uint8Array|Buffer} data the binary string representing a zip file.
-             */
-            load: function (data) {
-              this.prepareReader(data);
-              this.readEndOfCentral();
-              this.readCentralDir();
-              this.readLocalFiles();
-            },
-          };
-          // }}} end of ZipEntries
-          module.exports = ZipEntries;
-        },
-        {
-          "./reader/readerFor": 22,
-          "./signature": 23,
-          "./support": 30,
-          "./utils": 32,
-          "./zipEntry": 34,
-        },
-      ],
-      34: [
-        function (require, module, exports) {
-          "use strict";
-          var readerFor = require("./reader/readerFor");
-          var utils = require("./utils");
-          var CompressedObject = require("./compressedObject");
-          var crc32fn = require("./crc32");
-          var utf8 = require("./utf8");
-          var compressions = require("./compressions");
-          var support = require("./support");
-
-          var MADE_BY_DOS = 0x00;
-          var MADE_BY_UNIX = 0x03;
-
-          /**
-           * Find a compression registered in JSZip.
-           * @param {string} compressionMethod the method magic to find.
-           * @return {Object|null} the JSZip compression object, null if none found.
-           */
-          var findCompression = function (compressionMethod) {
-            for (var method in compressions) {
-              if (!Object.prototype.hasOwnProperty.call(compressions, method)) {
-                continue;
-              }
-              if (compressions[method].magic === compressionMethod) {
-                return compressions[method];
-              }
-            }
-            return null;
-          };
-
-          // class ZipEntry {{{
-          /**
-           * An entry in the zip file.
-           * @constructor
-           * @param {Object} options Options of the current file.
-           * @param {Object} loadOptions Options for loading the stream.
-           */
-          function ZipEntry(options, loadOptions) {
-            this.options = options;
-            this.loadOptions = loadOptions;
-          }
-          ZipEntry.prototype = {
-            /**
-             * say if the file is encrypted.
-             * @return {boolean} true if the file is encrypted, false otherwise.
-             */
-            isEncrypted: function () {
-              // bit 1 is set
-              return (this.bitFlag & 0x0001) === 0x0001;
-            },
-            /**
-             * say if the file has utf-8 filename/comment.
-             * @return {boolean} true if the filename/comment is in utf-8, false otherwise.
-             */
-            useUTF8: function () {
-              // bit 11 is set
-              return (this.bitFlag & 0x0800) === 0x0800;
-            },
-            /**
-             * Read the local part of a zip file and add the info in this object.
-             * @param {DataReader} reader the reader to use.
-             */
-            readLocalPart: function (reader) {
-              var compression, localExtraFieldsLength;
-
-              // we already know everything from the central dir !
-              // If the central dir data are false, we are doomed.
-              // On the bright side, the local part is scary  : zip64, data descriptors, both, etc.
-              // The less data we get here, the more reliable this should be.
-              // Let's skip the whole header and dash to the data !
-              reader.skip(22);
-              // in some zip created on windows, the filename stored in the central dir contains \ instead of /.
-              // Strangely, the filename here is OK.
-              // I would love to treat these zip files as corrupted (see http://www.info-zip.org/FAQ.html#backslashes
-              // or APPNOTE#4.4.17.1, "All slashes MUST be forward slashes '/'") but there are a lot of bad zip generators...
-              // Search "unzip mismatching "local" filename continuing with "central" filename version" on
-              // the internet.
-              //
-              // I think I see the logic here : the central directory is used to display
-              // content and the local directory is used to extract the files. Mixing / and \
-              // may be used to display \ to windows users and use / when extracting the files.
-              // Unfortunately, this lead also to some issues : http://seclists.org/fulldisclosure/2009/Sep/394
-              this.fileNameLength = reader.readInt(2);
-              localExtraFieldsLength = reader.readInt(2); // can't be sure this will be the same as the central dir
-              // the fileName is stored as binary data, the handleUTF8 method will take care of the encoding.
-              this.fileName = reader.readData(this.fileNameLength);
-              reader.skip(localExtraFieldsLength);
-
-              if (this.compressedSize === -1 || this.uncompressedSize === -1) {
-                throw new Error(
-                  "Bug or corrupted zip : didn't get enough information from the central directory " +
-                    "(compressedSize === -1 || uncompressedSize === -1)",
-                );
-              }
-
-              compression = findCompression(this.compressionMethod);
-              if (compression === null) {
-                // no compression found
-                throw new Error(
-                  "Corrupted zip : compression " +
-                    utils.pretty(this.compressionMethod) +
-                    " unknown (inner file : " +
-                    utils.transformTo("string", this.fileName) +
-                    ")",
-                );
-              }
-              this.decompressed = new CompressedObject(
-                this.compressedSize,
-                this.uncompressedSize,
-                this.crc32,
-                compression,
-                reader.readData(this.compressedSize),
-              );
-            },
-
-            /**
-             * Read the central part of a zip file and add the info in this object.
-             * @param {DataReader} reader the reader to use.
-             */
-            readCentralPart: function (reader) {
-              this.versionMadeBy = reader.readInt(2);
-              reader.skip(2);
-              // this.versionNeeded = reader.readInt(2);
-              this.bitFlag = reader.readInt(2);
-              this.compressionMethod = reader.readString(2);
-              this.date = reader.readDate();
-              this.crc32 = reader.readInt(4);
-              this.compressedSize = reader.readInt(4);
-              this.uncompressedSize = reader.readInt(4);
-              var fileNameLength = reader.readInt(2);
-              this.extraFieldsLength = reader.readInt(2);
-              this.fileCommentLength = reader.readInt(2);
-              this.diskNumberStart = reader.readInt(2);
-              this.internalFileAttributes = reader.readInt(2);
-              this.externalFileAttributes = reader.readInt(4);
-              this.localHeaderOffset = reader.readInt(4);
-
-              if (this.isEncrypted()) {
-                throw new Error("Encrypted zip are not supported");
-              }
-
-              // will be read in the local part, see the comments there
-              reader.skip(fileNameLength);
-              this.readExtraFields(reader);
-              this.parseZIP64ExtraField(reader);
-              this.fileComment = reader.readData(this.fileCommentLength);
-            },
-
-            /**
-             * Parse the external file attributes and get the unix/dos permissions.
-             */
-            processAttributes: function () {
-              this.unixPermissions = null;
-              this.dosPermissions = null;
-              var madeBy = this.versionMadeBy >> 8;
-
-              // Check if we have the DOS directory flag set.
-              // We look for it in the DOS and UNIX permissions
-              // but some unknown platform could set it as a compatibility flag.
-              this.dir = this.externalFileAttributes & 0x0010 ? true : false;
-
-              if (madeBy === MADE_BY_DOS) {
-                // first 6 bits (0 to 5)
-                this.dosPermissions = this.externalFileAttributes & 0x3f;
-              }
-
-              if (madeBy === MADE_BY_UNIX) {
-                this.unixPermissions =
-                  (this.externalFileAttributes >> 16) & 0xffff;
-                // the octal permissions are in (this.unixPermissions & 0x01FF).toString(8);
-              }
-
-              // fail safe : if the name ends with a / it probably means a folder
-              if (!this.dir && this.fileNameStr.slice(-1) === "/") {
-                this.dir = true;
-              }
-            },
-
-            /**
-             * Parse the ZIP64 extra field and merge the info in the current ZipEntry.
-             * @param {DataReader} reader the reader to use.
-             */
-            parseZIP64ExtraField: function () {
-              if (!this.extraFields[0x0001]) {
-                return;
-              }
-
-              // should be something, preparing the extra reader
-              var extraReader = readerFor(this.extraFields[0x0001].value);
-
-              // I really hope that these 64bits integer can fit in 32 bits integer, because js
-              // won't let us have more.
-              if (this.uncompressedSize === utils.MAX_VALUE_32BITS) {
-                this.uncompressedSize = extraReader.readInt(8);
-              }
-              if (this.compressedSize === utils.MAX_VALUE_32BITS) {
-                this.compressedSize = extraReader.readInt(8);
-              }
-              if (this.localHeaderOffset === utils.MAX_VALUE_32BITS) {
-                this.localHeaderOffset = extraReader.readInt(8);
-              }
-              if (this.diskNumberStart === utils.MAX_VALUE_32BITS) {
-                this.diskNumberStart = extraReader.readInt(4);
-              }
-            },
-            /**
-             * Read the central part of a zip file and add the info in this object.
-             * @param {DataReader} reader the reader to use.
-             */
-            readExtraFields: function (reader) {
-              var end = reader.index + this.extraFieldsLength,
-                extraFieldId,
-                extraFieldLength,
-                extraFieldValue;
-
-              if (!this.extraFields) {
-                this.extraFields = {};
-              }
-
-              while (reader.index + 4 < end) {
-                extraFieldId = reader.readInt(2);
-                extraFieldLength = reader.readInt(2);
-                extraFieldValue = reader.readData(extraFieldLength);
-
-                this.extraFields[extraFieldId] = {
-                  id: extraFieldId,
-                  length: extraFieldLength,
-                  value: extraFieldValue,
-                };
-              }
-
-              reader.setIndex(end);
-            },
-            /**
-             * Apply an UTF8 transformation if needed.
-             */
-            handleUTF8: function () {
-              var decodeParamType = support.uint8array ? "uint8array" : "array";
-              if (this.useUTF8()) {
-                this.fileNameStr = utf8.utf8decode(this.fileName);
-                this.fileCommentStr = utf8.utf8decode(this.fileComment);
-              } else {
-                var upath = this.findExtraFieldUnicodePath();
-                if (upath !== null) {
-                  this.fileNameStr = upath;
-                } else {
-                  // ASCII text or unsupported code page
-                  var fileNameByteArray = utils.transformTo(
-                    decodeParamType,
-                    this.fileName,
-                  );
-                  this.fileNameStr =
-                    this.loadOptions.decodeFileName(fileNameByteArray);
-                }
-
-                var ucomment = this.findExtraFieldUnicodeComment();
-                if (ucomment !== null) {
-                  this.fileCommentStr = ucomment;
-                } else {
-                  // ASCII text or unsupported code page
-                  var commentByteArray = utils.transformTo(
-                    decodeParamType,
-                    this.fileComment,
-                  );
-                  this.fileCommentStr =
-                    this.loadOptions.decodeFileName(commentByteArray);
-                }
-              }
-            },
-
-            /**
-             * Find the unicode path declared in the extra field, if any.
-             * @return {String} the unicode path, null otherwise.
-             */
-            findExtraFieldUnicodePath: function () {
-              var upathField = this.extraFields[0x7075];
-              if (upathField) {
-                var extraReader = readerFor(upathField.value);
-
-                // wrong version
-                if (extraReader.readInt(1) !== 1) {
-                  return null;
-                }
-
-                // the crc of the filename changed, this field is out of date.
-                if (crc32fn(this.fileName) !== extraReader.readInt(4)) {
-                  return null;
-                }
-
-                return utf8.utf8decode(
-                  extraReader.readData(upathField.length - 5),
-                );
-              }
-              return null;
-            },
-
-            /**
-             * Find the unicode comment declared in the extra field, if any.
-             * @return {String} the unicode comment, null otherwise.
-             */
-            findExtraFieldUnicodeComment: function () {
-              var ucommentField = this.extraFields[0x6375];
-              if (ucommentField) {
-                var extraReader = readerFor(ucommentField.value);
-
-                // wrong version
-                if (extraReader.readInt(1) !== 1) {
-                  return null;
-                }
-
-                // the crc of the comment changed, this field is out of date.
-                if (crc32fn(this.fileComment) !== extraReader.readInt(4)) {
-                  return null;
-                }
-
-                return utf8.utf8decode(
-                  extraReader.readData(ucommentField.length - 5),
-                );
-              }
-              return null;
-            },
-          };
-          module.exports = ZipEntry;
-        },
-        {
-          "./compressedObject": 2,
-          "./compressions": 3,
-          "./crc32": 4,
-          "./reader/readerFor": 22,
-          "./support": 30,
-          "./utf8": 31,
-          "./utils": 32,
-        },
-      ],
-      35: [
-        function (require, module, exports) {
-          "use strict";
-
-          var StreamHelper = require("./stream/StreamHelper");
-          var DataWorker = require("./stream/DataWorker");
-          var utf8 = require("./utf8");
-          var CompressedObject = require("./compressedObject");
-          var GenericWorker = require("./stream/GenericWorker");
-
-          /**
-           * A simple object representing a file in the zip file.
-           * @constructor
-           * @param {string} name the name of the file
-           * @param {String|ArrayBuffer|Uint8Array|Buffer} data the data
-           * @param {Object} options the options of the file
-           */
-          var ZipObject = function (name, data, options) {
-            this.name = name;
-            this.dir = options.dir;
-            this.date = options.date;
-            this.comment = options.comment;
-            this.unixPermissions = options.unixPermissions;
-            this.dosPermissions = options.dosPermissions;
-
-            this._data = data;
-            this._dataBinary = options.binary;
-            // keep only the compression
-            this.options = {
-              compression: options.compression,
-              compressionOptions: options.compressionOptions,
-            };
-          };
-
-          ZipObject.prototype = {
-            /**
-             * Create an internal stream for the content of this object.
-             * @param {String} type the type of each chunk.
-             * @return StreamHelper the stream.
-             */
-            internalStream: function (type) {
-              var result = null,
-                outputType = "string";
-              try {
-                if (!type) {
-                  throw new Error("No output type specified.");
-                }
-                outputType = type.toLowerCase();
-                var askUnicodeString =
-                  outputType === "string" || outputType === "text";
-                if (outputType === "binarystring" || outputType === "text") {
-                  outputType = "string";
-                }
-                result = this._decompressWorker();
-
-                var isUnicodeString = !this._dataBinary;
-
-                if (isUnicodeString && !askUnicodeString) {
-                  result = result.pipe(new utf8.Utf8EncodeWorker());
-                }
-                if (!isUnicodeString && askUnicodeString) {
-                  result = result.pipe(new utf8.Utf8DecodeWorker());
-                }
-              } catch (e) {
-                result = new GenericWorker("error");
-                result.error(e);
-              }
-
-              return new StreamHelper(result, outputType, "");
-            },
-
-            /**
-             * Prepare the content in the asked type.
-             * @param {String} type the type of the result.
-             * @param {Function} onUpdate a function to call on each internal update.
-             * @return Promise the promise of the result.
-             */
-            async: function (type, onUpdate) {
-              return this.internalStream(type).accumulate(onUpdate);
-            },
-
-            /**
-             * Prepare the content as a nodejs stream.
-             * @param {String} type the type of each chunk.
-             * @param {Function} onUpdate a function to call on each internal update.
-             * @return Stream the stream.
-             */
-            nodeStream: function (type, onUpdate) {
-              return this.internalStream(type || "nodebuffer").toNodejsStream(
-                onUpdate,
-              );
-            },
-
-            /**
-             * Return a worker for the compressed content.
-             * @private
-             * @param {Object} compression the compression object to use.
-             * @param {Object} compressionOptions the options to use when compressing.
-             * @return Worker the worker.
-             */
-            _compressWorker: function (compression, compressionOptions) {
-              if (
-                this._data instanceof CompressedObject &&
-                this._data.compression.magic === compression.magic
-              ) {
-                return this._data.getCompressedWorker();
-              } else {
-                var result = this._decompressWorker();
-                if (!this._dataBinary) {
-                  result = result.pipe(new utf8.Utf8EncodeWorker());
-                }
-                return CompressedObject.createWorkerFrom(
-                  result,
-                  compression,
-                  compressionOptions,
-                );
-              }
-            },
-            /**
-             * Return a worker for the decompressed content.
-             * @private
-             * @return Worker the worker.
-             */
-            _decompressWorker: function () {
-              if (this._data instanceof CompressedObject) {
-                return this._data.getContentWorker();
-              } else if (this._data instanceof GenericWorker) {
-                return this._data;
-              } else {
-                return new DataWorker(this._data);
-              }
-            },
-          };
-
-          var removedMethods = [
-            "asText",
-            "asBinary",
-            "asNodeBuffer",
-            "asUint8Array",
-            "asArrayBuffer",
-          ];
-          var removedFn = function () {
-            throw new Error(
-              "This method has been removed in JSZip 3.0, please check the upgrade guide.",
-            );
-          };
-
-          for (var i = 0; i < removedMethods.length; i++) {
-            ZipObject.prototype[removedMethods[i]] = removedFn;
-          }
-          module.exports = ZipObject;
-        },
-        {
-          "./compressedObject": 2,
-          "./stream/DataWorker": 27,
-          "./stream/GenericWorker": 28,
-          "./stream/StreamHelper": 29,
-          "./utf8": 31,
-        },
-      ],
-      36: [
-        function (require, module, exports) {
-          (function (global) {
-            "use strict";
-            var Mutation =
-              global.MutationObserver || global.WebKitMutationObserver;
-
-            var scheduleDrain;
-
-            {
-              if (Mutation) {
-                var called = 0;
-                var observer = new Mutation(nextTick);
-                var element = global.document.createTextNode("");
-                observer.observe(element, {
-                  characterData: true,
-                });
-                scheduleDrain = function () {
-                  element.data = called = ++called % 2;
-                };
-              } else if (
-                !global.setImmediate &&
-                typeof global.MessageChannel !== "undefined"
-              ) {
-                var channel = new global.MessageChannel();
-                channel.port1.onmessage = nextTick;
-                scheduleDrain = function () {
-                  channel.port2.postMessage(0);
-                };
-              } else if (
-                "document" in global &&
-                "onreadystatechange" in global.document.createElement("script")
-              ) {
-                scheduleDrain = function () {
-                  // Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted
-                  // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.
-                  var scriptEl = global.document.createElement("script");
-                  scriptEl.onreadystatechange = function () {
-                    nextTick();
-
-                    scriptEl.onreadystatechange = null;
-                    scriptEl.parentNode.removeChild(scriptEl);
-                    scriptEl = null;
-                  };
-                  global.document.documentElement.appendChild(scriptEl);
-                };
-              } else {
-                scheduleDrain = function () {
-                  setTimeout(nextTick, 0);
-                };
-              }
-            }
-
-            var draining;
-            var queue = [];
-            //named nextTick for less confusing stack traces
-            function nextTick() {
-              draining = true;
-              var i, oldQueue;
-              var len = queue.length;
-              while (len) {
-                oldQueue = queue;
-                queue = [];
-                i = -1;
-                while (++i < len) {
-                  oldQueue[i]();
-                }
-                len = queue.length;
-              }
-              draining = false;
-            }
-
-            module.exports = immediate;
-            function immediate(task) {
-              if (queue.push(task) === 1 && !draining) {
-                scheduleDrain();
-              }
-            }
-          }).call(
-            this,
-            typeof global !== "undefined"
-              ? global
-              : typeof self !== "undefined"
-              ? self
-              : typeof window !== "undefined"
-              ? window
-              : {},
-          );
-        },
-        {},
-      ],
-      37: [
-        function (require, module, exports) {
-          "use strict";
-          var immediate = require("immediate");
-
-          /* istanbul ignore next */
-          function INTERNAL() {}
-
-          var handlers = {};
-
-          var REJECTED = ["REJECTED"];
-          var FULFILLED = ["FULFILLED"];
-          var PENDING = ["PENDING"];
-
-          module.exports = Promise;
-
-          function Promise(resolver) {
-            if (typeof resolver !== "function") {
-              throw new TypeError("resolver must be a function");
-            }
-            this.state = PENDING;
-            this.queue = [];
-            this.outcome = void 0;
-            if (resolver !== INTERNAL) {
-              safelyResolveThenable(this, resolver);
-            }
-          }
-
-          Promise.prototype["finally"] = function (callback) {
-            if (typeof callback !== "function") {
-              return this;
-            }
-            var p = this.constructor;
-            return this.then(resolve, reject);
-
-            function resolve(value) {
-              function yes() {
-                return value;
-              }
-              return p.resolve(callback()).then(yes);
-            }
-            function reject(reason) {
-              function no() {
-                throw reason;
-              }
-              return p.resolve(callback()).then(no);
-            }
-          };
-          Promise.prototype["catch"] = function (onRejected) {
-            return this.then(null, onRejected);
-          };
-          Promise.prototype.then = function (onFulfilled, onRejected) {
-            if (
-              (typeof onFulfilled !== "function" && this.state === FULFILLED) ||
-              (typeof onRejected !== "function" && this.state === REJECTED)
-            ) {
-              return this;
-            }
-            var promise = new this.constructor(INTERNAL);
-            if (this.state !== PENDING) {
-              var resolver =
-                this.state === FULFILLED ? onFulfilled : onRejected;
-              unwrap(promise, resolver, this.outcome);
-            } else {
-              this.queue.push(new QueueItem(promise, onFulfilled, onRejected));
-            }
-
-            return promise;
-          };
-          function QueueItem(promise, onFulfilled, onRejected) {
-            this.promise = promise;
-            if (typeof onFulfilled === "function") {
-              this.onFulfilled = onFulfilled;
-              this.callFulfilled = this.otherCallFulfilled;
-            }
-            if (typeof onRejected === "function") {
-              this.onRejected = onRejected;
-              this.callRejected = this.otherCallRejected;
-            }
-          }
-          QueueItem.prototype.callFulfilled = function (value) {
-            handlers.resolve(this.promise, value);
-          };
-          QueueItem.prototype.otherCallFulfilled = function (value) {
-            unwrap(this.promise, this.onFulfilled, value);
-          };
-          QueueItem.prototype.callRejected = function (value) {
-            handlers.reject(this.promise, value);
-          };
-          QueueItem.prototype.otherCallRejected = function (value) {
-            unwrap(this.promise, this.onRejected, value);
-          };
-
-          function unwrap(promise, func, value) {
-            immediate(function () {
-              var returnValue;
-              try {
-                returnValue = func(value);
-              } catch (e) {
-                return handlers.reject(promise, e);
-              }
-              if (returnValue === promise) {
-                handlers.reject(
-                  promise,
-                  new TypeError("Cannot resolve promise with itself"),
-                );
-              } else {
-                handlers.resolve(promise, returnValue);
-              }
-            });
-          }
-
-          handlers.resolve = function (self, value) {
-            var result = tryCatch(getThen, value);
-            if (result.status === "error") {
-              return handlers.reject(self, result.value);
-            }
-            var thenable = result.value;
-
-            if (thenable) {
-              safelyResolveThenable(self, thenable);
-            } else {
-              self.state = FULFILLED;
-              self.outcome = value;
-              var i = -1;
-              var len = self.queue.length;
-              while (++i < len) {
-                self.queue[i].callFulfilled(value);
-              }
-            }
-            return self;
-          };
-          handlers.reject = function (self, error) {
-            self.state = REJECTED;
-            self.outcome = error;
-            var i = -1;
-            var len = self.queue.length;
-            while (++i < len) {
-              self.queue[i].callRejected(error);
-            }
-            return self;
-          };
-
-          function getThen(obj) {
-            // Make sure we only access the accessor once as required by the spec
-            var then = obj && obj.then;
-            if (
-              obj &&
-              (typeof obj === "object" || typeof obj === "function") &&
-              typeof then === "function"
-            ) {
-              return function appyThen() {
-                then.apply(obj, arguments);
-              };
-            }
-          }
-
-          function safelyResolveThenable(self, thenable) {
-            // Either fulfill, reject or reject with error
-            var called = false;
-            function onError(value) {
-              if (called) {
-                return;
-              }
-              called = true;
-              handlers.reject(self, value);
-            }
-
-            function onSuccess(value) {
-              if (called) {
-                return;
-              }
-              called = true;
-              handlers.resolve(self, value);
-            }
-
-            function tryToUnwrap() {
-              thenable(onSuccess, onError);
-            }
-
-            var result = tryCatch(tryToUnwrap);
-            if (result.status === "error") {
-              onError(result.value);
-            }
-          }
-
-          function tryCatch(func, value) {
-            var out = {};
-            try {
-              out.value = func(value);
-              out.status = "success";
-            } catch (e) {
-              out.status = "error";
-              out.value = e;
-            }
-            return out;
-          }
-
-          Promise.resolve = resolve;
-          function resolve(value) {
-            if (value instanceof this) {
-              return value;
-            }
-            return handlers.resolve(new this(INTERNAL), value);
-          }
-
-          Promise.reject = reject;
-          function reject(reason) {
-            var promise = new this(INTERNAL);
-            return handlers.reject(promise, reason);
-          }
-
-          Promise.all = all;
-          function all(iterable) {
-            var self = this;
-            if (Object.prototype.toString.call(iterable) !== "[object Array]") {
-              return this.reject(new TypeError("must be an array"));
-            }
-
-            var len = iterable.length;
-            var called = false;
-            if (!len) {
-              return this.resolve([]);
-            }
-
-            var values = new Array(len);
-            var resolved = 0;
-            var i = -1;
-            var promise = new this(INTERNAL);
-
-            while (++i < len) {
-              allResolver(iterable[i], i);
-            }
-            return promise;
-            function allResolver(value, i) {
-              self.resolve(value).then(resolveFromAll, function (error) {
-                if (!called) {
-                  called = true;
-                  handlers.reject(promise, error);
-                }
-              });
-              function resolveFromAll(outValue) {
-                values[i] = outValue;
-                if (++resolved === len && !called) {
-                  called = true;
-                  handlers.resolve(promise, values);
-                }
-              }
-            }
-          }
-
-          Promise.race = race;
-          function race(iterable) {
-            var self = this;
-            if (Object.prototype.toString.call(iterable) !== "[object Array]") {
-              return this.reject(new TypeError("must be an array"));
-            }
-
-            var len = iterable.length;
-            var called = false;
-            if (!len) {
-              return this.resolve([]);
-            }
-
-            var i = -1;
-            var promise = new this(INTERNAL);
-
-            while (++i < len) {
-              resolver(iterable[i]);
-            }
-            return promise;
-            function resolver(value) {
-              self.resolve(value).then(
-                function (response) {
-                  if (!called) {
-                    called = true;
-                    handlers.resolve(promise, response);
-                  }
-                },
-                function (error) {
-                  if (!called) {
-                    called = true;
-                    handlers.reject(promise, error);
-                  }
-                },
-              );
-            }
-          }
-        },
-        { immediate: 36 },
-      ],
-      38: [
-        function (require, module, exports) {
-          // Top level file is just a mixin of submodules & constants
-          "use strict";
-
-          var assign = require("./lib/utils/common").assign;
-
-          var deflate = require("./lib/deflate");
-          var inflate = require("./lib/inflate");
-          var constants = require("./lib/zlib/constants");
-
-          var pako = {};
-
-          assign(pako, deflate, inflate, constants);
-
-          module.exports = pako;
-        },
-        {
-          "./lib/deflate": 39,
-          "./lib/inflate": 40,
-          "./lib/utils/common": 41,
-          "./lib/zlib/constants": 44,
-        },
-      ],
-      39: [
-        function (require, module, exports) {
-          "use strict";
-
-          var zlib_deflate = require("./zlib/deflate");
-          var utils = require("./utils/common");
-          var strings = require("./utils/strings");
-          var msg = require("./zlib/messages");
-          var ZStream = require("./zlib/zstream");
-
-          var toString = Object.prototype.toString;
-
-          /* Public constants ==========================================================*/
-          /* ===========================================================================*/
-
-          var Z_NO_FLUSH = 0;
-          var Z_FINISH = 4;
-
-          var Z_OK = 0;
-          var Z_STREAM_END = 1;
-          var Z_SYNC_FLUSH = 2;
-
-          var Z_DEFAULT_COMPRESSION = -1;
-
-          var Z_DEFAULT_STRATEGY = 0;
-
-          var Z_DEFLATED = 8;
-
-          /* ===========================================================================*/
-
-          /**
-           * class Deflate
-           *
-           * Generic JS-style wrapper for zlib calls. If you don't need
-           * streaming behaviour - use more simple functions: [[deflate]],
-           * [[deflateRaw]] and [[gzip]].
-           **/
-
-          /* internal
-           * Deflate.chunks -> Array
-           *
-           * Chunks of output data, if [[Deflate#onData]] not overriden.
-           **/
-
-          /**
-           * Deflate.result -> Uint8Array|Array
-           *
-           * Compressed result, generated by default [[Deflate#onData]]
-           * and [[Deflate#onEnd]] handlers. Filled after you push last chunk
-           * (call [[Deflate#push]] with `Z_FINISH` / `true` param)  or if you
-           * push a chunk with explicit flush (call [[Deflate#push]] with
-           * `Z_SYNC_FLUSH` param).
-           **/
-
-          /**
-           * Deflate.err -> Number
-           *
-           * Error code after deflate finished. 0 (Z_OK) on success.
-           * You will not need it in real life, because deflate errors
-           * are possible only on wrong options or bad `onData` / `onEnd`
-           * custom handlers.
-           **/
-
-          /**
-           * Deflate.msg -> String
-           *
-           * Error message, if [[Deflate.err]] != 0
-           **/
-
-          /**
-           * new Deflate(options)
-           * - options (Object): zlib deflate options.
-           *
-           * Creates new deflator instance with specified params. Throws exception
-           * on bad params. Supported options:
-           *
-           * - `level`
-           * - `windowBits`
-           * - `memLevel`
-           * - `strategy`
-           * - `dictionary`
-           *
-           * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)
-           * for more information on these.
-           *
-           * Additional options, for internal needs:
-           *
-           * - `chunkSize` - size of generated data chunks (16K by default)
-           * - `raw` (Boolean) - do raw deflate
-           * - `gzip` (Boolean) - create gzip wrapper
-           * - `to` (String) - if equal to 'string', then result will be "binary string"
-           *    (each char code [0..255])
-           * - `header` (Object) - custom header for gzip
-           *   - `text` (Boolean) - true if compressed data believed to be text
-           *   - `time` (Number) - modification time, unix timestamp
-           *   - `os` (Number) - operation system code
-           *   - `extra` (Array) - array of bytes with extra data (max 65536)
-           *   - `name` (String) - file name (binary string)
-           *   - `comment` (String) - comment (binary string)
-           *   - `hcrc` (Boolean) - true if header crc should be added
-           *
-           * ##### Example:
-           *
-           * ```javascript
-           * var pako = require('pako')
-           *   , chunk1 = Uint8Array([1,2,3,4,5,6,7,8,9])
-           *   , chunk2 = Uint8Array([10,11,12,13,14,15,16,17,18,19]);
-           *
-           * var deflate = new pako.Deflate({ level: 3});
-           *
-           * deflate.push(chunk1, false);
-           * deflate.push(chunk2, true);  // true -> last chunk
-           *
-           * if (deflate.err) { throw new Error(deflate.err); }
-           *
-           * console.log(deflate.result);
-           * ```
-           **/
-          function Deflate(options) {
-            if (!(this instanceof Deflate)) return new Deflate(options);
-
-            this.options = utils.assign(
-              {
-                level: Z_DEFAULT_COMPRESSION,
-                method: Z_DEFLATED,
-                chunkSize: 16384,
-                windowBits: 15,
-                memLevel: 8,
-                strategy: Z_DEFAULT_STRATEGY,
-                to: "",
-              },
-              options || {},
-            );
-
-            var opt = this.options;
-
-            if (opt.raw && opt.windowBits > 0) {
-              opt.windowBits = -opt.windowBits;
-            } else if (opt.gzip && opt.windowBits > 0 && opt.windowBits < 16) {
-              opt.windowBits += 16;
-            }
-
-            this.err = 0; // error code, if happens (0 = Z_OK)
-            this.msg = ""; // error message
-            this.ended = false; // used to avoid multiple onEnd() calls
-            this.chunks = []; // chunks of compressed data
-
-            this.strm = new ZStream();
-            this.strm.avail_out = 0;
-
-            var status = zlib_deflate.deflateInit2(
-              this.strm,
-              opt.level,
-              opt.method,
-              opt.windowBits,
-              opt.memLevel,
-              opt.strategy,
-            );
-
-            if (status !== Z_OK) {
-              throw new Error(msg[status]);
-            }
-
-            if (opt.header) {
-              zlib_deflate.deflateSetHeader(this.strm, opt.header);
-            }
-
-            if (opt.dictionary) {
-              var dict;
-              // Convert data if needed
-              if (typeof opt.dictionary === "string") {
-                // If we need to compress text, change encoding to utf8.
-                dict = strings.string2buf(opt.dictionary);
-              } else if (
-                toString.call(opt.dictionary) === "[object ArrayBuffer]"
-              ) {
-                dict = new Uint8Array(opt.dictionary);
-              } else {
-                dict = opt.dictionary;
-              }
-
-              status = zlib_deflate.deflateSetDictionary(this.strm, dict);
-
-              if (status !== Z_OK) {
-                throw new Error(msg[status]);
-              }
-
-              this._dict_set = true;
-            }
-          }
-
-          /**
-           * Deflate#push(data[, mode]) -> Boolean
-           * - data (Uint8Array|Array|ArrayBuffer|String): input data. Strings will be
-           *   converted to utf8 byte sequence.
-           * - mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE modes.
-           *   See constants. Skipped or `false` means Z_NO_FLUSH, `true` meansh Z_FINISH.
-           *
-           * Sends input data to deflate pipe, generating [[Deflate#onData]] calls with
-           * new compressed chunks. Returns `true` on success. The last data block must have
-           * mode Z_FINISH (or `true`). That will flush internal pending buffers and call
-           * [[Deflate#onEnd]]. For interim explicit flushes (without ending the stream) you
-           * can use mode Z_SYNC_FLUSH, keeping the compression context.
-           *
-           * On fail call [[Deflate#onEnd]] with error code and return false.
-           *
-           * We strongly recommend to use `Uint8Array` on input for best speed (output
-           * array format is detected automatically). Also, don't skip last param and always
-           * use the same type in your code (boolean or number). That will improve JS speed.
-           *
-           * For regular `Array`-s make sure all elements are [0..255].
-           *
-           * ##### Example
-           *
-           * ```javascript
-           * push(chunk, false); // push one of data chunks
-           * ...
-           * push(chunk, true);  // push last chunk
-           * ```
-           **/
-          Deflate.prototype.push = function (data, mode) {
-            var strm = this.strm;
-            var chunkSize = this.options.chunkSize;
-            var status, _mode;
-
-            if (this.ended) {
-              return false;
-            }
-
-            _mode =
-              mode === ~~mode ? mode : mode === true ? Z_FINISH : Z_NO_FLUSH;
-
-            // Convert data if needed
-            if (typeof data === "string") {
-              // If we need to compress text, change encoding to utf8.
-              strm.input = strings.string2buf(data);
-            } else if (toString.call(data) === "[object ArrayBuffer]") {
-              strm.input = new Uint8Array(data);
-            } else {
-              strm.input = data;
-            }
-
-            strm.next_in = 0;
-            strm.avail_in = strm.input.length;
-
-            do {
-              if (strm.avail_out === 0) {
-                strm.output = new utils.Buf8(chunkSize);
-                strm.next_out = 0;
-                strm.avail_out = chunkSize;
-              }
-              status = zlib_deflate.deflate(
-                strm,
-                _mode,
-              ); /* no bad return value */
-
-              if (status !== Z_STREAM_END && status !== Z_OK) {
-                this.onEnd(status);
-                this.ended = true;
-                return false;
-              }
-              if (
-                strm.avail_out === 0 ||
-                (strm.avail_in === 0 &&
-                  (_mode === Z_FINISH || _mode === Z_SYNC_FLUSH))
-              ) {
-                if (this.options.to === "string") {
-                  this.onData(
-                    strings.buf2binstring(
-                      utils.shrinkBuf(strm.output, strm.next_out),
-                    ),
-                  );
-                } else {
-                  this.onData(utils.shrinkBuf(strm.output, strm.next_out));
-                }
-              }
-            } while (
-              (strm.avail_in > 0 || strm.avail_out === 0) &&
-              status !== Z_STREAM_END
-            );
-
-            // Finalize on the last chunk.
-            if (_mode === Z_FINISH) {
-              status = zlib_deflate.deflateEnd(this.strm);
-              this.onEnd(status);
-              this.ended = true;
-              return status === Z_OK;
-            }
-
-            // callback interim results if Z_SYNC_FLUSH.
-            if (_mode === Z_SYNC_FLUSH) {
-              this.onEnd(Z_OK);
-              strm.avail_out = 0;
-              return true;
-            }
-
-            return true;
-          };
-
-          /**
-           * Deflate#onData(chunk) -> Void
-           * - chunk (Uint8Array|Array|String): ouput data. Type of array depends
-           *   on js engine support. When string output requested, each chunk
-           *   will be string.
-           *
-           * By default, stores data blocks in `chunks[]` property and glue
-           * those in `onEnd`. Override this handler, if you need another behaviour.
-           **/
-          Deflate.prototype.onData = function (chunk) {
-            this.chunks.push(chunk);
-          };
-
-          /**
-           * Deflate#onEnd(status) -> Void
-           * - status (Number): deflate status. 0 (Z_OK) on success,
-           *   other if not.
-           *
-           * Called once after you tell deflate that the input stream is
-           * complete (Z_FINISH) or should be flushed (Z_SYNC_FLUSH)
-           * or if an error happened. By default - join collected chunks,
-           * free memory and fill `results` / `err` properties.
-           **/
-          Deflate.prototype.onEnd = function (status) {
-            // On success - join
-            if (status === Z_OK) {
-              if (this.options.to === "string") {
-                this.result = this.chunks.join("");
-              } else {
-                this.result = utils.flattenChunks(this.chunks);
-              }
-            }
-            this.chunks = [];
-            this.err = status;
-            this.msg = this.strm.msg;
-          };
-
-          /**
-           * deflate(data[, options]) -> Uint8Array|Array|String
-           * - data (Uint8Array|Array|String): input data to compress.
-           * - options (Object): zlib deflate options.
-           *
-           * Compress `data` with deflate algorithm and `options`.
-           *
-           * Supported options are:
-           *
-           * - level
-           * - windowBits
-           * - memLevel
-           * - strategy
-           * - dictionary
-           *
-           * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)
-           * for more information on these.
-           *
-           * Sugar (options):
-           *
-           * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify
-           *   negative windowBits implicitly.
-           * - `to` (String) - if equal to 'string', then result will be "binary string"
-           *    (each char code [0..255])
-           *
-           * ##### Example:
-           *
-           * ```javascript
-           * var pako = require('pako')
-           *   , data = Uint8Array([1,2,3,4,5,6,7,8,9]);
-           *
-           * console.log(pako.deflate(data));
-           * ```
-           **/
-          function deflate(input, options) {
-            var deflator = new Deflate(options);
-
-            deflator.push(input, true);
-
-            // That will never happens, if you don't cheat with options :)
-            if (deflator.err) {
-              throw deflator.msg || msg[deflator.err];
-            }
-
-            return deflator.result;
-          }
-
-          /**
-           * deflateRaw(data[, options]) -> Uint8Array|Array|String
-           * - data (Uint8Array|Array|String): input data to compress.
-           * - options (Object): zlib deflate options.
-           *
-           * The same as [[deflate]], but creates raw data, without wrapper
-           * (header and adler32 crc).
-           **/
-          function deflateRaw(input, options) {
-            options = options || {};
-            options.raw = true;
-            return deflate(input, options);
-          }
-
-          /**
-           * gzip(data[, options]) -> Uint8Array|Array|String
-           * - data (Uint8Array|Array|String): input data to compress.
-           * - options (Object): zlib deflate options.
-           *
-           * The same as [[deflate]], but create gzip wrapper instead of
-           * deflate one.
-           **/
-          function gzip(input, options) {
-            options = options || {};
-            options.gzip = true;
-            return deflate(input, options);
-          }
-
-          exports.Deflate = Deflate;
-          exports.deflate = deflate;
-          exports.deflateRaw = deflateRaw;
-          exports.gzip = gzip;
-        },
-        {
-          "./utils/common": 41,
-          "./utils/strings": 42,
-          "./zlib/deflate": 46,
-          "./zlib/messages": 51,
-          "./zlib/zstream": 53,
-        },
-      ],
-      40: [
-        function (require, module, exports) {
-          "use strict";
-
-          var zlib_inflate = require("./zlib/inflate");
-          var utils = require("./utils/common");
-          var strings = require("./utils/strings");
-          var c = require("./zlib/constants");
-          var msg = require("./zlib/messages");
-          var ZStream = require("./zlib/zstream");
-          var GZheader = require("./zlib/gzheader");
-
-          var toString = Object.prototype.toString;
-
-          /**
-           * class Inflate
-           *
-           * Generic JS-style wrapper for zlib calls. If you don't need
-           * streaming behaviour - use more simple functions: [[inflate]]
-           * and [[inflateRaw]].
-           **/
-
-          /* internal
-           * inflate.chunks -> Array
-           *
-           * Chunks of output data, if [[Inflate#onData]] not overriden.
-           **/
-
-          /**
-           * Inflate.result -> Uint8Array|Array|String
-           *
-           * Uncompressed result, generated by default [[Inflate#onData]]
-           * and [[Inflate#onEnd]] handlers. Filled after you push last chunk
-           * (call [[Inflate#push]] with `Z_FINISH` / `true` param) or if you
-           * push a chunk with explicit flush (call [[Inflate#push]] with
-           * `Z_SYNC_FLUSH` param).
-           **/
-
-          /**
-           * Inflate.err -> Number
-           *
-           * Error code after inflate finished. 0 (Z_OK) on success.
-           * Should be checked if broken data possible.
-           **/
-
-          /**
-           * Inflate.msg -> String
-           *
-           * Error message, if [[Inflate.err]] != 0
-           **/
-
-          /**
-           * new Inflate(options)
-           * - options (Object): zlib inflate options.
-           *
-           * Creates new inflator instance with specified params. Throws exception
-           * on bad params. Supported options:
-           *
-           * - `windowBits`
-           * - `dictionary`
-           *
-           * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)
-           * for more information on these.
-           *
-           * Additional options, for internal needs:
-           *
-           * - `chunkSize` - size of generated data chunks (16K by default)
-           * - `raw` (Boolean) - do raw inflate
-           * - `to` (String) - if equal to 'string', then result will be converted
-           *   from utf8 to utf16 (javascript) string. When string output requested,
-           *   chunk length can differ from `chunkSize`, depending on content.
-           *
-           * By default, when no options set, autodetect deflate/gzip data format via
-           * wrapper header.
-           *
-           * ##### Example:
-           *
-           * ```javascript
-           * var pako = require('pako')
-           *   , chunk1 = Uint8Array([1,2,3,4,5,6,7,8,9])
-           *   , chunk2 = Uint8Array([10,11,12,13,14,15,16,17,18,19]);
-           *
-           * var inflate = new pako.Inflate({ level: 3});
-           *
-           * inflate.push(chunk1, false);
-           * inflate.push(chunk2, true);  // true -> last chunk
-           *
-           * if (inflate.err) { throw new Error(inflate.err); }
-           *
-           * console.log(inflate.result);
-           * ```
-           **/
-          function Inflate(options) {
-            if (!(this instanceof Inflate)) return new Inflate(options);
-
-            this.options = utils.assign(
-              {
-                chunkSize: 16384,
-                windowBits: 0,
-                to: "",
-              },
-              options || {},
-            );
-
-            var opt = this.options;
-
-            // Force window size for `raw` data, if not set directly,
-            // because we have no header for autodetect.
-            if (opt.raw && opt.windowBits >= 0 && opt.windowBits < 16) {
-              opt.windowBits = -opt.windowBits;
-              if (opt.windowBits === 0) {
-                opt.windowBits = -15;
-              }
-            }
-
-            // If `windowBits` not defined (and mode not raw) - set autodetect flag for gzip/deflate
-            if (
-              opt.windowBits >= 0 &&
-              opt.windowBits < 16 &&
-              !(options && options.windowBits)
-            ) {
-              opt.windowBits += 32;
-            }
-
-            // Gzip header has no info about windows size, we can do autodetect only
-            // for deflate. So, if window size not set, force it to max when gzip possible
-            if (opt.windowBits > 15 && opt.windowBits < 48) {
-              // bit 3 (16) -> gzipped data
-              // bit 4 (32) -> autodetect gzip/deflate
-              if ((opt.windowBits & 15) === 0) {
-                opt.windowBits |= 15;
-              }
-            }
-
-            this.err = 0; // error code, if happens (0 = Z_OK)
-            this.msg = ""; // error message
-            this.ended = false; // used to avoid multiple onEnd() calls
-            this.chunks = []; // chunks of compressed data
-
-            this.strm = new ZStream();
-            this.strm.avail_out = 0;
-
-            var status = zlib_inflate.inflateInit2(this.strm, opt.windowBits);
-
-            if (status !== c.Z_OK) {
-              throw new Error(msg[status]);
-            }
-
-            this.header = new GZheader();
-
-            zlib_inflate.inflateGetHeader(this.strm, this.header);
-          }
-
-          /**
-           * Inflate#push(data[, mode]) -> Boolean
-           * - data (Uint8Array|Array|ArrayBuffer|String): input data
-           * - mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE modes.
-           *   See constants. Skipped or `false` means Z_NO_FLUSH, `true` meansh Z_FINISH.
-           *
-           * Sends input data to inflate pipe, generating [[Inflate#onData]] calls with
-           * new output chunks. Returns `true` on success. The last data block must have
-           * mode Z_FINISH (or `true`). That will flush internal pending buffers and call
-           * [[Inflate#onEnd]]. For interim explicit flushes (without ending the stream) you
-           * can use mode Z_SYNC_FLUSH, keeping the decompression context.
-           *
-           * On fail call [[Inflate#onEnd]] with error code and return false.
-           *
-           * We strongly recommend to use `Uint8Array` on input for best speed (output
-           * format is detected automatically). Also, don't skip last param and always
-           * use the same type in your code (boolean or number). That will improve JS speed.
-           *
-           * For regular `Array`-s make sure all elements are [0..255].
-           *
-           * ##### Example
-           *
-           * ```javascript
-           * push(chunk, false); // push one of data chunks
-           * ...
-           * push(chunk, true);  // push last chunk
-           * ```
-           **/
-          Inflate.prototype.push = function (data, mode) {
-            var strm = this.strm;
-            var chunkSize = this.options.chunkSize;
-            var dictionary = this.options.dictionary;
-            var status, _mode;
-            var next_out_utf8, tail, utf8str;
-            var dict;
-
-            // Flag to properly process Z_BUF_ERROR on testing inflate call
-            // when we check that all output data was flushed.
-            var allowBufError = false;
-
-            if (this.ended) {
-              return false;
-            }
-            _mode =
-              mode === ~~mode
-                ? mode
-                : mode === true
-                ? c.Z_FINISH
-                : c.Z_NO_FLUSH;
-
-            // Convert data if needed
-            if (typeof data === "string") {
-              // Only binary strings can be decompressed on practice
-              strm.input = strings.binstring2buf(data);
-            } else if (toString.call(data) === "[object ArrayBuffer]") {
-              strm.input = new Uint8Array(data);
-            } else {
-              strm.input = data;
-            }
-
-            strm.next_in = 0;
-            strm.avail_in = strm.input.length;
-
-            do {
-              if (strm.avail_out === 0) {
-                strm.output = new utils.Buf8(chunkSize);
-                strm.next_out = 0;
-                strm.avail_out = chunkSize;
-              }
-
-              status = zlib_inflate.inflate(
-                strm,
-                c.Z_NO_FLUSH,
-              ); /* no bad return value */
-
-              if (status === c.Z_NEED_DICT && dictionary) {
-                // Convert data if needed
-                if (typeof dictionary === "string") {
-                  dict = strings.string2buf(dictionary);
-                } else if (
-                  toString.call(dictionary) === "[object ArrayBuffer]"
-                ) {
-                  dict = new Uint8Array(dictionary);
-                } else {
-                  dict = dictionary;
-                }
-
-                status = zlib_inflate.inflateSetDictionary(this.strm, dict);
-              }
-
-              if (status === c.Z_BUF_ERROR && allowBufError === true) {
-                status = c.Z_OK;
-                allowBufError = false;
-              }
-
-              if (status !== c.Z_STREAM_END && status !== c.Z_OK) {
-                this.onEnd(status);
-                this.ended = true;
-                return false;
-              }
-
-              if (strm.next_out) {
-                if (
-                  strm.avail_out === 0 ||
-                  status === c.Z_STREAM_END ||
-                  (strm.avail_in === 0 &&
-                    (_mode === c.Z_FINISH || _mode === c.Z_SYNC_FLUSH))
-                ) {
-                  if (this.options.to === "string") {
-                    next_out_utf8 = strings.utf8border(
-                      strm.output,
-                      strm.next_out,
-                    );
-
-                    tail = strm.next_out - next_out_utf8;
-                    utf8str = strings.buf2string(strm.output, next_out_utf8);
-
-                    // move tail
-                    strm.next_out = tail;
-                    strm.avail_out = chunkSize - tail;
-                    if (tail) {
-                      utils.arraySet(
-                        strm.output,
-                        strm.output,
-                        next_out_utf8,
-                        tail,
-                        0,
-                      );
-                    }
-
-                    this.onData(utf8str);
-                  } else {
-                    this.onData(utils.shrinkBuf(strm.output, strm.next_out));
-                  }
-                }
-              }
-
-              // When no more input data, we should check that internal inflate buffers
-              // are flushed. The only way to do it when avail_out = 0 - run one more
-              // inflate pass. But if output data not exists, inflate return Z_BUF_ERROR.
-              // Here we set flag to process this error properly.
-              //
-              // NOTE. Deflate does not return error in this case and does not needs such
-              // logic.
-              if (strm.avail_in === 0 && strm.avail_out === 0) {
-                allowBufError = true;
-              }
-            } while (
-              (strm.avail_in > 0 || strm.avail_out === 0) &&
-              status !== c.Z_STREAM_END
-            );
-
-            if (status === c.Z_STREAM_END) {
-              _mode = c.Z_FINISH;
-            }
-
-            // Finalize on the last chunk.
-            if (_mode === c.Z_FINISH) {
-              status = zlib_inflate.inflateEnd(this.strm);
-              this.onEnd(status);
-              this.ended = true;
-              return status === c.Z_OK;
-            }
-
-            // callback interim results if Z_SYNC_FLUSH.
-            if (_mode === c.Z_SYNC_FLUSH) {
-              this.onEnd(c.Z_OK);
-              strm.avail_out = 0;
-              return true;
-            }
-
-            return true;
-          };
-
-          /**
-           * Inflate#onData(chunk) -> Void
-           * - chunk (Uint8Array|Array|String): ouput data. Type of array depends
-           *   on js engine support. When string output requested, each chunk
-           *   will be string.
-           *
-           * By default, stores data blocks in `chunks[]` property and glue
-           * those in `onEnd`. Override this handler, if you need another behaviour.
-           **/
-          Inflate.prototype.onData = function (chunk) {
-            this.chunks.push(chunk);
-          };
-
-          /**
-           * Inflate#onEnd(status) -> Void
-           * - status (Number): inflate status. 0 (Z_OK) on success,
-           *   other if not.
-           *
-           * Called either after you tell inflate that the input stream is
-           * complete (Z_FINISH) or should be flushed (Z_SYNC_FLUSH)
-           * or if an error happened. By default - join collected chunks,
-           * free memory and fill `results` / `err` properties.
-           **/
-          Inflate.prototype.onEnd = function (status) {
-            // On success - join
-            if (status === c.Z_OK) {
-              if (this.options.to === "string") {
-                // Glue & convert here, until we teach pako to send
-                // utf8 alligned strings to onData
-                this.result = this.chunks.join("");
-              } else {
-                this.result = utils.flattenChunks(this.chunks);
-              }
-            }
-            this.chunks = [];
-            this.err = status;
-            this.msg = this.strm.msg;
-          };
-
-          /**
-           * inflate(data[, options]) -> Uint8Array|Array|String
-           * - data (Uint8Array|Array|String): input data to decompress.
-           * - options (Object): zlib inflate options.
-           *
-           * Decompress `data` with inflate/ungzip and `options`. Autodetect
-           * format via wrapper header by default. That's why we don't provide
-           * separate `ungzip` method.
-           *
-           * Supported options are:
-           *
-           * - windowBits
-           *
-           * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)
-           * for more information.
-           *
-           * Sugar (options):
-           *
-           * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify
-           *   negative windowBits implicitly.
-           * - `to` (String) - if equal to 'string', then result will be converted
-           *   from utf8 to utf16 (javascript) string. When string output requested,
-           *   chunk length can differ from `chunkSize`, depending on content.
-           *
-           *
-           * ##### Example:
-           *
-           * ```javascript
-           * var pako = require('pako')
-           *   , input = pako.deflate([1,2,3,4,5,6,7,8,9])
-           *   , output;
-           *
-           * try {
-           *   output = pako.inflate(input);
-           * } catch (err)
-           *   console.log(err);
-           * }
-           * ```
-           **/
-          function inflate(input, options) {
-            var inflator = new Inflate(options);
-
-            inflator.push(input, true);
-
-            // That will never happens, if you don't cheat with options :)
-            if (inflator.err) {
-              throw inflator.msg || msg[inflator.err];
-            }
-
-            return inflator.result;
-          }
-
-          /**
-           * inflateRaw(data[, options]) -> Uint8Array|Array|String
-           * - data (Uint8Array|Array|String): input data to decompress.
-           * - options (Object): zlib inflate options.
-           *
-           * The same as [[inflate]], but creates raw data, without wrapper
-           * (header and adler32 crc).
-           **/
-          function inflateRaw(input, options) {
-            options = options || {};
-            options.raw = true;
-            return inflate(input, options);
-          }
-
-          /**
-           * ungzip(data[, options]) -> Uint8Array|Array|String
-           * - data (Uint8Array|Array|String): input data to decompress.
-           * - options (Object): zlib inflate options.
-           *
-           * Just shortcut to [[inflate]], because it autodetects format
-           * by header.content. Done for convenience.
-           **/
-
-          exports.Inflate = Inflate;
-          exports.inflate = inflate;
-          exports.inflateRaw = inflateRaw;
-          exports.ungzip = inflate;
-        },
-        {
-          "./utils/common": 41,
-          "./utils/strings": 42,
-          "./zlib/constants": 44,
-          "./zlib/gzheader": 47,
-          "./zlib/inflate": 49,
-          "./zlib/messages": 51,
-          "./zlib/zstream": 53,
-        },
-      ],
-      41: [
-        function (require, module, exports) {
-          "use strict";
-
-          var TYPED_OK =
-            typeof Uint8Array !== "undefined" &&
-            typeof Uint16Array !== "undefined" &&
-            typeof Int32Array !== "undefined";
-
-          exports.assign = function (obj /*from1, from2, from3, ...*/) {
-            var sources = Array.prototype.slice.call(arguments, 1);
-            while (sources.length) {
-              var source = sources.shift();
-              if (!source) {
-                continue;
-              }
-
-              if (typeof source !== "object") {
-                throw new TypeError(source + "must be non-object");
-              }
-
-              for (var p in source) {
-                if (source.hasOwnProperty(p)) {
-                  obj[p] = source[p];
-                }
-              }
-            }
-
-            return obj;
-          };
-
-          // reduce buffer size, avoiding mem copy
-          exports.shrinkBuf = function (buf, size) {
-            if (buf.length === size) {
-              return buf;
-            }
-            if (buf.subarray) {
-              return buf.subarray(0, size);
-            }
-            buf.length = size;
-            return buf;
-          };
-
-          var fnTyped = {
-            arraySet: function (dest, src, src_offs, len, dest_offs) {
-              if (src.subarray && dest.subarray) {
-                dest.set(src.subarray(src_offs, src_offs + len), dest_offs);
-                return;
-              }
-              // Fallback to ordinary array
-              for (var i = 0; i < len; i++) {
-                dest[dest_offs + i] = src[src_offs + i];
-              }
-            },
-            // Join array of chunks to single array.
-            flattenChunks: function (chunks) {
-              var i, l, len, pos, chunk, result;
-
-              // calculate data length
-              len = 0;
-              for (i = 0, l = chunks.length; i < l; i++) {
-                len += chunks[i].length;
-              }
-
-              // join chunks
-              result = new Uint8Array(len);
-              pos = 0;
-              for (i = 0, l = chunks.length; i < l; i++) {
-                chunk = chunks[i];
-                result.set(chunk, pos);
-                pos += chunk.length;
-              }
-
-              return result;
-            },
-          };
-
-          var fnUntyped = {
-            arraySet: function (dest, src, src_offs, len, dest_offs) {
-              for (var i = 0; i < len; i++) {
-                dest[dest_offs + i] = src[src_offs + i];
-              }
-            },
-            // Join array of chunks to single array.
-            flattenChunks: function (chunks) {
-              return [].concat.apply([], chunks);
-            },
-          };
-
-          // Enable/Disable typed arrays use, for testing
-          //
-          exports.setTyped = function (on) {
-            if (on) {
-              exports.Buf8 = Uint8Array;
-              exports.Buf16 = Uint16Array;
-              exports.Buf32 = Int32Array;
-              exports.assign(exports, fnTyped);
-            } else {
-              exports.Buf8 = Array;
-              exports.Buf16 = Array;
-              exports.Buf32 = Array;
-              exports.assign(exports, fnUntyped);
-            }
-          };
-
-          exports.setTyped(TYPED_OK);
-        },
-        {},
-      ],
-      42: [
-        function (require, module, exports) {
-          // String encode/decode helpers
-          "use strict";
-
-          var utils = require("./common");
-
-          // Quick check if we can use fast array to bin string conversion
-          //
-          // - apply(Array) can fail on Android 2.2
-          // - apply(Uint8Array) can fail on iOS 5.1 Safary
-          //
-          var STR_APPLY_OK = true;
-          var STR_APPLY_UIA_OK = true;
-
-          try {
-            String.fromCharCode.apply(null, [0]);
-          } catch (__) {
-            STR_APPLY_OK = false;
-          }
-          try {
-            String.fromCharCode.apply(null, new Uint8Array(1));
-          } catch (__) {
-            STR_APPLY_UIA_OK = false;
-          }
-
-          // Table with utf8 lengths (calculated by first byte of sequence)
-          // Note, that 5 & 6-byte values and some 4-byte values can not be represented in JS,
-          // because max possible codepoint is 0x10ffff
-          var _utf8len = new utils.Buf8(256);
-          for (var q = 0; q < 256; q++) {
-            _utf8len[q] =
-              q >= 252
-                ? 6
-                : q >= 248
-                ? 5
-                : q >= 240
-                ? 4
-                : q >= 224
-                ? 3
-                : q >= 192
-                ? 2
-                : 1;
-          }
-          _utf8len[254] = _utf8len[254] = 1; // Invalid sequence start
-
-          // convert string to array (typed, when possible)
-          exports.string2buf = function (str) {
-            var buf,
-              c,
-              c2,
-              m_pos,
-              i,
-              str_len = str.length,
-              buf_len = 0;
-
-            // count binary size
-            for (m_pos = 0; m_pos < str_len; m_pos++) {
-              c = str.charCodeAt(m_pos);
-              if ((c & 0xfc00) === 0xd800 && m_pos + 1 < str_len) {
-                c2 = str.charCodeAt(m_pos + 1);
-                if ((c2 & 0xfc00) === 0xdc00) {
-                  c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);
-                  m_pos++;
-                }
-              }
-              buf_len += c < 0x80 ? 1 : c < 0x800 ? 2 : c < 0x10000 ? 3 : 4;
-            }
-
-            // allocate buffer
-            buf = new utils.Buf8(buf_len);
-
-            // convert
-            for (i = 0, m_pos = 0; i < buf_len; m_pos++) {
-              c = str.charCodeAt(m_pos);
-              if ((c & 0xfc00) === 0xd800 && m_pos + 1 < str_len) {
-                c2 = str.charCodeAt(m_pos + 1);
-                if ((c2 & 0xfc00) === 0xdc00) {
-                  c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);
-                  m_pos++;
-                }
-              }
-              if (c < 0x80) {
-                /* one byte */
-                buf[i++] = c;
-              } else if (c < 0x800) {
-                /* two bytes */
-                buf[i++] = 0xc0 | (c >>> 6);
-                buf[i++] = 0x80 | (c & 0x3f);
-              } else if (c < 0x10000) {
-                /* three bytes */
-                buf[i++] = 0xe0 | (c >>> 12);
-                buf[i++] = 0x80 | ((c >>> 6) & 0x3f);
-                buf[i++] = 0x80 | (c & 0x3f);
-              } else {
-                /* four bytes */
-                buf[i++] = 0xf0 | (c >>> 18);
-                buf[i++] = 0x80 | ((c >>> 12) & 0x3f);
-                buf[i++] = 0x80 | ((c >>> 6) & 0x3f);
-                buf[i++] = 0x80 | (c & 0x3f);
-              }
-            }
-
-            return buf;
-          };
-
-          // Helper (used in 2 places)
-          function buf2binstring(buf, len) {
-            // use fallback for big arrays to avoid stack overflow
-            if (len < 65537) {
-              if (
-                (buf.subarray && STR_APPLY_UIA_OK) ||
-                (!buf.subarray && STR_APPLY_OK)
-              ) {
-                return String.fromCharCode.apply(
-                  null,
-                  utils.shrinkBuf(buf, len),
-                );
-              }
-            }
-
-            var result = "";
-            for (var i = 0; i < len; i++) {
-              result += String.fromCharCode(buf[i]);
-            }
-            return result;
-          }
-
-          // Convert byte array to binary string
-          exports.buf2binstring = function (buf) {
-            return buf2binstring(buf, buf.length);
-          };
-
-          // Convert binary string (typed, when possible)
-          exports.binstring2buf = function (str) {
-            var buf = new utils.Buf8(str.length);
-            for (var i = 0, len = buf.length; i < len; i++) {
-              buf[i] = str.charCodeAt(i);
-            }
-            return buf;
-          };
-
-          // convert array to string
-          exports.buf2string = function (buf, max) {
-            var i, out, c, c_len;
-            var len = max || buf.length;
-
-            // Reserve max possible length (2 words per char)
-            // NB: by unknown reasons, Array is significantly faster for
-            //     String.fromCharCode.apply than Uint16Array.
-            var utf16buf = new Array(len * 2);
-
-            for (out = 0, i = 0; i < len; ) {
-              c = buf[i++];
-              // quick process ascii
-              if (c < 0x80) {
-                utf16buf[out++] = c;
-                continue;
-              }
-
-              c_len = _utf8len[c];
-              // skip 5 & 6 byte codes
-              if (c_len > 4) {
-                utf16buf[out++] = 0xfffd;
-                i += c_len - 1;
-                continue;
-              }
-
-              // apply mask on first byte
-              c &= c_len === 2 ? 0x1f : c_len === 3 ? 0x0f : 0x07;
-              // join the rest
-              while (c_len > 1 && i < len) {
-                c = (c << 6) | (buf[i++] & 0x3f);
-                c_len--;
-              }
-
-              // terminated by end of string?
-              if (c_len > 1) {
-                utf16buf[out++] = 0xfffd;
-                continue;
-              }
-
-              if (c < 0x10000) {
-                utf16buf[out++] = c;
-              } else {
-                c -= 0x10000;
-                utf16buf[out++] = 0xd800 | ((c >> 10) & 0x3ff);
-                utf16buf[out++] = 0xdc00 | (c & 0x3ff);
-              }
-            }
-
-            return buf2binstring(utf16buf, out);
-          };
-
-          // Calculate max possible position in utf8 buffer,
-          // that will not break sequence. If that's not possible
-          // - (very small limits) return max size as is.
-          //
-          // buf[] - utf8 bytes array
-          // max   - length limit (mandatory);
-          exports.utf8border = function (buf, max) {
-            var pos;
-
-            max = max || buf.length;
-            if (max > buf.length) {
-              max = buf.length;
-            }
-
-            // go back from last position, until start of sequence found
-            pos = max - 1;
-            while (pos >= 0 && (buf[pos] & 0xc0) === 0x80) {
-              pos--;
-            }
-
-            // Fuckup - very small and broken sequence,
-            // return max, because we should return something anyway.
-            if (pos < 0) {
-              return max;
-            }
-
-            // If we came to start of buffer - that means vuffer is too small,
-            // return max too.
-            if (pos === 0) {
-              return max;
-            }
-
-            return pos + _utf8len[buf[pos]] > max ? pos : max;
-          };
-        },
-        { "./common": 41 },
-      ],
-      43: [
-        function (require, module, exports) {
-          "use strict";
-
-          // Note: adler32 takes 12% for level 0 and 2% for level 6.
-          // It doesn't worth to make additional optimizationa as in original.
-          // Small size is preferable.
-
-          // (C) 1995-2013 Jean-loup Gailly and Mark Adler
-          // (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
-          //
-          // This software is provided 'as-is', without any express or implied
-          // warranty. In no event will the authors be held liable for any damages
-          // arising from the use of this software.
-          //
-          // Permission is granted to anyone to use this software for any purpose,
-          // including commercial applications, and to alter it and redistribute it
-          // freely, subject to the following restrictions:
-          //
-          // 1. The origin of this software must not be misrepresented; you must not
-          //   claim that you wrote the original software. If you use this software
-          //   in a product, an acknowledgment in the product documentation would be
-          //   appreciated but is not required.
-          // 2. Altered source versions must be plainly marked as such, and must not be
-          //   misrepresented as being the original software.
-          // 3. This notice may not be removed or altered from any source distribution.
-
-          function adler32(adler, buf, len, pos) {
-            var s1 = (adler & 0xffff) | 0,
-              s2 = ((adler >>> 16) & 0xffff) | 0,
-              n = 0;
-
-            while (len !== 0) {
-              // Set limit ~ twice less than 5552, to keep
-              // s2 in 31-bits, because we force signed ints.
-              // in other case %= will fail.
-              n = len > 2000 ? 2000 : len;
-              len -= n;
-
-              do {
-                s1 = (s1 + buf[pos++]) | 0;
-                s2 = (s2 + s1) | 0;
-              } while (--n);
-
-              s1 %= 65521;
-              s2 %= 65521;
-            }
-
-            return s1 | (s2 << 16) | 0;
-          }
-
-          module.exports = adler32;
-        },
-        {},
-      ],
-      44: [
-        function (require, module, exports) {
-          "use strict";
-
-          // (C) 1995-2013 Jean-loup Gailly and Mark Adler
-          // (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
-          //
-          // This software is provided 'as-is', without any express or implied
-          // warranty. In no event will the authors be held liable for any damages
-          // arising from the use of this software.
-          //
-          // Permission is granted to anyone to use this software for any purpose,
-          // including commercial applications, and to alter it and redistribute it
-          // freely, subject to the following restrictions:
-          //
-          // 1. The origin of this software must not be misrepresented; you must not
-          //   claim that you wrote the original software. If you use this software
-          //   in a product, an acknowledgment in the product documentation would be
-          //   appreciated but is not required.
-          // 2. Altered source versions must be plainly marked as such, and must not be
-          //   misrepresented as being the original software.
-          // 3. This notice may not be removed or altered from any source distribution.
-
-          module.exports = {
-            /* Allowed flush values; see deflate() and inflate() below for details */
-            Z_NO_FLUSH: 0,
-            Z_PARTIAL_FLUSH: 1,
-            Z_SYNC_FLUSH: 2,
-            Z_FULL_FLUSH: 3,
-            Z_FINISH: 4,
-            Z_BLOCK: 5,
-            Z_TREES: 6,
-
-            /* Return codes for the compression/decompression functions. Negative values
-             * are errors, positive values are used for special but normal events.
-             */
-            Z_OK: 0,
-            Z_STREAM_END: 1,
-            Z_NEED_DICT: 2,
-            Z_ERRNO: -1,
-            Z_STREAM_ERROR: -2,
-            Z_DATA_ERROR: -3,
-            //Z_MEM_ERROR:     -4,
-            Z_BUF_ERROR: -5,
-            //Z_VERSION_ERROR: -6,
-
-            /* compression levels */
-            Z_NO_COMPRESSION: 0,
-            Z_BEST_SPEED: 1,
-            Z_BEST_COMPRESSION: 9,
-            Z_DEFAULT_COMPRESSION: -1,
-
-            Z_FILTERED: 1,
-            Z_HUFFMAN_ONLY: 2,
-            Z_RLE: 3,
-            Z_FIXED: 4,
-            Z_DEFAULT_STRATEGY: 0,
-
-            /* Possible values of the data_type field (though see inflate()) */
-            Z_BINARY: 0,
-            Z_TEXT: 1,
-            //Z_ASCII:                1, // = Z_TEXT (deprecated)
-            Z_UNKNOWN: 2,
-
-            /* The deflate compression method */
-            Z_DEFLATED: 8,
-            //Z_NULL:                 null // Use -1 or null inline, depending on var type
-          };
-        },
-        {},
-      ],
-      45: [
-        function (require, module, exports) {
-          "use strict";
-
-          // Note: we can't get significant speed boost here.
-          // So write code to minimize size - no pregenerated tables
-          // and array tools dependencies.
-
-          // (C) 1995-2013 Jean-loup Gailly and Mark Adler
-          // (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
-          //
-          // This software is provided 'as-is', without any express or implied
-          // warranty. In no event will the authors be held liable for any damages
-          // arising from the use of this software.
-          //
-          // Permission is granted to anyone to use this software for any purpose,
-          // including commercial applications, and to alter it and redistribute it
-          // freely, subject to the following restrictions:
-          //
-          // 1. The origin of this software must not be misrepresented; you must not
-          //   claim that you wrote the original software. If you use this software
-          //   in a product, an acknowledgment in the product documentation would be
-          //   appreciated but is not required.
-          // 2. Altered source versions must be plainly marked as such, and must not be
-          //   misrepresented as being the original software.
-          // 3. This notice may not be removed or altered from any source distribution.
-
-          // Use ordinary array, since untyped makes no boost here
-          function makeTable() {
-            var c,
-              table = [];
-
-            for (var n = 0; n < 256; n++) {
-              c = n;
-              for (var k = 0; k < 8; k++) {
-                c = c & 1 ? 0xedb88320 ^ (c >>> 1) : c >>> 1;
-              }
-              table[n] = c;
-            }
-
-            return table;
-          }
-
-          // Create table on load. Just 255 signed longs. Not a problem.
-          var crcTable = makeTable();
-
-          function crc32(crc, buf, len, pos) {
-            var t = crcTable,
-              end = pos + len;
-
-            crc ^= -1;
-
-            for (var i = pos; i < end; i++) {
-              crc = (crc >>> 8) ^ t[(crc ^ buf[i]) & 0xff];
-            }
-
-            return crc ^ -1; // >>> 0;
-          }
-
-          module.exports = crc32;
-        },
-        {},
-      ],
-      46: [
-        function (require, module, exports) {
-          "use strict";
-
-          // (C) 1995-2013 Jean-loup Gailly and Mark Adler
-          // (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
-          //
-          // This software is provided 'as-is', without any express or implied
-          // warranty. In no event will the authors be held liable for any damages
-          // arising from the use of this software.
-          //
-          // Permission is granted to anyone to use this software for any purpose,
-          // including commercial applications, and to alter it and redistribute it
-          // freely, subject to the following restrictions:
-          //
-          // 1. The origin of this software must not be misrepresented; you must not
-          //   claim that you wrote the original software. If you use this software
-          //   in a product, an acknowledgment in the product documentation would be
-          //   appreciated but is not required.
-          // 2. Altered source versions must be plainly marked as such, and must not be
-          //   misrepresented as being the original software.
-          // 3. This notice may not be removed or altered from any source distribution.
-
-          var utils = require("../utils/common");
-          var trees = require("./trees");
-          var adler32 = require("./adler32");
-          var crc32 = require("./crc32");
-          var msg = require("./messages");
-
-          /* Public constants ==========================================================*/
-          /* ===========================================================================*/
-
-          /* Allowed flush values; see deflate() and inflate() below for details */
-          var Z_NO_FLUSH = 0;
-          var Z_PARTIAL_FLUSH = 1;
-          //var Z_SYNC_FLUSH    = 2;
-          var Z_FULL_FLUSH = 3;
-          var Z_FINISH = 4;
-          var Z_BLOCK = 5;
-          //var Z_TREES         = 6;
-
-          /* Return codes for the compression/decompression functions. Negative values
-           * are errors, positive values are used for special but normal events.
-           */
-          var Z_OK = 0;
-          var Z_STREAM_END = 1;
-          //var Z_NEED_DICT     = 2;
-          //var Z_ERRNO         = -1;
-          var Z_STREAM_ERROR = -2;
-          var Z_DATA_ERROR = -3;
-          //var Z_MEM_ERROR     = -4;
-          var Z_BUF_ERROR = -5;
-          //var Z_VERSION_ERROR = -6;
-
-          /* compression levels */
-          //var Z_NO_COMPRESSION      = 0;
-          //var Z_BEST_SPEED          = 1;
-          //var Z_BEST_COMPRESSION    = 9;
-          var Z_DEFAULT_COMPRESSION = -1;
-
-          var Z_FILTERED = 1;
-          var Z_HUFFMAN_ONLY = 2;
-          var Z_RLE = 3;
-          var Z_FIXED = 4;
-          var Z_DEFAULT_STRATEGY = 0;
-
-          /* Possible values of the data_type field (though see inflate()) */
-          //var Z_BINARY              = 0;
-          //var Z_TEXT                = 1;
-          //var Z_ASCII               = 1; // = Z_TEXT
-          var Z_UNKNOWN = 2;
-
-          /* The deflate compression method */
-          var Z_DEFLATED = 8;
-
-          /*============================================================================*/
-
-          var MAX_MEM_LEVEL = 9;
-          /* Maximum value for memLevel in deflateInit2 */
-          var MAX_WBITS = 15;
-          /* 32K LZ77 window */
-          var DEF_MEM_LEVEL = 8;
-
-          var LENGTH_CODES = 29;
-          /* number of length codes, not counting the special END_BLOCK code */
-          var LITERALS = 256;
-          /* number of literal bytes 0..255 */
-          var L_CODES = LITERALS + 1 + LENGTH_CODES;
-          /* number of Literal or Length codes, including the END_BLOCK code */
-          var D_CODES = 30;
-          /* number of distance codes */
-          var BL_CODES = 19;
-          /* number of codes used to transfer the bit lengths */
-          var HEAP_SIZE = 2 * L_CODES + 1;
-          /* maximum heap size */
-          var MAX_BITS = 15;
-          /* All codes must not exceed MAX_BITS bits */
-
-          var MIN_MATCH = 3;
-          var MAX_MATCH = 258;
-          var MIN_LOOKAHEAD = MAX_MATCH + MIN_MATCH + 1;
-
-          var PRESET_DICT = 0x20;
-
-          var INIT_STATE = 42;
-          var EXTRA_STATE = 69;
-          var NAME_STATE = 73;
-          var COMMENT_STATE = 91;
-          var HCRC_STATE = 103;
-          var BUSY_STATE = 113;
-          var FINISH_STATE = 666;
-
-          var BS_NEED_MORE = 1; /* block not completed, need more input or more output */
-          var BS_BLOCK_DONE = 2; /* block flush performed */
-          var BS_FINISH_STARTED = 3; /* finish started, need only more output at next deflate */
-          var BS_FINISH_DONE = 4; /* finish done, accept no more input or output */
-
-          var OS_CODE = 0x03; // Unix :) . Don't detect, use this default.
-
-          function err(strm, errorCode) {
-            strm.msg = msg[errorCode];
-            return errorCode;
-          }
-
-          function rank(f) {
-            return (f << 1) - (f > 4 ? 9 : 0);
-          }
-
-          function zero(buf) {
-            var len = buf.length;
-            while (--len >= 0) {
-              buf[len] = 0;
-            }
-          }
-
-          /* =========================================================================
-           * Flush as much pending output as possible. All deflate() output goes
-           * through this function so some applications may wish to modify it
-           * to avoid allocating a large strm->output buffer and copying into it.
-           * (See also read_buf()).
-           */
-          function flush_pending(strm) {
-            var s = strm.state;
-
-            //_tr_flush_bits(s);
-            var len = s.pending;
-            if (len > strm.avail_out) {
-              len = strm.avail_out;
-            }
-            if (len === 0) {
-              return;
-            }
-
-            utils.arraySet(
-              strm.output,
-              s.pending_buf,
-              s.pending_out,
-              len,
-              strm.next_out,
-            );
-            strm.next_out += len;
-            s.pending_out += len;
-            strm.total_out += len;
-            strm.avail_out -= len;
-            s.pending -= len;
-            if (s.pending === 0) {
-              s.pending_out = 0;
-            }
-          }
-
-          function flush_block_only(s, last) {
-            trees._tr_flush_block(
-              s,
-              s.block_start >= 0 ? s.block_start : -1,
-              s.strstart - s.block_start,
-              last,
-            );
-            s.block_start = s.strstart;
-            flush_pending(s.strm);
-          }
-
-          function put_byte(s, b) {
-            s.pending_buf[s.pending++] = b;
-          }
-
-          /* =========================================================================
-           * Put a short in the pending buffer. The 16-bit value is put in MSB order.
-           * IN assertion: the stream state is correct and there is enough room in
-           * pending_buf.
-           */
-          function putShortMSB(s, b) {
-            //  put_byte(s, (Byte)(b >> 8));
-            //  put_byte(s, (Byte)(b & 0xff));
-            s.pending_buf[s.pending++] = (b >>> 8) & 0xff;
-            s.pending_buf[s.pending++] = b & 0xff;
-          }
-
-          /* ===========================================================================
-           * Read a new buffer from the current input stream, update the adler32
-           * and total number of bytes read.  All deflate() input goes through
-           * this function so some applications may wish to modify it to avoid
-           * allocating a large strm->input buffer and copying from it.
-           * (See also flush_pending()).
-           */
-          function read_buf(strm, buf, start, size) {
-            var len = strm.avail_in;
-
-            if (len > size) {
-              len = size;
-            }
-            if (len === 0) {
-              return 0;
-            }
-
-            strm.avail_in -= len;
-
-            // zmemcpy(buf, strm->next_in, len);
-            utils.arraySet(buf, strm.input, strm.next_in, len, start);
-            if (strm.state.wrap === 1) {
-              strm.adler = adler32(strm.adler, buf, len, start);
-            } else if (strm.state.wrap === 2) {
-              strm.adler = crc32(strm.adler, buf, len, start);
-            }
-
-            strm.next_in += len;
-            strm.total_in += len;
-
-            return len;
-          }
-
-          /* ===========================================================================
-           * Set match_start to the longest match starting at the given string and
-           * return its length. Matches shorter or equal to prev_length are discarded,
-           * in which case the result is equal to prev_length and match_start is
-           * garbage.
-           * IN assertions: cur_match is the head of the hash chain for the current
-           *   string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1
-           * OUT assertion: the match length is not greater than s->lookahead.
-           */
-          function longest_match(s, cur_match) {
-            var chain_length = s.max_chain_length; /* max hash chain length */
-            var scan = s.strstart; /* current string */
-            var match; /* matched string */
-            var len; /* length of current match */
-            var best_len = s.prev_length; /* best match length so far */
-            var nice_match = s.nice_match; /* stop if match long enough */
-            var limit =
-              s.strstart > s.w_size - MIN_LOOKAHEAD
-                ? s.strstart - (s.w_size - MIN_LOOKAHEAD)
-                : 0; /*NIL*/
-
-            var _win = s.window; // shortcut
-
-            var wmask = s.w_mask;
-            var prev = s.prev;
-
-            /* Stop when cur_match becomes <= limit. To simplify the code,
-             * we prevent matches with the string of window index 0.
-             */
-
-            var strend = s.strstart + MAX_MATCH;
-            var scan_end1 = _win[scan + best_len - 1];
-            var scan_end = _win[scan + best_len];
-
-            /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16.
-             * It is easy to get rid of this optimization if necessary.
-             */
-            // Assert(s->hash_bits >= 8 && MAX_MATCH == 258, "Code too clever");
-
-            /* Do not waste too much time if we already have a good match: */
-            if (s.prev_length >= s.good_match) {
-              chain_length >>= 2;
-            }
-            /* Do not look for matches beyond the end of the input. This is necessary
-             * to make deflate deterministic.
-             */
-            if (nice_match > s.lookahead) {
-              nice_match = s.lookahead;
-            }
-
-            // Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, "need lookahead");
-
-            do {
-              // Assert(cur_match < s->strstart, "no future");
-              match = cur_match;
-
-              /* Skip to next match if the match length cannot increase
-               * or if the match length is less than 2.  Note that the checks below
-               * for insufficient lookahead only occur occasionally for performance
-               * reasons.  Therefore uninitialized memory will be accessed, and
-               * conditional jumps will be made that depend on those values.
-               * However the length of the match is limited to the lookahead, so
-               * the output of deflate is not affected by the uninitialized values.
-               */
-
-              if (
-                _win[match + best_len] !== scan_end ||
-                _win[match + best_len - 1] !== scan_end1 ||
-                _win[match] !== _win[scan] ||
-                _win[++match] !== _win[scan + 1]
-              ) {
-                continue;
-              }
-
-              /* The check at best_len-1 can be removed because it will be made
-               * again later. (This heuristic is not always a win.)
-               * It is not necessary to compare scan[2] and match[2] since they
-               * are always equal when the other bytes match, given that
-               * the hash keys are equal and that HASH_BITS >= 8.
-               */
-              scan += 2;
-              match++;
-              // Assert(*scan == *match, "match[2]?");
-
-              /* We check for insufficient lookahead only every 8th comparison;
-               * the 256th check will be made at strstart+258.
-               */
-              do {
-                /*jshint noempty:false*/
-              } while (
-                _win[++scan] === _win[++match] &&
-                _win[++scan] === _win[++match] &&
-                _win[++scan] === _win[++match] &&
-                _win[++scan] === _win[++match] &&
-                _win[++scan] === _win[++match] &&
-                _win[++scan] === _win[++match] &&
-                _win[++scan] === _win[++match] &&
-                _win[++scan] === _win[++match] &&
-                scan < strend
-              );
-
-              // Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan");
-
-              len = MAX_MATCH - (strend - scan);
-              scan = strend - MAX_MATCH;
-
-              if (len > best_len) {
-                s.match_start = cur_match;
-                best_len = len;
-                if (len >= nice_match) {
-                  break;
-                }
-                scan_end1 = _win[scan + best_len - 1];
-                scan_end = _win[scan + best_len];
-              }
-            } while (
-              (cur_match = prev[cur_match & wmask]) > limit &&
-              --chain_length !== 0
-            );
-
-            if (best_len <= s.lookahead) {
-              return best_len;
-            }
-            return s.lookahead;
-          }
-
-          /* ===========================================================================
-           * Fill the window when the lookahead becomes insufficient.
-           * Updates strstart and lookahead.
-           *
-           * IN assertion: lookahead < MIN_LOOKAHEAD
-           * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD
-           *    At least one byte has been read, or avail_in == 0; reads are
-           *    performed for at least two bytes (required for the zip translate_eol
-           *    option -- not supported here).
-           */
-          function fill_window(s) {
-            var _w_size = s.w_size;
-            var p, n, m, more, str;
-
-            //Assert(s->lookahead < MIN_LOOKAHEAD, "already enough lookahead");
-
-            do {
-              more = s.window_size - s.lookahead - s.strstart;
-
-              // JS ints have 32 bit, block below not needed
-              /* Deal with !@#$% 64K limit: */
-              //if (sizeof(int) <= 2) {
-              //    if (more == 0 && s->strstart == 0 && s->lookahead == 0) {
-              //        more = wsize;
-              //
-              //  } else if (more == (unsigned)(-1)) {
-              //        /* Very unlikely, but possible on 16 bit machine if
-              //         * strstart == 0 && lookahead == 1 (input done a byte at time)
-              //         */
-              //        more--;
-              //    }
-              //}
-
-              /* If the window is almost full and there is insufficient lookahead,
-               * move the upper half to the lower one to make room in the upper half.
-               */
-              if (s.strstart >= _w_size + (_w_size - MIN_LOOKAHEAD)) {
-                utils.arraySet(s.window, s.window, _w_size, _w_size, 0);
-                s.match_start -= _w_size;
-                s.strstart -= _w_size;
-                /* we now have strstart >= MAX_DIST */
-                s.block_start -= _w_size;
-
-                /* Slide the hash table (could be avoided with 32 bit values
-       at the expense of memory usage). We slide even when level == 0
-       to keep the hash table consistent if we switch back to level > 0
-       later. (Using level 0 permanently is not an optimal usage of
-       zlib, so we don't care about this pathological case.)
-       */
-
-                n = s.hash_size;
-                p = n;
-                do {
-                  m = s.head[--p];
-                  s.head[p] = m >= _w_size ? m - _w_size : 0;
-                } while (--n);
-
-                n = _w_size;
-                p = n;
-                do {
-                  m = s.prev[--p];
-                  s.prev[p] = m >= _w_size ? m - _w_size : 0;
-                  /* If n is not on any hash chain, prev[n] is garbage but
-                   * its value will never be used.
-                   */
-                } while (--n);
-
-                more += _w_size;
-              }
-              if (s.strm.avail_in === 0) {
-                break;
-              }
-
-              /* If there was no sliding:
-               *    strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 &&
-               *    more == window_size - lookahead - strstart
-               * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1)
-               * => more >= window_size - 2*WSIZE + 2
-               * In the BIG_MEM or MMAP case (not yet supported),
-               *   window_size == input_size + MIN_LOOKAHEAD  &&
-               *   strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD.
-               * Otherwise, window_size == 2*WSIZE so more >= 2.
-               * If there was sliding, more >= WSIZE. So in all cases, more >= 2.
-               */
-              //Assert(more >= 2, "more < 2");
-              n = read_buf(s.strm, s.window, s.strstart + s.lookahead, more);
-              s.lookahead += n;
-
-              /* Initialize the hash value now that we have some input: */
-              if (s.lookahead + s.insert >= MIN_MATCH) {
-                str = s.strstart - s.insert;
-                s.ins_h = s.window[str];
-
-                /* UPDATE_HASH(s, s->ins_h, s->window[str + 1]); */
-                s.ins_h =
-                  ((s.ins_h << s.hash_shift) ^ s.window[str + 1]) & s.hash_mask;
-                //#if MIN_MATCH != 3
-                //        Call update_hash() MIN_MATCH-3 more times
-                //#endif
-                while (s.insert) {
-                  /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */
-                  s.ins_h =
-                    ((s.ins_h << s.hash_shift) ^
-                      s.window[str + MIN_MATCH - 1]) &
-                    s.hash_mask;
-
-                  s.prev[str & s.w_mask] = s.head[s.ins_h];
-                  s.head[s.ins_h] = str;
-                  str++;
-                  s.insert--;
-                  if (s.lookahead + s.insert < MIN_MATCH) {
-                    break;
-                  }
-                }
-              }
-              /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage,
-               * but this is not important since only literal bytes will be emitted.
-               */
-            } while (s.lookahead < MIN_LOOKAHEAD && s.strm.avail_in !== 0);
-
-            /* If the WIN_INIT bytes after the end of the current data have never been
-             * written, then zero those bytes in order to avoid memory check reports of
-             * the use of uninitialized (or uninitialised as Julian writes) bytes by
-             * the longest match routines.  Update the high water mark for the next
-             * time through here.  WIN_INIT is set to MAX_MATCH since the longest match
-             * routines allow scanning to strstart + MAX_MATCH, ignoring lookahead.
-             */
-            //  if (s.high_water < s.window_size) {
-            //    var curr = s.strstart + s.lookahead;
-            //    var init = 0;
-            //
-            //    if (s.high_water < curr) {
-            //      /* Previous high water mark below current data -- zero WIN_INIT
-            //       * bytes or up to end of window, whichever is less.
-            //       */
-            //      init = s.window_size - curr;
-            //      if (init > WIN_INIT)
-            //        init = WIN_INIT;
-            //      zmemzero(s->window + curr, (unsigned)init);
-            //      s->high_water = curr + init;
-            //    }
-            //    else if (s->high_water < (ulg)curr + WIN_INIT) {
-            //      /* High water mark at or above current data, but below current data
-            //       * plus WIN_INIT -- zero out to current data plus WIN_INIT, or up
-            //       * to end of window, whichever is less.
-            //       */
-            //      init = (ulg)curr + WIN_INIT - s->high_water;
-            //      if (init > s->window_size - s->high_water)
-            //        init = s->window_size - s->high_water;
-            //      zmemzero(s->window + s->high_water, (unsigned)init);
-            //      s->high_water += init;
-            //    }
-            //  }
-            //
-            //  Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD,
-            //    "not enough room for search");
-          }
-
-          /* ===========================================================================
-           * Copy without compression as much as possible from the input stream, return
-           * the current block state.
-           * This function does not insert new strings in the dictionary since
-           * uncompressible data is probably not useful. This function is used
-           * only for the level=0 compression option.
-           * NOTE: this function should be optimized to avoid extra copying from
-           * window to pending_buf.
-           */
-          function deflate_stored(s, flush) {
-            /* Stored blocks are limited to 0xffff bytes, pending_buf is limited
-             * to pending_buf_size, and each stored block has a 5 byte header:
-             */
-            var max_block_size = 0xffff;
-
-            if (max_block_size > s.pending_buf_size - 5) {
-              max_block_size = s.pending_buf_size - 5;
-            }
-
-            /* Copy as much as possible from input to output: */
-            for (;;) {
-              /* Fill the window as much as possible: */
-              if (s.lookahead <= 1) {
-                //Assert(s->strstart < s->w_size+MAX_DIST(s) ||
-                //  s->block_start >= (long)s->w_size, "slide too late");
-                //      if (!(s.strstart < s.w_size + (s.w_size - MIN_LOOKAHEAD) ||
-                //        s.block_start >= s.w_size)) {
-                //        throw  new Error("slide too late");
-                //      }
-
-                fill_window(s);
-                if (s.lookahead === 0 && flush === Z_NO_FLUSH) {
-                  return BS_NEED_MORE;
-                }
-
-                if (s.lookahead === 0) {
-                  break;
-                }
-                /* flush the current block */
-              }
-              //Assert(s->block_start >= 0L, "block gone");
-              //    if (s.block_start < 0) throw new Error("block gone");
-
-              s.strstart += s.lookahead;
-              s.lookahead = 0;
-
-              /* Emit a stored block if pending_buf will be full: */
-              var max_start = s.block_start + max_block_size;
-
-              if (s.strstart === 0 || s.strstart >= max_start) {
-                /* strstart == 0 is possible when wraparound on 16-bit machine */
-                s.lookahead = s.strstart - max_start;
-                s.strstart = max_start;
-                /*** FLUSH_BLOCK(s, 0); ***/
-                flush_block_only(s, false);
-                if (s.strm.avail_out === 0) {
-                  return BS_NEED_MORE;
-                }
-                /***/
-              }
-              /* Flush if we may have to slide, otherwise block_start may become
-               * negative and the data will be gone:
-               */
-              if (s.strstart - s.block_start >= s.w_size - MIN_LOOKAHEAD) {
-                /*** FLUSH_BLOCK(s, 0); ***/
-                flush_block_only(s, false);
-                if (s.strm.avail_out === 0) {
-                  return BS_NEED_MORE;
-                }
-                /***/
-              }
-            }
-
-            s.insert = 0;
-
-            if (flush === Z_FINISH) {
-              /*** FLUSH_BLOCK(s, 1); ***/
-              flush_block_only(s, true);
-              if (s.strm.avail_out === 0) {
-                return BS_FINISH_STARTED;
-              }
-              /***/
-              return BS_FINISH_DONE;
-            }
-
-            if (s.strstart > s.block_start) {
-              /*** FLUSH_BLOCK(s, 0); ***/
-              flush_block_only(s, false);
-              if (s.strm.avail_out === 0) {
-                return BS_NEED_MORE;
-              }
-              /***/
-            }
-
-            return BS_NEED_MORE;
-          }
-
-          /* ===========================================================================
-           * Compress as much as possible from the input stream, return the current
-           * block state.
-           * This function does not perform lazy evaluation of matches and inserts
-           * new strings in the dictionary only for unmatched strings or for short
-           * matches. It is used only for the fast compression options.
-           */
-          function deflate_fast(s, flush) {
-            var hash_head; /* head of the hash chain */
-            var bflush; /* set if current block must be flushed */
-
-            for (;;) {
-              /* Make sure that we always have enough lookahead, except
-               * at the end of the input file. We need MAX_MATCH bytes
-               * for the next match, plus MIN_MATCH bytes to insert the
-               * string following the next match.
-               */
-              if (s.lookahead < MIN_LOOKAHEAD) {
-                fill_window(s);
-                if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) {
-                  return BS_NEED_MORE;
-                }
-                if (s.lookahead === 0) {
-                  break; /* flush the current block */
-                }
-              }
-
-              /* Insert the string window[strstart .. strstart+2] in the
-               * dictionary, and set hash_head to the head of the hash chain:
-               */
-              hash_head = 0 /*NIL*/;
-              if (s.lookahead >= MIN_MATCH) {
-                /*** INSERT_STRING(s, s.strstart, hash_head); ***/
-                s.ins_h =
-                  ((s.ins_h << s.hash_shift) ^
-                    s.window[s.strstart + MIN_MATCH - 1]) &
-                  s.hash_mask;
-                hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];
-                s.head[s.ins_h] = s.strstart;
-                /***/
-              }
-
-              /* Find the longest match, discarding those <= prev_length.
-               * At this point we have always match_length < MIN_MATCH
-               */
-              if (
-                hash_head !== 0 /*NIL*/ &&
-                s.strstart - hash_head <= s.w_size - MIN_LOOKAHEAD
-              ) {
-                /* To simplify the code, we prevent matches with the string
-                 * of window index 0 (in particular we have to avoid a match
-                 * of the string with itself at the start of the input file).
-                 */
-                s.match_length = longest_match(s, hash_head);
-                /* longest_match() sets match_start */
-              }
-              if (s.match_length >= MIN_MATCH) {
-                // check_match(s, s.strstart, s.match_start, s.match_length); // for debug only
-
-                /*** _tr_tally_dist(s, s.strstart - s.match_start,
-                     s.match_length - MIN_MATCH, bflush); ***/
-                bflush = trees._tr_tally(
-                  s,
-                  s.strstart - s.match_start,
-                  s.match_length - MIN_MATCH,
-                );
-
-                s.lookahead -= s.match_length;
-
-                /* Insert new strings in the hash table only if the match length
-                 * is not too large. This saves time but degrades compression.
-                 */
-                if (
-                  s.match_length <= s.max_lazy_match /*max_insert_length*/ &&
-                  s.lookahead >= MIN_MATCH
-                ) {
-                  s.match_length--; /* string at strstart already in table */
-                  do {
-                    s.strstart++;
-                    /*** INSERT_STRING(s, s.strstart, hash_head); ***/
-                    s.ins_h =
-                      ((s.ins_h << s.hash_shift) ^
-                        s.window[s.strstart + MIN_MATCH - 1]) &
-                      s.hash_mask;
-                    hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];
-                    s.head[s.ins_h] = s.strstart;
-                    /***/
-                    /* strstart never exceeds WSIZE-MAX_MATCH, so there are
-                     * always MIN_MATCH bytes ahead.
-                     */
-                  } while (--s.match_length !== 0);
-                  s.strstart++;
-                } else {
-                  s.strstart += s.match_length;
-                  s.match_length = 0;
-                  s.ins_h = s.window[s.strstart];
-                  /* UPDATE_HASH(s, s.ins_h, s.window[s.strstart+1]); */
-                  s.ins_h =
-                    ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + 1]) &
-                    s.hash_mask;
-
-                  //#if MIN_MATCH != 3
-                  //                Call UPDATE_HASH() MIN_MATCH-3 more times
-                  //#endif
-                  /* If lookahead < MIN_MATCH, ins_h is garbage, but it does not
-                   * matter since it will be recomputed at next deflate call.
-                   */
-                }
-              } else {
-                /* No match, output a literal byte */
-                //Tracevv((stderr,"%c", s.window[s.strstart]));
-                /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/
-                bflush = trees._tr_tally(s, 0, s.window[s.strstart]);
-
-                s.lookahead--;
-                s.strstart++;
-              }
-              if (bflush) {
-                /*** FLUSH_BLOCK(s, 0); ***/
-                flush_block_only(s, false);
-                if (s.strm.avail_out === 0) {
-                  return BS_NEED_MORE;
-                }
-                /***/
-              }
-            }
-            s.insert = s.strstart < MIN_MATCH - 1 ? s.strstart : MIN_MATCH - 1;
-            if (flush === Z_FINISH) {
-              /*** FLUSH_BLOCK(s, 1); ***/
-              flush_block_only(s, true);
-              if (s.strm.avail_out === 0) {
-                return BS_FINISH_STARTED;
-              }
-              /***/
-              return BS_FINISH_DONE;
-            }
-            if (s.last_lit) {
-              /*** FLUSH_BLOCK(s, 0); ***/
-              flush_block_only(s, false);
-              if (s.strm.avail_out === 0) {
-                return BS_NEED_MORE;
-              }
-              /***/
-            }
-            return BS_BLOCK_DONE;
-          }
-
-          /* ===========================================================================
-           * Same as above, but achieves better compression. We use a lazy
-           * evaluation for matches: a match is finally adopted only if there is
-           * no better match at the next window position.
-           */
-          function deflate_slow(s, flush) {
-            var hash_head; /* head of hash chain */
-            var bflush; /* set if current block must be flushed */
-
-            var max_insert;
-
-            /* Process the input block. */
-            for (;;) {
-              /* Make sure that we always have enough lookahead, except
-               * at the end of the input file. We need MAX_MATCH bytes
-               * for the next match, plus MIN_MATCH bytes to insert the
-               * string following the next match.
-               */
-              if (s.lookahead < MIN_LOOKAHEAD) {
-                fill_window(s);
-                if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) {
-                  return BS_NEED_MORE;
-                }
-                if (s.lookahead === 0) {
-                  break;
-                } /* flush the current block */
-              }
-
-              /* Insert the string window[strstart .. strstart+2] in the
-               * dictionary, and set hash_head to the head of the hash chain:
-               */
-              hash_head = 0 /*NIL*/;
-              if (s.lookahead >= MIN_MATCH) {
-                /*** INSERT_STRING(s, s.strstart, hash_head); ***/
-                s.ins_h =
-                  ((s.ins_h << s.hash_shift) ^
-                    s.window[s.strstart + MIN_MATCH - 1]) &
-                  s.hash_mask;
-                hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];
-                s.head[s.ins_h] = s.strstart;
-                /***/
-              }
-
-              /* Find the longest match, discarding those <= prev_length.
-               */
-              s.prev_length = s.match_length;
-              s.prev_match = s.match_start;
-              s.match_length = MIN_MATCH - 1;
-
-              if (
-                hash_head !== 0 /*NIL*/ &&
-                s.prev_length < s.max_lazy_match &&
-                s.strstart - hash_head <=
-                  s.w_size - MIN_LOOKAHEAD /*MAX_DIST(s)*/
-              ) {
-                /* To simplify the code, we prevent matches with the string
-                 * of window index 0 (in particular we have to avoid a match
-                 * of the string with itself at the start of the input file).
-                 */
-                s.match_length = longest_match(s, hash_head);
-                /* longest_match() sets match_start */
-
-                if (
-                  s.match_length <= 5 &&
-                  (s.strategy === Z_FILTERED ||
-                    (s.match_length === MIN_MATCH &&
-                      s.strstart - s.match_start > 4096)) /*TOO_FAR*/
-                ) {
-                  /* If prev_match is also MIN_MATCH, match_start is garbage
-                   * but we will ignore the current match anyway.
-                   */
-                  s.match_length = MIN_MATCH - 1;
-                }
-              }
-              /* If there was a match at the previous step and the current
-               * match is not better, output the previous match:
-               */
-              if (
-                s.prev_length >= MIN_MATCH &&
-                s.match_length <= s.prev_length
-              ) {
-                max_insert = s.strstart + s.lookahead - MIN_MATCH;
-                /* Do not insert strings in hash table beyond this. */
-
-                //check_match(s, s.strstart-1, s.prev_match, s.prev_length);
-
-                /***_tr_tally_dist(s, s.strstart - 1 - s.prev_match,
-                     s.prev_length - MIN_MATCH, bflush);***/
-                bflush = trees._tr_tally(
-                  s,
-                  s.strstart - 1 - s.prev_match,
-                  s.prev_length - MIN_MATCH,
-                );
-                /* Insert in hash table all strings up to the end of the match.
-                 * strstart-1 and strstart are already inserted. If there is not
-                 * enough lookahead, the last two strings are not inserted in
-                 * the hash table.
-                 */
-                s.lookahead -= s.prev_length - 1;
-                s.prev_length -= 2;
-                do {
-                  if (++s.strstart <= max_insert) {
-                    /*** INSERT_STRING(s, s.strstart, hash_head); ***/
-                    s.ins_h =
-                      ((s.ins_h << s.hash_shift) ^
-                        s.window[s.strstart + MIN_MATCH - 1]) &
-                      s.hash_mask;
-                    hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];
-                    s.head[s.ins_h] = s.strstart;
-                    /***/
-                  }
-                } while (--s.prev_length !== 0);
-                s.match_available = 0;
-                s.match_length = MIN_MATCH - 1;
-                s.strstart++;
-
-                if (bflush) {
-                  /*** FLUSH_BLOCK(s, 0); ***/
-                  flush_block_only(s, false);
-                  if (s.strm.avail_out === 0) {
-                    return BS_NEED_MORE;
-                  }
-                  /***/
-                }
-              } else if (s.match_available) {
-                /* If there was no match at the previous position, output a
-                 * single literal. If there was a match but the current match
-                 * is longer, truncate the previous match to a single literal.
-                 */
-                //Tracevv((stderr,"%c", s->window[s->strstart-1]));
-                /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/
-                bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]);
-
-                if (bflush) {
-                  /*** FLUSH_BLOCK_ONLY(s, 0) ***/
-                  flush_block_only(s, false);
-                  /***/
-                }
-                s.strstart++;
-                s.lookahead--;
-                if (s.strm.avail_out === 0) {
-                  return BS_NEED_MORE;
-                }
-              } else {
-                /* There is no previous match to compare with, wait for
-                 * the next step to decide.
-                 */
-                s.match_available = 1;
-                s.strstart++;
-                s.lookahead--;
-              }
-            }
-            //Assert (flush != Z_NO_FLUSH, "no flush?");
-            if (s.match_available) {
-              //Tracevv((stderr,"%c", s->window[s->strstart-1]));
-              /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/
-              bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]);
-
-              s.match_available = 0;
-            }
-            s.insert = s.strstart < MIN_MATCH - 1 ? s.strstart : MIN_MATCH - 1;
-            if (flush === Z_FINISH) {
-              /*** FLUSH_BLOCK(s, 1); ***/
-              flush_block_only(s, true);
-              if (s.strm.avail_out === 0) {
-                return BS_FINISH_STARTED;
-              }
-              /***/
-              return BS_FINISH_DONE;
-            }
-            if (s.last_lit) {
-              /*** FLUSH_BLOCK(s, 0); ***/
-              flush_block_only(s, false);
-              if (s.strm.avail_out === 0) {
-                return BS_NEED_MORE;
-              }
-              /***/
-            }
-
-            return BS_BLOCK_DONE;
-          }
-
-          /* ===========================================================================
-           * For Z_RLE, simply look for runs of bytes, generate matches only of distance
-           * one.  Do not maintain a hash table.  (It will be regenerated if this run of
-           * deflate switches away from Z_RLE.)
-           */
-          function deflate_rle(s, flush) {
-            var bflush; /* set if current block must be flushed */
-            var prev; /* byte at distance one to match */
-            var scan, strend; /* scan goes up to strend for length of run */
-
-            var _win = s.window;
-
-            for (;;) {
-              /* Make sure that we always have enough lookahead, except
-               * at the end of the input file. We need MAX_MATCH bytes
-               * for the longest run, plus one for the unrolled loop.
-               */
-              if (s.lookahead <= MAX_MATCH) {
-                fill_window(s);
-                if (s.lookahead <= MAX_MATCH && flush === Z_NO_FLUSH) {
-                  return BS_NEED_MORE;
-                }
-                if (s.lookahead === 0) {
-                  break;
-                } /* flush the current block */
-              }
-
-              /* See how many times the previous byte repeats */
-              s.match_length = 0;
-              if (s.lookahead >= MIN_MATCH && s.strstart > 0) {
-                scan = s.strstart - 1;
-                prev = _win[scan];
-                if (
-                  prev === _win[++scan] &&
-                  prev === _win[++scan] &&
-                  prev === _win[++scan]
-                ) {
-                  strend = s.strstart + MAX_MATCH;
-                  do {
-                    /*jshint noempty:false*/
-                  } while (
-                    prev === _win[++scan] &&
-                    prev === _win[++scan] &&
-                    prev === _win[++scan] &&
-                    prev === _win[++scan] &&
-                    prev === _win[++scan] &&
-                    prev === _win[++scan] &&
-                    prev === _win[++scan] &&
-                    prev === _win[++scan] &&
-                    scan < strend
-                  );
-                  s.match_length = MAX_MATCH - (strend - scan);
-                  if (s.match_length > s.lookahead) {
-                    s.match_length = s.lookahead;
-                  }
-                }
-                //Assert(scan <= s->window+(uInt)(s->window_size-1), "wild scan");
-              }
-
-              /* Emit match if have run of MIN_MATCH or longer, else emit literal */
-              if (s.match_length >= MIN_MATCH) {
-                //check_match(s, s.strstart, s.strstart - 1, s.match_length);
-
-                /*** _tr_tally_dist(s, 1, s.match_length - MIN_MATCH, bflush); ***/
-                bflush = trees._tr_tally(s, 1, s.match_length - MIN_MATCH);
-
-                s.lookahead -= s.match_length;
-                s.strstart += s.match_length;
-                s.match_length = 0;
-              } else {
-                /* No match, output a literal byte */
-                //Tracevv((stderr,"%c", s->window[s->strstart]));
-                /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/
-                bflush = trees._tr_tally(s, 0, s.window[s.strstart]);
-
-                s.lookahead--;
-                s.strstart++;
-              }
-              if (bflush) {
-                /*** FLUSH_BLOCK(s, 0); ***/
-                flush_block_only(s, false);
-                if (s.strm.avail_out === 0) {
-                  return BS_NEED_MORE;
-                }
-                /***/
-              }
-            }
-            s.insert = 0;
-            if (flush === Z_FINISH) {
-              /*** FLUSH_BLOCK(s, 1); ***/
-              flush_block_only(s, true);
-              if (s.strm.avail_out === 0) {
-                return BS_FINISH_STARTED;
-              }
-              /***/
-              return BS_FINISH_DONE;
-            }
-            if (s.last_lit) {
-              /*** FLUSH_BLOCK(s, 0); ***/
-              flush_block_only(s, false);
-              if (s.strm.avail_out === 0) {
-                return BS_NEED_MORE;
-              }
-              /***/
-            }
-            return BS_BLOCK_DONE;
-          }
-
-          /* ===========================================================================
-           * For Z_HUFFMAN_ONLY, do not look for matches.  Do not maintain a hash table.
-           * (It will be regenerated if this run of deflate switches away from Huffman.)
-           */
-          function deflate_huff(s, flush) {
-            var bflush; /* set if current block must be flushed */
-
-            for (;;) {
-              /* Make sure that we have a literal to write. */
-              if (s.lookahead === 0) {
-                fill_window(s);
-                if (s.lookahead === 0) {
-                  if (flush === Z_NO_FLUSH) {
-                    return BS_NEED_MORE;
-                  }
-                  break; /* flush the current block */
-                }
-              }
-
-              /* Output a literal byte */
-              s.match_length = 0;
-              //Tracevv((stderr,"%c", s->window[s->strstart]));
-              /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/
-              bflush = trees._tr_tally(s, 0, s.window[s.strstart]);
-              s.lookahead--;
-              s.strstart++;
-              if (bflush) {
-                /*** FLUSH_BLOCK(s, 0); ***/
-                flush_block_only(s, false);
-                if (s.strm.avail_out === 0) {
-                  return BS_NEED_MORE;
-                }
-                /***/
-              }
-            }
-            s.insert = 0;
-            if (flush === Z_FINISH) {
-              /*** FLUSH_BLOCK(s, 1); ***/
-              flush_block_only(s, true);
-              if (s.strm.avail_out === 0) {
-                return BS_FINISH_STARTED;
-              }
-              /***/
-              return BS_FINISH_DONE;
-            }
-            if (s.last_lit) {
-              /*** FLUSH_BLOCK(s, 0); ***/
-              flush_block_only(s, false);
-              if (s.strm.avail_out === 0) {
-                return BS_NEED_MORE;
-              }
-              /***/
-            }
-            return BS_BLOCK_DONE;
-          }
-
-          /* Values for max_lazy_match, good_match and max_chain_length, depending on
-           * the desired pack level (0..9). The values given below have been tuned to
-           * exclude worst case performance for pathological files. Better values may be
-           * found for specific files.
-           */
-          function Config(good_length, max_lazy, nice_length, max_chain, func) {
-            this.good_length = good_length;
-            this.max_lazy = max_lazy;
-            this.nice_length = nice_length;
-            this.max_chain = max_chain;
-            this.func = func;
-          }
-
-          var configuration_table;
-
-          configuration_table = [
-            /*      good lazy nice chain */
-            new Config(0, 0, 0, 0, deflate_stored) /* 0 store only */,
-            new Config(
-              4,
-              4,
-              8,
-              4,
-              deflate_fast,
-            ) /* 1 max speed, no lazy matches */,
-            new Config(4, 5, 16, 8, deflate_fast) /* 2 */,
-            new Config(4, 6, 32, 32, deflate_fast) /* 3 */,
-
-            new Config(4, 4, 16, 16, deflate_slow) /* 4 lazy matches */,
-            new Config(8, 16, 32, 32, deflate_slow) /* 5 */,
-            new Config(8, 16, 128, 128, deflate_slow) /* 6 */,
-            new Config(8, 32, 128, 256, deflate_slow) /* 7 */,
-            new Config(32, 128, 258, 1024, deflate_slow) /* 8 */,
-            new Config(
-              32,
-              258,
-              258,
-              4096,
-              deflate_slow,
-            ) /* 9 max compression */,
-          ];
-
-          /* ===========================================================================
-           * Initialize the "longest match" routines for a new zlib stream
-           */
-          function lm_init(s) {
-            s.window_size = 2 * s.w_size;
-
-            /*** CLEAR_HASH(s); ***/
-            zero(s.head); // Fill with NIL (= 0);
-
-            /* Set the default configuration parameters:
-             */
-            s.max_lazy_match = configuration_table[s.level].max_lazy;
-            s.good_match = configuration_table[s.level].good_length;
-            s.nice_match = configuration_table[s.level].nice_length;
-            s.max_chain_length = configuration_table[s.level].max_chain;
-
-            s.strstart = 0;
-            s.block_start = 0;
-            s.lookahead = 0;
-            s.insert = 0;
-            s.match_length = s.prev_length = MIN_MATCH - 1;
-            s.match_available = 0;
-            s.ins_h = 0;
-          }
-
-          function DeflateState() {
-            this.strm = null; /* pointer back to this zlib stream */
-            this.status = 0; /* as the name implies */
-            this.pending_buf = null; /* output still pending */
-            this.pending_buf_size = 0; /* size of pending_buf */
-            this.pending_out = 0; /* next pending byte to output to the stream */
-            this.pending = 0; /* nb of bytes in the pending buffer */
-            this.wrap = 0; /* bit 0 true for zlib, bit 1 true for gzip */
-            this.gzhead = null; /* gzip header information to write */
-            this.gzindex = 0; /* where in extra, name, or comment */
-            this.method = Z_DEFLATED; /* can only be DEFLATED */
-            this.last_flush =
-              -1; /* value of flush param for previous deflate call */
-
-            this.w_size = 0; /* LZ77 window size (32K by default) */
-            this.w_bits = 0; /* log2(w_size)  (8..16) */
-            this.w_mask = 0; /* w_size - 1 */
-
-            this.window = null;
-            /* Sliding window. Input bytes are read into the second half of the window,
-             * and move to the first half later to keep a dictionary of at least wSize
-             * bytes. With this organization, matches are limited to a distance of
-             * wSize-MAX_MATCH bytes, but this ensures that IO is always
-             * performed with a length multiple of the block size.
-             */
-
-            this.window_size = 0;
-            /* Actual size of window: 2*wSize, except when the user input buffer
-             * is directly used as sliding window.
-             */
-
-            this.prev = null;
-            /* Link to older string with same hash index. To limit the size of this
-             * array to 64K, this link is maintained only for the last 32K strings.
-             * An index in this array is thus a window index modulo 32K.
-             */
-
-            this.head = null; /* Heads of the hash chains or NIL. */
-
-            this.ins_h = 0; /* hash index of string to be inserted */
-            this.hash_size = 0; /* number of elements in hash table */
-            this.hash_bits = 0; /* log2(hash_size) */
-            this.hash_mask = 0; /* hash_size-1 */
-
-            this.hash_shift = 0;
-            /* Number of bits by which ins_h must be shifted at each input
-             * step. It must be such that after MIN_MATCH steps, the oldest
-             * byte no longer takes part in the hash key, that is:
-             *   hash_shift * MIN_MATCH >= hash_bits
-             */
-
-            this.block_start = 0;
-            /* Window position at the beginning of the current output block. Gets
-             * negative when the window is moved backwards.
-             */
-
-            this.match_length = 0; /* length of best match */
-            this.prev_match = 0; /* previous match */
-            this.match_available = 0; /* set if previous match exists */
-            this.strstart = 0; /* start of string to insert */
-            this.match_start = 0; /* start of matching string */
-            this.lookahead = 0; /* number of valid bytes ahead in window */
-
-            this.prev_length = 0;
-            /* Length of the best match at previous step. Matches not greater than this
-             * are discarded. This is used in the lazy match evaluation.
-             */
-
-            this.max_chain_length = 0;
-            /* To speed up deflation, hash chains are never searched beyond this
-             * length.  A higher limit improves compression ratio but degrades the
-             * speed.
-             */
-
-            this.max_lazy_match = 0;
-            /* Attempt to find a better match only when the current match is strictly
-             * smaller than this value. This mechanism is used only for compression
-             * levels >= 4.
-             */
-            // That's alias to max_lazy_match, don't use directly
-            //this.max_insert_length = 0;
-            /* Insert new strings in the hash table only if the match length is not
-             * greater than this length. This saves time but degrades compression.
-             * max_insert_length is used only for compression levels <= 3.
-             */
-
-            this.level = 0; /* compression level (1..9) */
-            this.strategy = 0; /* favor or force Huffman coding*/
-
-            this.good_match = 0;
-            /* Use a faster search when the previous match is longer than this */
-
-            this.nice_match = 0; /* Stop searching when current match exceeds this */
-
-            /* used by trees.c: */
-
-            /* Didn't use ct_data typedef below to suppress compiler warning */
-
-            // struct ct_data_s dyn_ltree[HEAP_SIZE];   /* literal and length tree */
-            // struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */
-            // struct ct_data_s bl_tree[2*BL_CODES+1];  /* Huffman tree for bit lengths */
-
-            // Use flat array of DOUBLE size, with interleaved fata,
-            // because JS does not support effective
-            this.dyn_ltree = new utils.Buf16(HEAP_SIZE * 2);
-            this.dyn_dtree = new utils.Buf16((2 * D_CODES + 1) * 2);
-            this.bl_tree = new utils.Buf16((2 * BL_CODES + 1) * 2);
-            zero(this.dyn_ltree);
-            zero(this.dyn_dtree);
-            zero(this.bl_tree);
-
-            this.l_desc = null; /* desc. for literal tree */
-            this.d_desc = null; /* desc. for distance tree */
-            this.bl_desc = null; /* desc. for bit length tree */
-
-            //ush bl_count[MAX_BITS+1];
-            this.bl_count = new utils.Buf16(MAX_BITS + 1);
-            /* number of codes at each bit length for an optimal tree */
-
-            //int heap[2*L_CODES+1];      /* heap used to build the Huffman trees */
-            this.heap = new utils.Buf16(
-              2 * L_CODES + 1,
-            ); /* heap used to build the Huffman trees */
-            zero(this.heap);
-
-            this.heap_len = 0; /* number of elements in the heap */
-            this.heap_max = 0; /* element of largest frequency */
-            /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used.
-             * The same heap array is used to build all trees.
-             */
-
-            this.depth = new utils.Buf16(2 * L_CODES + 1); //uch depth[2*L_CODES+1];
-            zero(this.depth);
-            /* Depth of each subtree used as tie breaker for trees of equal frequency
-             */
-
-            this.l_buf = 0; /* buffer index for literals or lengths */
-
-            this.lit_bufsize = 0;
-            /* Size of match buffer for literals/lengths.  There are 4 reasons for
-             * limiting lit_bufsize to 64K:
-             *   - frequencies can be kept in 16 bit counters
-             *   - if compression is not successful for the first block, all input
-             *     data is still in the window so we can still emit a stored block even
-             *     when input comes from standard input.  (This can also be done for
-             *     all blocks if lit_bufsize is not greater than 32K.)
-             *   - if compression is not successful for a file smaller than 64K, we can
-             *     even emit a stored file instead of a stored block (saving 5 bytes).
-             *     This is applicable only for zip (not gzip or zlib).
-             *   - creating new Huffman trees less frequently may not provide fast
-             *     adaptation to changes in the input data statistics. (Take for
-             *     example a binary file with poorly compressible code followed by
-             *     a highly compressible string table.) Smaller buffer sizes give
-             *     fast adaptation but have of course the overhead of transmitting
-             *     trees more frequently.
-             *   - I can't count above 4
-             */
-
-            this.last_lit = 0; /* running index in l_buf */
-
-            this.d_buf = 0;
-            /* Buffer index for distances. To simplify the code, d_buf and l_buf have
-             * the same number of elements. To use different lengths, an extra flag
-             * array would be necessary.
-             */
-
-            this.opt_len = 0; /* bit length of current block with optimal trees */
-            this.static_len = 0; /* bit length of current block with static trees */
-            this.matches = 0; /* number of string matches in current block */
-            this.insert = 0; /* bytes at end of window left to insert */
-
-            this.bi_buf = 0;
-            /* Output buffer. bits are inserted starting at the bottom (least
-             * significant bits).
-             */
-            this.bi_valid = 0;
-            /* Number of valid bits in bi_buf.  All bits above the last valid bit
-             * are always zero.
-             */
-
-            // Used for window memory init. We safely ignore it for JS. That makes
-            // sense only for pointers and memory check tools.
-            //this.high_water = 0;
-            /* High water mark offset in window for initialized bytes -- bytes above
-             * this are set to zero in order to avoid memory check warnings when
-             * longest match routines access bytes past the input.  This is then
-             * updated to the new high water mark.
-             */
-          }
-
-          function deflateResetKeep(strm) {
-            var s;
-
-            if (!strm || !strm.state) {
-              return err(strm, Z_STREAM_ERROR);
-            }
-
-            strm.total_in = strm.total_out = 0;
-            strm.data_type = Z_UNKNOWN;
-
-            s = strm.state;
-            s.pending = 0;
-            s.pending_out = 0;
-
-            if (s.wrap < 0) {
-              s.wrap = -s.wrap;
-              /* was made negative by deflate(..., Z_FINISH); */
-            }
-            s.status = s.wrap ? INIT_STATE : BUSY_STATE;
-            strm.adler =
-              s.wrap === 2
-                ? 0 // crc32(0, Z_NULL, 0)
-                : 1; // adler32(0, Z_NULL, 0)
-            s.last_flush = Z_NO_FLUSH;
-            trees._tr_init(s);
-            return Z_OK;
-          }
-
-          function deflateReset(strm) {
-            var ret = deflateResetKeep(strm);
-            if (ret === Z_OK) {
-              lm_init(strm.state);
-            }
-            return ret;
-          }
-
-          function deflateSetHeader(strm, head) {
-            if (!strm || !strm.state) {
-              return Z_STREAM_ERROR;
-            }
-            if (strm.state.wrap !== 2) {
-              return Z_STREAM_ERROR;
-            }
-            strm.state.gzhead = head;
-            return Z_OK;
-          }
-
-          function deflateInit2(
-            strm,
-            level,
-            method,
-            windowBits,
-            memLevel,
-            strategy,
-          ) {
-            if (!strm) {
-              // === Z_NULL
-              return Z_STREAM_ERROR;
-            }
-            var wrap = 1;
-
-            if (level === Z_DEFAULT_COMPRESSION) {
-              level = 6;
-            }
-
-            if (windowBits < 0) {
-              /* suppress zlib wrapper */
-              wrap = 0;
-              windowBits = -windowBits;
-            } else if (windowBits > 15) {
-              wrap = 2; /* write gzip wrapper instead */
-              windowBits -= 16;
-            }
-
-            if (
-              memLevel < 1 ||
-              memLevel > MAX_MEM_LEVEL ||
-              method !== Z_DEFLATED ||
-              windowBits < 8 ||
-              windowBits > 15 ||
-              level < 0 ||
-              level > 9 ||
-              strategy < 0 ||
-              strategy > Z_FIXED
-            ) {
-              return err(strm, Z_STREAM_ERROR);
-            }
-
-            if (windowBits === 8) {
-              windowBits = 9;
-            }
-            /* until 256-byte window bug fixed */
-
-            var s = new DeflateState();
-
-            strm.state = s;
-            s.strm = strm;
-
-            s.wrap = wrap;
-            s.gzhead = null;
-            s.w_bits = windowBits;
-            s.w_size = 1 << s.w_bits;
-            s.w_mask = s.w_size - 1;
-
-            s.hash_bits = memLevel + 7;
-            s.hash_size = 1 << s.hash_bits;
-            s.hash_mask = s.hash_size - 1;
-            s.hash_shift = ~~((s.hash_bits + MIN_MATCH - 1) / MIN_MATCH);
-
-            s.window = new utils.Buf8(s.w_size * 2);
-            s.head = new utils.Buf16(s.hash_size);
-            s.prev = new utils.Buf16(s.w_size);
-
-            // Don't need mem init magic for JS.
-            //s.high_water = 0;  /* nothing written to s->window yet */
-
-            s.lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */
-
-            s.pending_buf_size = s.lit_bufsize * 4;
-
-            //overlay = (ushf *) ZALLOC(strm, s->lit_bufsize, sizeof(ush)+2);
-            //s->pending_buf = (uchf *) overlay;
-            s.pending_buf = new utils.Buf8(s.pending_buf_size);
-
-            // It is offset from `s.pending_buf` (size is `s.lit_bufsize * 2`)
-            //s->d_buf = overlay + s->lit_bufsize/sizeof(ush);
-            s.d_buf = 1 * s.lit_bufsize;
-
-            //s->l_buf = s->pending_buf + (1+sizeof(ush))*s->lit_bufsize;
-            s.l_buf = (1 + 2) * s.lit_bufsize;
-
-            s.level = level;
-            s.strategy = strategy;
-            s.method = method;
-
-            return deflateReset(strm);
-          }
-
-          function deflateInit(strm, level) {
-            return deflateInit2(
-              strm,
-              level,
-              Z_DEFLATED,
-              MAX_WBITS,
-              DEF_MEM_LEVEL,
-              Z_DEFAULT_STRATEGY,
-            );
-          }
-
-          function deflate(strm, flush) {
-            var old_flush, s;
-            var beg, val; // for gzip header write only
-
-            if (!strm || !strm.state || flush > Z_BLOCK || flush < 0) {
-              return strm ? err(strm, Z_STREAM_ERROR) : Z_STREAM_ERROR;
-            }
-
-            s = strm.state;
-
-            if (
-              !strm.output ||
-              (!strm.input && strm.avail_in !== 0) ||
-              (s.status === FINISH_STATE && flush !== Z_FINISH)
-            ) {
-              return err(
-                strm,
-                strm.avail_out === 0 ? Z_BUF_ERROR : Z_STREAM_ERROR,
-              );
-            }
-
-            s.strm = strm; /* just in case */
-            old_flush = s.last_flush;
-            s.last_flush = flush;
-
-            /* Write the header */
-            if (s.status === INIT_STATE) {
-              if (s.wrap === 2) {
-                // GZIP header
-                strm.adler = 0; //crc32(0L, Z_NULL, 0);
-                put_byte(s, 31);
-                put_byte(s, 139);
-                put_byte(s, 8);
-                if (!s.gzhead) {
-                  // s->gzhead == Z_NULL
-                  put_byte(s, 0);
-                  put_byte(s, 0);
-                  put_byte(s, 0);
-                  put_byte(s, 0);
-                  put_byte(s, 0);
-                  put_byte(
-                    s,
-                    s.level === 9
-                      ? 2
-                      : s.strategy >= Z_HUFFMAN_ONLY || s.level < 2
-                      ? 4
-                      : 0,
-                  );
-                  put_byte(s, OS_CODE);
-                  s.status = BUSY_STATE;
-                } else {
-                  put_byte(
-                    s,
-                    (s.gzhead.text ? 1 : 0) +
-                      (s.gzhead.hcrc ? 2 : 0) +
-                      (!s.gzhead.extra ? 0 : 4) +
-                      (!s.gzhead.name ? 0 : 8) +
-                      (!s.gzhead.comment ? 0 : 16),
-                  );
-                  put_byte(s, s.gzhead.time & 0xff);
-                  put_byte(s, (s.gzhead.time >> 8) & 0xff);
-                  put_byte(s, (s.gzhead.time >> 16) & 0xff);
-                  put_byte(s, (s.gzhead.time >> 24) & 0xff);
-                  put_byte(
-                    s,
-                    s.level === 9
-                      ? 2
-                      : s.strategy >= Z_HUFFMAN_ONLY || s.level < 2
-                      ? 4
-                      : 0,
-                  );
-                  put_byte(s, s.gzhead.os & 0xff);
-                  if (s.gzhead.extra && s.gzhead.extra.length) {
-                    put_byte(s, s.gzhead.extra.length & 0xff);
-                    put_byte(s, (s.gzhead.extra.length >> 8) & 0xff);
-                  }
-                  if (s.gzhead.hcrc) {
-                    strm.adler = crc32(strm.adler, s.pending_buf, s.pending, 0);
-                  }
-                  s.gzindex = 0;
-                  s.status = EXTRA_STATE;
-                }
-              } // DEFLATE header
-              else {
-                var header = (Z_DEFLATED + ((s.w_bits - 8) << 4)) << 8;
-                var level_flags = -1;
-
-                if (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2) {
-                  level_flags = 0;
-                } else if (s.level < 6) {
-                  level_flags = 1;
-                } else if (s.level === 6) {
-                  level_flags = 2;
-                } else {
-                  level_flags = 3;
-                }
-                header |= level_flags << 6;
-                if (s.strstart !== 0) {
-                  header |= PRESET_DICT;
-                }
-                header += 31 - (header % 31);
-
-                s.status = BUSY_STATE;
-                putShortMSB(s, header);
-
-                /* Save the adler32 of the preset dictionary: */
-                if (s.strstart !== 0) {
-                  putShortMSB(s, strm.adler >>> 16);
-                  putShortMSB(s, strm.adler & 0xffff);
-                }
-                strm.adler = 1; // adler32(0L, Z_NULL, 0);
-              }
-            }
-
-            //#ifdef GZIP
-            if (s.status === EXTRA_STATE) {
-              if (s.gzhead.extra /* != Z_NULL*/) {
-                beg = s.pending; /* start of bytes to update crc */
-
-                while (s.gzindex < (s.gzhead.extra.length & 0xffff)) {
-                  if (s.pending === s.pending_buf_size) {
-                    if (s.gzhead.hcrc && s.pending > beg) {
-                      strm.adler = crc32(
-                        strm.adler,
-                        s.pending_buf,
-                        s.pending - beg,
-                        beg,
-                      );
-                    }
-                    flush_pending(strm);
-                    beg = s.pending;
-                    if (s.pending === s.pending_buf_size) {
-                      break;
-                    }
-                  }
-                  put_byte(s, s.gzhead.extra[s.gzindex] & 0xff);
-                  s.gzindex++;
-                }
-                if (s.gzhead.hcrc && s.pending > beg) {
-                  strm.adler = crc32(
-                    strm.adler,
-                    s.pending_buf,
-                    s.pending - beg,
-                    beg,
-                  );
-                }
-                if (s.gzindex === s.gzhead.extra.length) {
-                  s.gzindex = 0;
-                  s.status = NAME_STATE;
-                }
-              } else {
-                s.status = NAME_STATE;
-              }
-            }
-            if (s.status === NAME_STATE) {
-              if (s.gzhead.name /* != Z_NULL*/) {
-                beg = s.pending; /* start of bytes to update crc */
-                //int val;
-
-                do {
-                  if (s.pending === s.pending_buf_size) {
-                    if (s.gzhead.hcrc && s.pending > beg) {
-                      strm.adler = crc32(
-                        strm.adler,
-                        s.pending_buf,
-                        s.pending - beg,
-                        beg,
-                      );
-                    }
-                    flush_pending(strm);
-                    beg = s.pending;
-                    if (s.pending === s.pending_buf_size) {
-                      val = 1;
-                      break;
-                    }
-                  }
-                  // JS specific: little magic to add zero terminator to end of string
-                  if (s.gzindex < s.gzhead.name.length) {
-                    val = s.gzhead.name.charCodeAt(s.gzindex++) & 0xff;
-                  } else {
-                    val = 0;
-                  }
-                  put_byte(s, val);
-                } while (val !== 0);
-
-                if (s.gzhead.hcrc && s.pending > beg) {
-                  strm.adler = crc32(
-                    strm.adler,
-                    s.pending_buf,
-                    s.pending - beg,
-                    beg,
-                  );
-                }
-                if (val === 0) {
-                  s.gzindex = 0;
-                  s.status = COMMENT_STATE;
-                }
-              } else {
-                s.status = COMMENT_STATE;
-              }
-            }
-            if (s.status === COMMENT_STATE) {
-              if (s.gzhead.comment /* != Z_NULL*/) {
-                beg = s.pending; /* start of bytes to update crc */
-                //int val;
-
-                do {
-                  if (s.pending === s.pending_buf_size) {
-                    if (s.gzhead.hcrc && s.pending > beg) {
-                      strm.adler = crc32(
-                        strm.adler,
-                        s.pending_buf,
-                        s.pending - beg,
-                        beg,
-                      );
-                    }
-                    flush_pending(strm);
-                    beg = s.pending;
-                    if (s.pending === s.pending_buf_size) {
-                      val = 1;
-                      break;
-                    }
-                  }
-                  // JS specific: little magic to add zero terminator to end of string
-                  if (s.gzindex < s.gzhead.comment.length) {
-                    val = s.gzhead.comment.charCodeAt(s.gzindex++) & 0xff;
-                  } else {
-                    val = 0;
-                  }
-                  put_byte(s, val);
-                } while (val !== 0);
-
-                if (s.gzhead.hcrc && s.pending > beg) {
-                  strm.adler = crc32(
-                    strm.adler,
-                    s.pending_buf,
-                    s.pending - beg,
-                    beg,
-                  );
-                }
-                if (val === 0) {
-                  s.status = HCRC_STATE;
-                }
-              } else {
-                s.status = HCRC_STATE;
-              }
-            }
-            if (s.status === HCRC_STATE) {
-              if (s.gzhead.hcrc) {
-                if (s.pending + 2 > s.pending_buf_size) {
-                  flush_pending(strm);
-                }
-                if (s.pending + 2 <= s.pending_buf_size) {
-                  put_byte(s, strm.adler & 0xff);
-                  put_byte(s, (strm.adler >> 8) & 0xff);
-                  strm.adler = 0; //crc32(0L, Z_NULL, 0);
-                  s.status = BUSY_STATE;
-                }
-              } else {
-                s.status = BUSY_STATE;
-              }
-            }
-            //#endif
-
-            /* Flush as much pending output as possible */
-            if (s.pending !== 0) {
-              flush_pending(strm);
-              if (strm.avail_out === 0) {
-                /* Since avail_out is 0, deflate will be called again with
-                 * more output space, but possibly with both pending and
-                 * avail_in equal to zero. There won't be anything to do,
-                 * but this is not an error situation so make sure we
-                 * return OK instead of BUF_ERROR at next call of deflate:
-                 */
-                s.last_flush = -1;
-                return Z_OK;
-              }
-
-              /* Make sure there is something to do and avoid duplicate consecutive
-               * flushes. For repeated and useless calls with Z_FINISH, we keep
-               * returning Z_STREAM_END instead of Z_BUF_ERROR.
-               */
-            } else if (
-              strm.avail_in === 0 &&
-              rank(flush) <= rank(old_flush) &&
-              flush !== Z_FINISH
-            ) {
-              return err(strm, Z_BUF_ERROR);
-            }
-
-            /* User must not provide more input after the first FINISH: */
-            if (s.status === FINISH_STATE && strm.avail_in !== 0) {
-              return err(strm, Z_BUF_ERROR);
-            }
-
-            /* Start a new block or continue the current one.
-             */
-            if (
-              strm.avail_in !== 0 ||
-              s.lookahead !== 0 ||
-              (flush !== Z_NO_FLUSH && s.status !== FINISH_STATE)
-            ) {
-              var bstate =
-                s.strategy === Z_HUFFMAN_ONLY
-                  ? deflate_huff(s, flush)
-                  : s.strategy === Z_RLE
-                  ? deflate_rle(s, flush)
-                  : configuration_table[s.level].func(s, flush);
-
-              if (bstate === BS_FINISH_STARTED || bstate === BS_FINISH_DONE) {
-                s.status = FINISH_STATE;
-              }
-              if (bstate === BS_NEED_MORE || bstate === BS_FINISH_STARTED) {
-                if (strm.avail_out === 0) {
-                  s.last_flush = -1;
-                  /* avoid BUF_ERROR next call, see above */
-                }
-                return Z_OK;
-                /* If flush != Z_NO_FLUSH && avail_out == 0, the next call
-                 * of deflate should use the same flush parameter to make sure
-                 * that the flush is complete. So we don't have to output an
-                 * empty block here, this will be done at next call. This also
-                 * ensures that for a very small output buffer, we emit at most
-                 * one empty block.
-                 */
-              }
-              if (bstate === BS_BLOCK_DONE) {
-                if (flush === Z_PARTIAL_FLUSH) {
-                  trees._tr_align(s);
-                } else if (flush !== Z_BLOCK) {
-                  /* FULL_FLUSH or SYNC_FLUSH */
-
-                  trees._tr_stored_block(s, 0, 0, false);
-                  /* For a full flush, this empty block will be recognized
-                   * as a special marker by inflate_sync().
-                   */
-                  if (flush === Z_FULL_FLUSH) {
-                    /*** CLEAR_HASH(s); ***/ /* forget history */
-                    zero(s.head); // Fill with NIL (= 0);
-
-                    if (s.lookahead === 0) {
-                      s.strstart = 0;
-                      s.block_start = 0;
-                      s.insert = 0;
-                    }
-                  }
-                }
-                flush_pending(strm);
-                if (strm.avail_out === 0) {
-                  s.last_flush =
-                    -1; /* avoid BUF_ERROR at next call, see above */
-                  return Z_OK;
-                }
-              }
-            }
-            //Assert(strm->avail_out > 0, "bug2");
-            //if (strm.avail_out <= 0) { throw new Error("bug2");}
-
-            if (flush !== Z_FINISH) {
-              return Z_OK;
-            }
-            if (s.wrap <= 0) {
-              return Z_STREAM_END;
-            }
-
-            /* Write the trailer */
-            if (s.wrap === 2) {
-              put_byte(s, strm.adler & 0xff);
-              put_byte(s, (strm.adler >> 8) & 0xff);
-              put_byte(s, (strm.adler >> 16) & 0xff);
-              put_byte(s, (strm.adler >> 24) & 0xff);
-              put_byte(s, strm.total_in & 0xff);
-              put_byte(s, (strm.total_in >> 8) & 0xff);
-              put_byte(s, (strm.total_in >> 16) & 0xff);
-              put_byte(s, (strm.total_in >> 24) & 0xff);
-            } else {
-              putShortMSB(s, strm.adler >>> 16);
-              putShortMSB(s, strm.adler & 0xffff);
-            }
-
-            flush_pending(strm);
-            /* If avail_out is zero, the application will call deflate again
-             * to flush the rest.
-             */
-            if (s.wrap > 0) {
-              s.wrap = -s.wrap;
-            }
-            /* write the trailer only once! */
-            return s.pending !== 0 ? Z_OK : Z_STREAM_END;
-          }
-
-          function deflateEnd(strm) {
-            var status;
-
-            if (!strm /*== Z_NULL*/ || !strm.state /*== Z_NULL*/) {
-              return Z_STREAM_ERROR;
-            }
-
-            status = strm.state.status;
-            if (
-              status !== INIT_STATE &&
-              status !== EXTRA_STATE &&
-              status !== NAME_STATE &&
-              status !== COMMENT_STATE &&
-              status !== HCRC_STATE &&
-              status !== BUSY_STATE &&
-              status !== FINISH_STATE
-            ) {
-              return err(strm, Z_STREAM_ERROR);
-            }
-
-            strm.state = null;
-
-            return status === BUSY_STATE ? err(strm, Z_DATA_ERROR) : Z_OK;
-          }
-
-          /* =========================================================================
-           * Initializes the compression dictionary from the given byte
-           * sequence without producing any compressed output.
-           */
-          function deflateSetDictionary(strm, dictionary) {
-            var dictLength = dictionary.length;
-
-            var s;
-            var str, n;
-            var wrap;
-            var avail;
-            var next;
-            var input;
-            var tmpDict;
-
-            if (!strm /*== Z_NULL*/ || !strm.state /*== Z_NULL*/) {
-              return Z_STREAM_ERROR;
-            }
-
-            s = strm.state;
-            wrap = s.wrap;
-
-            if (
-              wrap === 2 ||
-              (wrap === 1 && s.status !== INIT_STATE) ||
-              s.lookahead
-            ) {
-              return Z_STREAM_ERROR;
-            }
-
-            /* when using zlib wrappers, compute Adler-32 for provided dictionary */
-            if (wrap === 1) {
-              /* adler32(strm->adler, dictionary, dictLength); */
-              strm.adler = adler32(strm.adler, dictionary, dictLength, 0);
-            }
-
-            s.wrap = 0; /* avoid computing Adler-32 in read_buf */
-
-            /* if dictionary would fill window, just replace the history */
-            if (dictLength >= s.w_size) {
-              if (wrap === 0) {
-                /* already empty otherwise */
-                /*** CLEAR_HASH(s); ***/
-                zero(s.head); // Fill with NIL (= 0);
-                s.strstart = 0;
-                s.block_start = 0;
-                s.insert = 0;
-              }
-              /* use the tail */
-              // dictionary = dictionary.slice(dictLength - s.w_size);
-              tmpDict = new utils.Buf8(s.w_size);
-              utils.arraySet(
-                tmpDict,
-                dictionary,
-                dictLength - s.w_size,
-                s.w_size,
-                0,
-              );
-              dictionary = tmpDict;
-              dictLength = s.w_size;
-            }
-            /* insert dictionary into window and hash */
-            avail = strm.avail_in;
-            next = strm.next_in;
-            input = strm.input;
-            strm.avail_in = dictLength;
-            strm.next_in = 0;
-            strm.input = dictionary;
-            fill_window(s);
-            while (s.lookahead >= MIN_MATCH) {
-              str = s.strstart;
-              n = s.lookahead - (MIN_MATCH - 1);
-              do {
-                /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */
-                s.ins_h =
-                  ((s.ins_h << s.hash_shift) ^ s.window[str + MIN_MATCH - 1]) &
-                  s.hash_mask;
-
-                s.prev[str & s.w_mask] = s.head[s.ins_h];
-
-                s.head[s.ins_h] = str;
-                str++;
-              } while (--n);
-              s.strstart = str;
-              s.lookahead = MIN_MATCH - 1;
-              fill_window(s);
-            }
-            s.strstart += s.lookahead;
-            s.block_start = s.strstart;
-            s.insert = s.lookahead;
-            s.lookahead = 0;
-            s.match_length = s.prev_length = MIN_MATCH - 1;
-            s.match_available = 0;
-            strm.next_in = next;
-            strm.input = input;
-            strm.avail_in = avail;
-            s.wrap = wrap;
-            return Z_OK;
-          }
-
-          exports.deflateInit = deflateInit;
-          exports.deflateInit2 = deflateInit2;
-          exports.deflateReset = deflateReset;
-          exports.deflateResetKeep = deflateResetKeep;
-          exports.deflateSetHeader = deflateSetHeader;
-          exports.deflate = deflate;
-          exports.deflateEnd = deflateEnd;
-          exports.deflateSetDictionary = deflateSetDictionary;
-          exports.deflateInfo = "pako deflate (from Nodeca project)";
-
-          /* Not implemented
-exports.deflateBound = deflateBound;
-exports.deflateCopy = deflateCopy;
-exports.deflateParams = deflateParams;
-exports.deflatePending = deflatePending;
-exports.deflatePrime = deflatePrime;
-exports.deflateTune = deflateTune;
-*/
-        },
-        {
-          "../utils/common": 41,
-          "./adler32": 43,
-          "./crc32": 45,
-          "./messages": 51,
-          "./trees": 52,
-        },
-      ],
-      47: [
-        function (require, module, exports) {
-          "use strict";
-
-          // (C) 1995-2013 Jean-loup Gailly and Mark Adler
-          // (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
-          //
-          // This software is provided 'as-is', without any express or implied
-          // warranty. In no event will the authors be held liable for any damages
-          // arising from the use of this software.
-          //
-          // Permission is granted to anyone to use this software for any purpose,
-          // including commercial applications, and to alter it and redistribute it
-          // freely, subject to the following restrictions:
-          //
-          // 1. The origin of this software must not be misrepresented; you must not
-          //   claim that you wrote the original software. If you use this software
-          //   in a product, an acknowledgment in the product documentation would be
-          //   appreciated but is not required.
-          // 2. Altered source versions must be plainly marked as such, and must not be
-          //   misrepresented as being the original software.
-          // 3. This notice may not be removed or altered from any source distribution.
-
-          function GZheader() {
-            /* true if compressed data believed to be text */
-            this.text = 0;
-            /* modification time */
-            this.time = 0;
-            /* extra flags (not used when writing a gzip file) */
-            this.xflags = 0;
-            /* operating system */
-            this.os = 0;
-            /* pointer to extra field or Z_NULL if none */
-            this.extra = null;
-            /* extra field length (valid if extra != Z_NULL) */
-            this.extra_len = 0; // Actually, we don't need it in JS,
-            // but leave for few code modifications
-
-            //
-            // Setup limits is not necessary because in js we should not preallocate memory
-            // for inflate use constant limit in 65536 bytes
-            //
-
-            /* space at extra (only when reading header) */
-            // this.extra_max  = 0;
-            /* pointer to zero-terminated file name or Z_NULL */
-            this.name = "";
-            /* space at name (only when reading header) */
-            // this.name_max   = 0;
-            /* pointer to zero-terminated comment or Z_NULL */
-            this.comment = "";
-            /* space at comment (only when reading header) */
-            // this.comm_max   = 0;
-            /* true if there was or will be a header crc */
-            this.hcrc = 0;
-            /* true when done reading gzip header (not used when writing a gzip file) */
-            this.done = false;
-          }
-
-          module.exports = GZheader;
-        },
-        {},
-      ],
-      48: [
-        function (require, module, exports) {
-          "use strict";
-
-          // (C) 1995-2013 Jean-loup Gailly and Mark Adler
-          // (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
-          //
-          // This software is provided 'as-is', without any express or implied
-          // warranty. In no event will the authors be held liable for any damages
-          // arising from the use of this software.
-          //
-          // Permission is granted to anyone to use this software for any purpose,
-          // including commercial applications, and to alter it and redistribute it
-          // freely, subject to the following restrictions:
-          //
-          // 1. The origin of this software must not be misrepresented; you must not
-          //   claim that you wrote the original software. If you use this software
-          //   in a product, an acknowledgment in the product documentation would be
-          //   appreciated but is not required.
-          // 2. Altered source versions must be plainly marked as such, and must not be
-          //   misrepresented as being the original software.
-          // 3. This notice may not be removed or altered from any source distribution.
-
-          // See state defs from inflate.js
-          var BAD = 30; /* got a data error -- remain here until reset */
-          var TYPE = 12; /* i: waiting for type bits, including last-flag bit */
-
-          /*
-   Decode literal, length, and distance codes and write out the resulting
-   literal and match bytes until either not enough input or output is
-   available, an end-of-block is encountered, or a data error is encountered.
-   When large enough input and output buffers are supplied to inflate(), for
-   example, a 16K input buffer and a 64K output buffer, more than 95% of the
-   inflate execution time is spent in this routine.
-
-   Entry assumptions:
-
-        state.mode === LEN
-        strm.avail_in >= 6
-        strm.avail_out >= 258
-        start >= strm.avail_out
-        state.bits < 8
-
-   On return, state.mode is one of:
-
-        LEN -- ran out of enough output space or enough available input
-        TYPE -- reached end of block code, inflate() to interpret next block
-        BAD -- error in block data
-
-   Notes:
-
-    - The maximum input bits used by a length/distance pair is 15 bits for the
-      length code, 5 bits for the length extra, 15 bits for the distance code,
-      and 13 bits for the distance extra.  This totals 48 bits, or six bytes.
-      Therefore if strm.avail_in >= 6, then there is enough input to avoid
-      checking for available input while decoding.
-
-    - The maximum bytes that a single length/distance pair can output is 258
-      bytes, which is the maximum length that can be coded.  inflate_fast()
-      requires strm.avail_out >= 258 for each loop to avoid checking for
-      output space.
- */
-          module.exports = function inflate_fast(strm, start) {
-            var state;
-            var _in; /* local strm.input */
-            var last; /* have enough input while in < last */
-            var _out; /* local strm.output */
-            var beg; /* inflate()'s initial strm.output */
-            var end; /* while out < end, enough space available */
-            //#ifdef INFLATE_STRICT
-            var dmax; /* maximum distance from zlib header */
-            //#endif
-            var wsize; /* window size or zero if not using window */
-            var whave; /* valid bytes in the window */
-            var wnext; /* window write index */
-            // Use `s_window` instead `window`, avoid conflict with instrumentation tools
-            var s_window; /* allocated sliding window, if wsize != 0 */
-            var hold; /* local strm.hold */
-            var bits; /* local strm.bits */
-            var lcode; /* local strm.lencode */
-            var dcode; /* local strm.distcode */
-            var lmask; /* mask for first level of length codes */
-            var dmask; /* mask for first level of distance codes */
-            var here; /* retrieved table entry */
-            var op; /* code bits, operation, extra bits, or */
-            /*  window position, window bytes to copy */
-            var len; /* match length, unused bytes */
-            var dist; /* match distance */
-            var from; /* where to copy match from */
-            var from_source;
-
-            var input, output; // JS specific, because we have no pointers
-
-            /* copy state to local variables */
-            state = strm.state;
-            //here = state.here;
-            _in = strm.next_in;
-            input = strm.input;
-            last = _in + (strm.avail_in - 5);
-            _out = strm.next_out;
-            output = strm.output;
-            beg = _out - (start - strm.avail_out);
-            end = _out + (strm.avail_out - 257);
-            //#ifdef INFLATE_STRICT
-            dmax = state.dmax;
-            //#endif
-            wsize = state.wsize;
-            whave = state.whave;
-            wnext = state.wnext;
-            s_window = state.window;
-            hold = state.hold;
-            bits = state.bits;
-            lcode = state.lencode;
-            dcode = state.distcode;
-            lmask = (1 << state.lenbits) - 1;
-            dmask = (1 << state.distbits) - 1;
-
-            /* decode literals and length/distances until end-of-block or not enough
-     input data or output space */
-
-            top: do {
-              if (bits < 15) {
-                hold += input[_in++] << bits;
-                bits += 8;
-                hold += input[_in++] << bits;
-                bits += 8;
-              }
-
-              here = lcode[hold & lmask];
-
-              dolen: for (;;) {
-                // Goto emulation
-                op = here >>> 24 /*here.bits*/;
-                hold >>>= op;
-                bits -= op;
-                op = (here >>> 16) & 0xff /*here.op*/;
-                if (op === 0) {
-                  /* literal */
-                  //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?
-                  //        "inflate:         literal '%c'\n" :
-                  //        "inflate:         literal 0x%02x\n", here.val));
-                  output[_out++] = here & 0xffff /*here.val*/;
-                } else if (op & 16) {
-                  /* length base */
-                  len = here & 0xffff /*here.val*/;
-                  op &= 15; /* number of extra bits */
-                  if (op) {
-                    if (bits < op) {
-                      hold += input[_in++] << bits;
-                      bits += 8;
-                    }
-                    len += hold & ((1 << op) - 1);
-                    hold >>>= op;
-                    bits -= op;
-                  }
-                  //Tracevv((stderr, "inflate:         length %u\n", len));
-                  if (bits < 15) {
-                    hold += input[_in++] << bits;
-                    bits += 8;
-                    hold += input[_in++] << bits;
-                    bits += 8;
-                  }
-                  here = dcode[hold & dmask];
-
-                  dodist: for (;;) {
-                    // goto emulation
-                    op = here >>> 24 /*here.bits*/;
-                    hold >>>= op;
-                    bits -= op;
-                    op = (here >>> 16) & 0xff /*here.op*/;
-
-                    if (op & 16) {
-                      /* distance base */
-                      dist = here & 0xffff /*here.val*/;
-                      op &= 15; /* number of extra bits */
-                      if (bits < op) {
-                        hold += input[_in++] << bits;
-                        bits += 8;
-                        if (bits < op) {
-                          hold += input[_in++] << bits;
-                          bits += 8;
-                        }
-                      }
-                      dist += hold & ((1 << op) - 1);
-                      //#ifdef INFLATE_STRICT
-                      if (dist > dmax) {
-                        strm.msg = "invalid distance too far back";
-                        state.mode = BAD;
-                        break top;
-                      }
-                      //#endif
-                      hold >>>= op;
-                      bits -= op;
-                      //Tracevv((stderr, "inflate:         distance %u\n", dist));
-                      op = _out - beg; /* max distance in output */
-                      if (dist > op) {
-                        /* see if copy from window */
-                        op = dist - op; /* distance back in window */
-                        if (op > whave) {
-                          if (state.sane) {
-                            strm.msg = "invalid distance too far back";
-                            state.mode = BAD;
-                            break top;
-                          }
-
-                          // (!) This block is disabled in zlib defailts,
-                          // don't enable it for binary compatibility
-                          //#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR
-                          //                if (len <= op - whave) {
-                          //                  do {
-                          //                    output[_out++] = 0;
-                          //                  } while (--len);
-                          //                  continue top;
-                          //                }
-                          //                len -= op - whave;
-                          //                do {
-                          //                  output[_out++] = 0;
-                          //                } while (--op > whave);
-                          //                if (op === 0) {
-                          //                  from = _out - dist;
-                          //                  do {
-                          //                    output[_out++] = output[from++];
-                          //                  } while (--len);
-                          //                  continue top;
-                          //                }
-                          //#endif
-                        }
-                        from = 0; // window index
-                        from_source = s_window;
-                        if (wnext === 0) {
-                          /* very common case */
-                          from += wsize - op;
-                          if (op < len) {
-                            /* some from window */
-                            len -= op;
-                            do {
-                              output[_out++] = s_window[from++];
-                            } while (--op);
-                            from = _out - dist; /* rest from output */
-                            from_source = output;
-                          }
-                        } else if (wnext < op) {
-                          /* wrap around window */
-                          from += wsize + wnext - op;
-                          op -= wnext;
-                          if (op < len) {
-                            /* some from end of window */
-                            len -= op;
-                            do {
-                              output[_out++] = s_window[from++];
-                            } while (--op);
-                            from = 0;
-                            if (wnext < len) {
-                              /* some from start of window */
-                              op = wnext;
-                              len -= op;
-                              do {
-                                output[_out++] = s_window[from++];
-                              } while (--op);
-                              from = _out - dist; /* rest from output */
-                              from_source = output;
-                            }
-                          }
-                        } else {
-                          /* contiguous in window */
-                          from += wnext - op;
-                          if (op < len) {
-                            /* some from window */
-                            len -= op;
-                            do {
-                              output[_out++] = s_window[from++];
-                            } while (--op);
-                            from = _out - dist; /* rest from output */
-                            from_source = output;
-                          }
-                        }
-                        while (len > 2) {
-                          output[_out++] = from_source[from++];
-                          output[_out++] = from_source[from++];
-                          output[_out++] = from_source[from++];
-                          len -= 3;
-                        }
-                        if (len) {
-                          output[_out++] = from_source[from++];
-                          if (len > 1) {
-                            output[_out++] = from_source[from++];
-                          }
-                        }
-                      } else {
-                        from = _out - dist; /* copy direct from output */
-                        do {
-                          /* minimum length is three */
-                          output[_out++] = output[from++];
-                          output[_out++] = output[from++];
-                          output[_out++] = output[from++];
-                          len -= 3;
-                        } while (len > 2);
-                        if (len) {
-                          output[_out++] = output[from++];
-                          if (len > 1) {
-                            output[_out++] = output[from++];
-                          }
-                        }
-                      }
-                    } else if ((op & 64) === 0) {
-                      /* 2nd level distance code */
-                      here =
-                        dcode[
-                          (here & 0xffff) /*here.val*/ +
-                            (hold & ((1 << op) - 1))
-                        ];
-                      continue dodist;
-                    } else {
-                      strm.msg = "invalid distance code";
-                      state.mode = BAD;
-                      break top;
-                    }
-
-                    break; // need to emulate goto via "continue"
-                  }
-                } else if ((op & 64) === 0) {
-                  /* 2nd level length code */
-                  here =
-                    lcode[
-                      (here & 0xffff) /*here.val*/ + (hold & ((1 << op) - 1))
-                    ];
-                  continue dolen;
-                } else if (op & 32) {
-                  /* end-of-block */
-                  //Tracevv((stderr, "inflate:         end of block\n"));
-                  state.mode = TYPE;
-                  break top;
-                } else {
-                  strm.msg = "invalid literal/length code";
-                  state.mode = BAD;
-                  break top;
-                }
-
-                break; // need to emulate goto via "continue"
-              }
-            } while (_in < last && _out < end);
-
-            /* return unused bytes (on entry, bits < 8, so in won't go too far back) */
-            len = bits >> 3;
-            _in -= len;
-            bits -= len << 3;
-            hold &= (1 << bits) - 1;
-
-            /* update state and return */
-            strm.next_in = _in;
-            strm.next_out = _out;
-            strm.avail_in = _in < last ? 5 + (last - _in) : 5 - (_in - last);
-            strm.avail_out =
-              _out < end ? 257 + (end - _out) : 257 - (_out - end);
-            state.hold = hold;
-            state.bits = bits;
-            return;
-          };
-        },
-        {},
-      ],
-      49: [
-        function (require, module, exports) {
-          "use strict";
-
-          // (C) 1995-2013 Jean-loup Gailly and Mark Adler
-          // (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
-          //
-          // This software is provided 'as-is', without any express or implied
-          // warranty. In no event will the authors be held liable for any damages
-          // arising from the use of this software.
-          //
-          // Permission is granted to anyone to use this software for any purpose,
-          // including commercial applications, and to alter it and redistribute it
-          // freely, subject to the following restrictions:
-          //
-          // 1. The origin of this software must not be misrepresented; you must not
-          //   claim that you wrote the original software. If you use this software
-          //   in a product, an acknowledgment in the product documentation would be
-          //   appreciated but is not required.
-          // 2. Altered source versions must be plainly marked as such, and must not be
-          //   misrepresented as being the original software.
-          // 3. This notice may not be removed or altered from any source distribution.
-
-          var utils = require("../utils/common");
-          var adler32 = require("./adler32");
-          var crc32 = require("./crc32");
-          var inflate_fast = require("./inffast");
-          var inflate_table = require("./inftrees");
-
-          var CODES = 0;
-          var LENS = 1;
-          var DISTS = 2;
-
-          /* Public constants ==========================================================*/
-          /* ===========================================================================*/
-
-          /* Allowed flush values; see deflate() and inflate() below for details */
-          //var Z_NO_FLUSH      = 0;
-          //var Z_PARTIAL_FLUSH = 1;
-          //var Z_SYNC_FLUSH    = 2;
-          //var Z_FULL_FLUSH    = 3;
-          var Z_FINISH = 4;
-          var Z_BLOCK = 5;
-          var Z_TREES = 6;
-
-          /* Return codes for the compression/decompression functions. Negative values
-           * are errors, positive values are used for special but normal events.
-           */
-          var Z_OK = 0;
-          var Z_STREAM_END = 1;
-          var Z_NEED_DICT = 2;
-          //var Z_ERRNO         = -1;
-          var Z_STREAM_ERROR = -2;
-          var Z_DATA_ERROR = -3;
-          var Z_MEM_ERROR = -4;
-          var Z_BUF_ERROR = -5;
-          //var Z_VERSION_ERROR = -6;
-
-          /* The deflate compression method */
-          var Z_DEFLATED = 8;
-
-          /* STATES ====================================================================*/
-          /* ===========================================================================*/
-
-          var HEAD = 1; /* i: waiting for magic header */
-          var FLAGS = 2; /* i: waiting for method and flags (gzip) */
-          var TIME = 3; /* i: waiting for modification time (gzip) */
-          var OS = 4; /* i: waiting for extra flags and operating system (gzip) */
-          var EXLEN = 5; /* i: waiting for extra length (gzip) */
-          var EXTRA = 6; /* i: waiting for extra bytes (gzip) */
-          var NAME = 7; /* i: waiting for end of file name (gzip) */
-          var COMMENT = 8; /* i: waiting for end of comment (gzip) */
-          var HCRC = 9; /* i: waiting for header crc (gzip) */
-          var DICTID = 10; /* i: waiting for dictionary check value */
-          var DICT = 11; /* waiting for inflateSetDictionary() call */
-          var TYPE = 12; /* i: waiting for type bits, including last-flag bit */
-          var TYPEDO = 13; /* i: same, but skip check to exit inflate on new block */
-          var STORED = 14; /* i: waiting for stored size (length and complement) */
-          var COPY_ = 15; /* i/o: same as COPY below, but only first time in */
-          var COPY = 16; /* i/o: waiting for input or output to copy stored block */
-          var TABLE = 17; /* i: waiting for dynamic block table lengths */
-          var LENLENS = 18; /* i: waiting for code length code lengths */
-          var CODELENS = 19; /* i: waiting for length/lit and distance code lengths */
-          var LEN_ = 20; /* i: same as LEN below, but only first time in */
-          var LEN = 21; /* i: waiting for length/lit/eob code */
-          var LENEXT = 22; /* i: waiting for length extra bits */
-          var DIST = 23; /* i: waiting for distance code */
-          var DISTEXT = 24; /* i: waiting for distance extra bits */
-          var MATCH = 25; /* o: waiting for output space to copy string */
-          var LIT = 26; /* o: waiting for output space to write literal */
-          var CHECK = 27; /* i: waiting for 32-bit check value */
-          var LENGTH = 28; /* i: waiting for 32-bit length (gzip) */
-          var DONE = 29; /* finished check, done -- remain here until reset */
-          var BAD = 30; /* got a data error -- remain here until reset */
-          var MEM = 31; /* got an inflate() memory error -- remain here until reset */
-          var SYNC = 32; /* looking for synchronization bytes to restart inflate() */
-
-          /* ===========================================================================*/
-
-          var ENOUGH_LENS = 852;
-          var ENOUGH_DISTS = 592;
-          //var ENOUGH =  (ENOUGH_LENS+ENOUGH_DISTS);
-
-          var MAX_WBITS = 15;
-          /* 32K LZ77 window */
-          var DEF_WBITS = MAX_WBITS;
-
-          function zswap32(q) {
-            return (
-              ((q >>> 24) & 0xff) +
-              ((q >>> 8) & 0xff00) +
-              ((q & 0xff00) << 8) +
-              ((q & 0xff) << 24)
-            );
-          }
-
-          function InflateState() {
-            this.mode = 0; /* current inflate mode */
-            this.last = false; /* true if processing last block */
-            this.wrap = 0; /* bit 0 true for zlib, bit 1 true for gzip */
-            this.havedict = false; /* true if dictionary provided */
-            this.flags = 0; /* gzip header method and flags (0 if zlib) */
-            this.dmax = 0; /* zlib header max distance (INFLATE_STRICT) */
-            this.check = 0; /* protected copy of check value */
-            this.total = 0; /* protected copy of output count */
-            // TODO: may be {}
-            this.head = null; /* where to save gzip header information */
-
-            /* sliding window */
-            this.wbits = 0; /* log base 2 of requested window size */
-            this.wsize = 0; /* window size or zero if not using window */
-            this.whave = 0; /* valid bytes in the window */
-            this.wnext = 0; /* window write index */
-            this.window = null; /* allocated sliding window, if needed */
-
-            /* bit accumulator */
-            this.hold = 0; /* input bit accumulator */
-            this.bits = 0; /* number of bits in "in" */
-
-            /* for string and stored block copying */
-            this.length = 0; /* literal or length of data to copy */
-            this.offset = 0; /* distance back to copy string from */
-
-            /* for table and code decoding */
-            this.extra = 0; /* extra bits needed */
-
-            /* fixed and dynamic code tables */
-            this.lencode = null; /* starting table for length/literal codes */
-            this.distcode = null; /* starting table for distance codes */
-            this.lenbits = 0; /* index bits for lencode */
-            this.distbits = 0; /* index bits for distcode */
-
-            /* dynamic table building */
-            this.ncode = 0; /* number of code length code lengths */
-            this.nlen = 0; /* number of length code lengths */
-            this.ndist = 0; /* number of distance code lengths */
-            this.have = 0; /* number of code lengths in lens[] */
-            this.next = null; /* next available space in codes[] */
-
-            this.lens = new utils.Buf16(
-              320,
-            ); /* temporary storage for code lengths */
-            this.work = new utils.Buf16(
-              288,
-            ); /* work area for code table building */
-
-            /*
-   because we don't have pointers in js, we use lencode and distcode directly
-   as buffers so we don't need codes
-  */
-            //this.codes = new utils.Buf32(ENOUGH);       /* space for code tables */
-            this.lendyn =
-              null; /* dynamic table for length/literal codes (JS specific) */
-            this.distdyn =
-              null; /* dynamic table for distance codes (JS specific) */
-            this.sane = 0; /* if false, allow invalid distance too far */
-            this.back = 0; /* bits back of last unprocessed length/lit */
-            this.was = 0; /* initial length of match */
-          }
-
-          function inflateResetKeep(strm) {
-            var state;
-
-            if (!strm || !strm.state) {
-              return Z_STREAM_ERROR;
-            }
-            state = strm.state;
-            strm.total_in = strm.total_out = state.total = 0;
-            strm.msg = ""; /*Z_NULL*/
-            if (state.wrap) {
-              /* to support ill-conceived Java test suite */
-              strm.adler = state.wrap & 1;
-            }
-            state.mode = HEAD;
-            state.last = 0;
-            state.havedict = 0;
-            state.dmax = 32768;
-            state.head = null /*Z_NULL*/;
-            state.hold = 0;
-            state.bits = 0;
-            //state.lencode = state.distcode = state.next = state.codes;
-            state.lencode = state.lendyn = new utils.Buf32(ENOUGH_LENS);
-            state.distcode = state.distdyn = new utils.Buf32(ENOUGH_DISTS);
-
-            state.sane = 1;
-            state.back = -1;
-            //Tracev((stderr, "inflate: reset\n"));
-            return Z_OK;
-          }
-
-          function inflateReset(strm) {
-            var state;
-
-            if (!strm || !strm.state) {
-              return Z_STREAM_ERROR;
-            }
-            state = strm.state;
-            state.wsize = 0;
-            state.whave = 0;
-            state.wnext = 0;
-            return inflateResetKeep(strm);
-          }
-
-          function inflateReset2(strm, windowBits) {
-            var wrap;
-            var state;
-
-            /* get the state */
-            if (!strm || !strm.state) {
-              return Z_STREAM_ERROR;
-            }
-            state = strm.state;
-
-            /* extract wrap request from windowBits parameter */
-            if (windowBits < 0) {
-              wrap = 0;
-              windowBits = -windowBits;
-            } else {
-              wrap = (windowBits >> 4) + 1;
-              if (windowBits < 48) {
-                windowBits &= 15;
-              }
-            }
-
-            /* set number of window bits, free window if different */
-            if (windowBits && (windowBits < 8 || windowBits > 15)) {
-              return Z_STREAM_ERROR;
-            }
-            if (state.window !== null && state.wbits !== windowBits) {
-              state.window = null;
-            }
-
-            /* update state and reset the rest of it */
-            state.wrap = wrap;
-            state.wbits = windowBits;
-            return inflateReset(strm);
-          }
-
-          function inflateInit2(strm, windowBits) {
-            var ret;
-            var state;
-
-            if (!strm) {
-              return Z_STREAM_ERROR;
-            }
-            //strm.msg = Z_NULL;                 /* in case we return an error */
-
-            state = new InflateState();
-
-            //if (state === Z_NULL) return Z_MEM_ERROR;
-            //Tracev((stderr, "inflate: allocated\n"));
-            strm.state = state;
-            state.window = null /*Z_NULL*/;
-            ret = inflateReset2(strm, windowBits);
-            if (ret !== Z_OK) {
-              strm.state = null /*Z_NULL*/;
-            }
-            return ret;
-          }
-
-          function inflateInit(strm) {
-            return inflateInit2(strm, DEF_WBITS);
-          }
-
-          /*
- Return state with length and distance decoding tables and index sizes set to
- fixed code decoding.  Normally this returns fixed tables from inffixed.h.
- If BUILDFIXED is defined, then instead this routine builds the tables the
- first time it's called, and returns those tables the first time and
- thereafter.  This reduces the size of the code by about 2K bytes, in
- exchange for a little execution time.  However, BUILDFIXED should not be
- used for threaded applications, since the rewriting of the tables and virgin
- may not be thread-safe.
- */
-          var virgin = true;
-
-          var lenfix, distfix; // We have no pointers in JS, so keep tables separate
-
-          function fixedtables(state) {
-            /* build fixed huffman tables if first call (may not be thread safe) */
-            if (virgin) {
-              var sym;
-
-              lenfix = new utils.Buf32(512);
-              distfix = new utils.Buf32(32);
-
-              /* literal/length table */
-              sym = 0;
-              while (sym < 144) {
-                state.lens[sym++] = 8;
-              }
-              while (sym < 256) {
-                state.lens[sym++] = 9;
-              }
-              while (sym < 280) {
-                state.lens[sym++] = 7;
-              }
-              while (sym < 288) {
-                state.lens[sym++] = 8;
-              }
-
-              inflate_table(LENS, state.lens, 0, 288, lenfix, 0, state.work, {
-                bits: 9,
-              });
-
-              /* distance table */
-              sym = 0;
-              while (sym < 32) {
-                state.lens[sym++] = 5;
-              }
-
-              inflate_table(DISTS, state.lens, 0, 32, distfix, 0, state.work, {
-                bits: 5,
-              });
-
-              /* do this just once */
-              virgin = false;
-            }
-
-            state.lencode = lenfix;
-            state.lenbits = 9;
-            state.distcode = distfix;
-            state.distbits = 5;
-          }
-
-          /*
- Update the window with the last wsize (normally 32K) bytes written before
- returning.  If window does not exist yet, create it.  This is only called
- when a window is already in use, or when output has been written during this
- inflate call, but the end of the deflate stream has not been reached yet.
- It is also called to create a window for dictionary data when a dictionary
- is loaded.
-
- Providing output buffers larger than 32K to inflate() should provide a speed
- advantage, since only the last 32K of output is copied to the sliding window
- upon return from inflate(), and since all distances after the first 32K of
- output will fall in the output data, making match copies simpler and faster.
- The advantage may be dependent on the size of the processor's data caches.
- */
-          function updatewindow(strm, src, end, copy) {
-            var dist;
-            var state = strm.state;
-
-            /* if it hasn't been done already, allocate space for the window */
-            if (state.window === null) {
-              state.wsize = 1 << state.wbits;
-              state.wnext = 0;
-              state.whave = 0;
-
-              state.window = new utils.Buf8(state.wsize);
-            }
-
-            /* copy state->wsize or less output bytes into the circular window */
-            if (copy >= state.wsize) {
-              utils.arraySet(
-                state.window,
-                src,
-                end - state.wsize,
-                state.wsize,
-                0,
-              );
-              state.wnext = 0;
-              state.whave = state.wsize;
-            } else {
-              dist = state.wsize - state.wnext;
-              if (dist > copy) {
-                dist = copy;
-              }
-              //zmemcpy(state->window + state->wnext, end - copy, dist);
-              utils.arraySet(state.window, src, end - copy, dist, state.wnext);
-              copy -= dist;
-              if (copy) {
-                //zmemcpy(state->window, end - copy, copy);
-                utils.arraySet(state.window, src, end - copy, copy, 0);
-                state.wnext = copy;
-                state.whave = state.wsize;
-              } else {
-                state.wnext += dist;
-                if (state.wnext === state.wsize) {
-                  state.wnext = 0;
-                }
-                if (state.whave < state.wsize) {
-                  state.whave += dist;
-                }
-              }
-            }
-            return 0;
-          }
-
-          function inflate(strm, flush) {
-            var state;
-            var input, output; // input/output buffers
-            var next; /* next input INDEX */
-            var put; /* next output INDEX */
-            var have, left; /* available input and output */
-            var hold; /* bit buffer */
-            var bits; /* bits in bit buffer */
-            var _in, _out; /* save starting available input and output */
-            var copy; /* number of stored or match bytes to copy */
-            var from; /* where to copy match bytes from */
-            var from_source;
-            var here = 0; /* current decoding table entry */
-            var here_bits, here_op, here_val; // paked "here" denormalized (JS specific)
-            //var last;                   /* parent table entry */
-            var last_bits, last_op, last_val; // paked "last" denormalized (JS specific)
-            var len; /* length to copy for repeats, bits to drop */
-            var ret; /* return code */
-            var hbuf = new utils.Buf8(
-              4,
-            ); /* buffer for gzip header crc calculation */
-            var opts;
-
-            var n; // temporary var for NEED_BITS
-
-            var order =
-              /* permutation of code lengths */
-              [
-                16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1,
-                15,
-              ];
-
-            if (
-              !strm ||
-              !strm.state ||
-              !strm.output ||
-              (!strm.input && strm.avail_in !== 0)
-            ) {
-              return Z_STREAM_ERROR;
-            }
-
-            state = strm.state;
-            if (state.mode === TYPE) {
-              state.mode = TYPEDO;
-            } /* skip check */
-
-            //--- LOAD() ---
-            put = strm.next_out;
-            output = strm.output;
-            left = strm.avail_out;
-            next = strm.next_in;
-            input = strm.input;
-            have = strm.avail_in;
-            hold = state.hold;
-            bits = state.bits;
-            //---
-
-            _in = have;
-            _out = left;
-            ret = Z_OK;
-
-            // goto emulation
-            inf_leave: for (;;) {
-              switch (state.mode) {
-                case HEAD:
-                  if (state.wrap === 0) {
-                    state.mode = TYPEDO;
-                    break;
-                  }
-                  //=== NEEDBITS(16);
-                  while (bits < 16) {
-                    if (have === 0) {
-                      break inf_leave;
-                    }
-                    have--;
-                    hold += input[next++] << bits;
-                    bits += 8;
-                  }
-                  //===//
-                  if (state.wrap & 2 && hold === 0x8b1f) {
-                    /* gzip header */
-                    state.check = 0 /*crc32(0L, Z_NULL, 0)*/;
-                    //=== CRC2(state.check, hold);
-                    hbuf[0] = hold & 0xff;
-                    hbuf[1] = (hold >>> 8) & 0xff;
-                    state.check = crc32(state.check, hbuf, 2, 0);
-                    //===//
-
-                    //=== INITBITS();
-                    hold = 0;
-                    bits = 0;
-                    //===//
-                    state.mode = FLAGS;
-                    break;
-                  }
-                  state.flags = 0; /* expect zlib header */
-                  if (state.head) {
-                    state.head.done = false;
-                  }
-                  if (
-                    !(state.wrap & 1) /* check if zlib header allowed */ ||
-                    (((hold & 0xff) /*BITS(8)*/ << 8) + (hold >> 8)) % 31
-                  ) {
-                    strm.msg = "incorrect header check";
-                    state.mode = BAD;
-                    break;
-                  }
-                  if ((hold & 0x0f) /*BITS(4)*/ !== Z_DEFLATED) {
-                    strm.msg = "unknown compression method";
-                    state.mode = BAD;
-                    break;
-                  }
-                  //--- DROPBITS(4) ---//
-                  hold >>>= 4;
-                  bits -= 4;
-                  //---//
-                  len = (hold & 0x0f) /*BITS(4)*/ + 8;
-                  if (state.wbits === 0) {
-                    state.wbits = len;
-                  } else if (len > state.wbits) {
-                    strm.msg = "invalid window size";
-                    state.mode = BAD;
-                    break;
-                  }
-                  state.dmax = 1 << len;
-                  //Tracev((stderr, "inflate:   zlib header ok\n"));
-                  strm.adler = state.check = 1 /*adler32(0L, Z_NULL, 0)*/;
-                  state.mode = hold & 0x200 ? DICTID : TYPE;
-                  //=== INITBITS();
-                  hold = 0;
-                  bits = 0;
-                  //===//
-                  break;
-                case FLAGS:
-                  //=== NEEDBITS(16); */
-                  while (bits < 16) {
-                    if (have === 0) {
-                      break inf_leave;
-                    }
-                    have--;
-                    hold += input[next++] << bits;
-                    bits += 8;
-                  }
-                  //===//
-                  state.flags = hold;
-                  if ((state.flags & 0xff) !== Z_DEFLATED) {
-                    strm.msg = "unknown compression method";
-                    state.mode = BAD;
-                    break;
-                  }
-                  if (state.flags & 0xe000) {
-                    strm.msg = "unknown header flags set";
-                    state.mode = BAD;
-                    break;
-                  }
-                  if (state.head) {
-                    state.head.text = (hold >> 8) & 1;
-                  }
-                  if (state.flags & 0x0200) {
-                    //=== CRC2(state.check, hold);
-                    hbuf[0] = hold & 0xff;
-                    hbuf[1] = (hold >>> 8) & 0xff;
-                    state.check = crc32(state.check, hbuf, 2, 0);
-                    //===//
-                  }
-                  //=== INITBITS();
-                  hold = 0;
-                  bits = 0;
-                  //===//
-                  state.mode = TIME;
-                /* falls through */
-                case TIME:
-                  //=== NEEDBITS(32); */
-                  while (bits < 32) {
-                    if (have === 0) {
-                      break inf_leave;
-                    }
-                    have--;
-                    hold += input[next++] << bits;
-                    bits += 8;
-                  }
-                  //===//
-                  if (state.head) {
-                    state.head.time = hold;
-                  }
-                  if (state.flags & 0x0200) {
-                    //=== CRC4(state.check, hold)
-                    hbuf[0] = hold & 0xff;
-                    hbuf[1] = (hold >>> 8) & 0xff;
-                    hbuf[2] = (hold >>> 16) & 0xff;
-                    hbuf[3] = (hold >>> 24) & 0xff;
-                    state.check = crc32(state.check, hbuf, 4, 0);
-                    //===
-                  }
-                  //=== INITBITS();
-                  hold = 0;
-                  bits = 0;
-                  //===//
-                  state.mode = OS;
-                /* falls through */
-                case OS:
-                  //=== NEEDBITS(16); */
-                  while (bits < 16) {
-                    if (have === 0) {
-                      break inf_leave;
-                    }
-                    have--;
-                    hold += input[next++] << bits;
-                    bits += 8;
-                  }
-                  //===//
-                  if (state.head) {
-                    state.head.xflags = hold & 0xff;
-                    state.head.os = hold >> 8;
-                  }
-                  if (state.flags & 0x0200) {
-                    //=== CRC2(state.check, hold);
-                    hbuf[0] = hold & 0xff;
-                    hbuf[1] = (hold >>> 8) & 0xff;
-                    state.check = crc32(state.check, hbuf, 2, 0);
-                    //===//
-                  }
-                  //=== INITBITS();
-                  hold = 0;
-                  bits = 0;
-                  //===//
-                  state.mode = EXLEN;
-                /* falls through */
-                case EXLEN:
-                  if (state.flags & 0x0400) {
-                    //=== NEEDBITS(16); */
-                    while (bits < 16) {
-                      if (have === 0) {
-                        break inf_leave;
-                      }
-                      have--;
-                      hold += input[next++] << bits;
-                      bits += 8;
-                    }
-                    //===//
-                    state.length = hold;
-                    if (state.head) {
-                      state.head.extra_len = hold;
-                    }
-                    if (state.flags & 0x0200) {
-                      //=== CRC2(state.check, hold);
-                      hbuf[0] = hold & 0xff;
-                      hbuf[1] = (hold >>> 8) & 0xff;
-                      state.check = crc32(state.check, hbuf, 2, 0);
-                      //===//
-                    }
-                    //=== INITBITS();
-                    hold = 0;
-                    bits = 0;
-                    //===//
-                  } else if (state.head) {
-                    state.head.extra = null /*Z_NULL*/;
-                  }
-                  state.mode = EXTRA;
-                /* falls through */
-                case EXTRA:
-                  if (state.flags & 0x0400) {
-                    copy = state.length;
-                    if (copy > have) {
-                      copy = have;
-                    }
-                    if (copy) {
-                      if (state.head) {
-                        len = state.head.extra_len - state.length;
-                        if (!state.head.extra) {
-                          // Use untyped array for more conveniend processing later
-                          state.head.extra = new Array(state.head.extra_len);
-                        }
-                        utils.arraySet(
-                          state.head.extra,
-                          input,
-                          next,
-                          // extra field is limited to 65536 bytes
-                          // - no need for additional size check
-                          copy,
-                          /*len + copy > state.head.extra_max - len ? state.head.extra_max : copy,*/
-                          len,
-                        );
-                        //zmemcpy(state.head.extra + len, next,
-                        //        len + copy > state.head.extra_max ?
-                        //        state.head.extra_max - len : copy);
-                      }
-                      if (state.flags & 0x0200) {
-                        state.check = crc32(state.check, input, copy, next);
-                      }
-                      have -= copy;
-                      next += copy;
-                      state.length -= copy;
-                    }
-                    if (state.length) {
-                      break inf_leave;
-                    }
-                  }
-                  state.length = 0;
-                  state.mode = NAME;
-                /* falls through */
-                case NAME:
-                  if (state.flags & 0x0800) {
-                    if (have === 0) {
-                      break inf_leave;
-                    }
-                    copy = 0;
-                    do {
-                      // TODO: 2 or 1 bytes?
-                      len = input[next + copy++];
-                      /* use constant limit because in js we should not preallocate memory */
-                      if (
-                        state.head &&
-                        len &&
-                        state.length < 65536 /*state.head.name_max*/
-                      ) {
-                        state.head.name += String.fromCharCode(len);
-                      }
-                    } while (len && copy < have);
-
-                    if (state.flags & 0x0200) {
-                      state.check = crc32(state.check, input, copy, next);
-                    }
-                    have -= copy;
-                    next += copy;
-                    if (len) {
-                      break inf_leave;
-                    }
-                  } else if (state.head) {
-                    state.head.name = null;
-                  }
-                  state.length = 0;
-                  state.mode = COMMENT;
-                /* falls through */
-                case COMMENT:
-                  if (state.flags & 0x1000) {
-                    if (have === 0) {
-                      break inf_leave;
-                    }
-                    copy = 0;
-                    do {
-                      len = input[next + copy++];
-                      /* use constant limit because in js we should not preallocate memory */
-                      if (
-                        state.head &&
-                        len &&
-                        state.length < 65536 /*state.head.comm_max*/
-                      ) {
-                        state.head.comment += String.fromCharCode(len);
-                      }
-                    } while (len && copy < have);
-                    if (state.flags & 0x0200) {
-                      state.check = crc32(state.check, input, copy, next);
-                    }
-                    have -= copy;
-                    next += copy;
-                    if (len) {
-                      break inf_leave;
-                    }
-                  } else if (state.head) {
-                    state.head.comment = null;
-                  }
-                  state.mode = HCRC;
-                /* falls through */
-                case HCRC:
-                  if (state.flags & 0x0200) {
-                    //=== NEEDBITS(16); */
-                    while (bits < 16) {
-                      if (have === 0) {
-                        break inf_leave;
-                      }
-                      have--;
-                      hold += input[next++] << bits;
-                      bits += 8;
-                    }
-                    //===//
-                    if (hold !== (state.check & 0xffff)) {
-                      strm.msg = "header crc mismatch";
-                      state.mode = BAD;
-                      break;
-                    }
-                    //=== INITBITS();
-                    hold = 0;
-                    bits = 0;
-                    //===//
-                  }
-                  if (state.head) {
-                    state.head.hcrc = (state.flags >> 9) & 1;
-                    state.head.done = true;
-                  }
-                  strm.adler = state.check = 0;
-                  state.mode = TYPE;
-                  break;
-                case DICTID:
-                  //=== NEEDBITS(32); */
-                  while (bits < 32) {
-                    if (have === 0) {
-                      break inf_leave;
-                    }
-                    have--;
-                    hold += input[next++] << bits;
-                    bits += 8;
-                  }
-                  //===//
-                  strm.adler = state.check = zswap32(hold);
-                  //=== INITBITS();
-                  hold = 0;
-                  bits = 0;
-                  //===//
-                  state.mode = DICT;
-                /* falls through */
-                case DICT:
-                  if (state.havedict === 0) {
-                    //--- RESTORE() ---
-                    strm.next_out = put;
-                    strm.avail_out = left;
-                    strm.next_in = next;
-                    strm.avail_in = have;
-                    state.hold = hold;
-                    state.bits = bits;
-                    //---
-                    return Z_NEED_DICT;
-                  }
-                  strm.adler = state.check = 1 /*adler32(0L, Z_NULL, 0)*/;
-                  state.mode = TYPE;
-                /* falls through */
-                case TYPE:
-                  if (flush === Z_BLOCK || flush === Z_TREES) {
-                    break inf_leave;
-                  }
-                /* falls through */
-                case TYPEDO:
-                  if (state.last) {
-                    //--- BYTEBITS() ---//
-                    hold >>>= bits & 7;
-                    bits -= bits & 7;
-                    //---//
-                    state.mode = CHECK;
-                    break;
-                  }
-                  //=== NEEDBITS(3); */
-                  while (bits < 3) {
-                    if (have === 0) {
-                      break inf_leave;
-                    }
-                    have--;
-                    hold += input[next++] << bits;
-                    bits += 8;
-                  }
-                  //===//
-                  state.last = hold & 0x01 /*BITS(1)*/;
-                  //--- DROPBITS(1) ---//
-                  hold >>>= 1;
-                  bits -= 1;
-                  //---//
-
-                  switch (hold & 0x03 /*BITS(2)*/) {
-                    case 0 /* stored block */:
-                      //Tracev((stderr, "inflate:     stored block%s\n",
-                      //        state.last ? " (last)" : ""));
-                      state.mode = STORED;
-                      break;
-                    case 1 /* fixed block */:
-                      fixedtables(state);
-                      //Tracev((stderr, "inflate:     fixed codes block%s\n",
-                      //        state.last ? " (last)" : ""));
-                      state.mode = LEN_; /* decode codes */
-                      if (flush === Z_TREES) {
-                        //--- DROPBITS(2) ---//
-                        hold >>>= 2;
-                        bits -= 2;
-                        //---//
-                        break inf_leave;
-                      }
-                      break;
-                    case 2 /* dynamic block */:
-                      //Tracev((stderr, "inflate:     dynamic codes block%s\n",
-                      //        state.last ? " (last)" : ""));
-                      state.mode = TABLE;
-                      break;
-                    case 3:
-                      strm.msg = "invalid block type";
-                      state.mode = BAD;
-                  }
-                  //--- DROPBITS(2) ---//
-                  hold >>>= 2;
-                  bits -= 2;
-                  //---//
-                  break;
-                case STORED:
-                  //--- BYTEBITS() ---// /* go to byte boundary */
-                  hold >>>= bits & 7;
-                  bits -= bits & 7;
-                  //---//
-                  //=== NEEDBITS(32); */
-                  while (bits < 32) {
-                    if (have === 0) {
-                      break inf_leave;
-                    }
-                    have--;
-                    hold += input[next++] << bits;
-                    bits += 8;
-                  }
-                  //===//
-                  if ((hold & 0xffff) !== ((hold >>> 16) ^ 0xffff)) {
-                    strm.msg = "invalid stored block lengths";
-                    state.mode = BAD;
-                    break;
-                  }
-                  state.length = hold & 0xffff;
-                  //Tracev((stderr, "inflate:       stored length %u\n",
-                  //        state.length));
-                  //=== INITBITS();
-                  hold = 0;
-                  bits = 0;
-                  //===//
-                  state.mode = COPY_;
-                  if (flush === Z_TREES) {
-                    break inf_leave;
-                  }
-                /* falls through */
-                case COPY_:
-                  state.mode = COPY;
-                /* falls through */
-                case COPY:
-                  copy = state.length;
-                  if (copy) {
-                    if (copy > have) {
-                      copy = have;
-                    }
-                    if (copy > left) {
-                      copy = left;
-                    }
-                    if (copy === 0) {
-                      break inf_leave;
-                    }
-                    //--- zmemcpy(put, next, copy); ---
-                    utils.arraySet(output, input, next, copy, put);
-                    //---//
-                    have -= copy;
-                    next += copy;
-                    left -= copy;
-                    put += copy;
-                    state.length -= copy;
-                    break;
-                  }
-                  //Tracev((stderr, "inflate:       stored end\n"));
-                  state.mode = TYPE;
-                  break;
-                case TABLE:
-                  //=== NEEDBITS(14); */
-                  while (bits < 14) {
-                    if (have === 0) {
-                      break inf_leave;
-                    }
-                    have--;
-                    hold += input[next++] << bits;
-                    bits += 8;
-                  }
-                  //===//
-                  state.nlen = (hold & 0x1f) /*BITS(5)*/ + 257;
-                  //--- DROPBITS(5) ---//
-                  hold >>>= 5;
-                  bits -= 5;
-                  //---//
-                  state.ndist = (hold & 0x1f) /*BITS(5)*/ + 1;
-                  //--- DROPBITS(5) ---//
-                  hold >>>= 5;
-                  bits -= 5;
-                  //---//
-                  state.ncode = (hold & 0x0f) /*BITS(4)*/ + 4;
-                  //--- DROPBITS(4) ---//
-                  hold >>>= 4;
-                  bits -= 4;
-                  //---//
-                  //#ifndef PKZIP_BUG_WORKAROUND
-                  if (state.nlen > 286 || state.ndist > 30) {
-                    strm.msg = "too many length or distance symbols";
-                    state.mode = BAD;
-                    break;
-                  }
-                  //#endif
-                  //Tracev((stderr, "inflate:       table sizes ok\n"));
-                  state.have = 0;
-                  state.mode = LENLENS;
-                /* falls through */
-                case LENLENS:
-                  while (state.have < state.ncode) {
-                    //=== NEEDBITS(3);
-                    while (bits < 3) {
-                      if (have === 0) {
-                        break inf_leave;
-                      }
-                      have--;
-                      hold += input[next++] << bits;
-                      bits += 8;
-                    }
-                    //===//
-                    state.lens[order[state.have++]] = hold & 0x07; //BITS(3);
-                    //--- DROPBITS(3) ---//
-                    hold >>>= 3;
-                    bits -= 3;
-                    //---//
-                  }
-                  while (state.have < 19) {
-                    state.lens[order[state.have++]] = 0;
-                  }
-                  // We have separate tables & no pointers. 2 commented lines below not needed.
-                  //state.next = state.codes;
-                  //state.lencode = state.next;
-                  // Switch to use dynamic table
-                  state.lencode = state.lendyn;
-                  state.lenbits = 7;
-
-                  opts = { bits: state.lenbits };
-                  ret = inflate_table(
-                    CODES,
-                    state.lens,
-                    0,
-                    19,
-                    state.lencode,
-                    0,
-                    state.work,
-                    opts,
-                  );
-                  state.lenbits = opts.bits;
-
-                  if (ret) {
-                    strm.msg = "invalid code lengths set";
-                    state.mode = BAD;
-                    break;
-                  }
-                  //Tracev((stderr, "inflate:       code lengths ok\n"));
-                  state.have = 0;
-                  state.mode = CODELENS;
-                /* falls through */
-                case CODELENS:
-                  while (state.have < state.nlen + state.ndist) {
-                    for (;;) {
-                      here =
-                        state.lencode[
-                          hold & ((1 << state.lenbits) - 1)
-                        ]; /*BITS(state.lenbits)*/
-                      here_bits = here >>> 24;
-                      here_op = (here >>> 16) & 0xff;
-                      here_val = here & 0xffff;
-
-                      if (here_bits <= bits) {
-                        break;
-                      }
-                      //--- PULLBYTE() ---//
-                      if (have === 0) {
-                        break inf_leave;
-                      }
-                      have--;
-                      hold += input[next++] << bits;
-                      bits += 8;
-                      //---//
-                    }
-                    if (here_val < 16) {
-                      //--- DROPBITS(here.bits) ---//
-                      hold >>>= here_bits;
-                      bits -= here_bits;
-                      //---//
-                      state.lens[state.have++] = here_val;
-                    } else {
-                      if (here_val === 16) {
-                        //=== NEEDBITS(here.bits + 2);
-                        n = here_bits + 2;
-                        while (bits < n) {
-                          if (have === 0) {
-                            break inf_leave;
-                          }
-                          have--;
-                          hold += input[next++] << bits;
-                          bits += 8;
-                        }
-                        //===//
-                        //--- DROPBITS(here.bits) ---//
-                        hold >>>= here_bits;
-                        bits -= here_bits;
-                        //---//
-                        if (state.have === 0) {
-                          strm.msg = "invalid bit length repeat";
-                          state.mode = BAD;
-                          break;
-                        }
-                        len = state.lens[state.have - 1];
-                        copy = 3 + (hold & 0x03); //BITS(2);
-                        //--- DROPBITS(2) ---//
-                        hold >>>= 2;
-                        bits -= 2;
-                        //---//
-                      } else if (here_val === 17) {
-                        //=== NEEDBITS(here.bits + 3);
-                        n = here_bits + 3;
-                        while (bits < n) {
-                          if (have === 0) {
-                            break inf_leave;
-                          }
-                          have--;
-                          hold += input[next++] << bits;
-                          bits += 8;
-                        }
-                        //===//
-                        //--- DROPBITS(here.bits) ---//
-                        hold >>>= here_bits;
-                        bits -= here_bits;
-                        //---//
-                        len = 0;
-                        copy = 3 + (hold & 0x07); //BITS(3);
-                        //--- DROPBITS(3) ---//
-                        hold >>>= 3;
-                        bits -= 3;
-                        //---//
-                      } else {
-                        //=== NEEDBITS(here.bits + 7);
-                        n = here_bits + 7;
-                        while (bits < n) {
-                          if (have === 0) {
-                            break inf_leave;
-                          }
-                          have--;
-                          hold += input[next++] << bits;
-                          bits += 8;
-                        }
-                        //===//
-                        //--- DROPBITS(here.bits) ---//
-                        hold >>>= here_bits;
-                        bits -= here_bits;
-                        //---//
-                        len = 0;
-                        copy = 11 + (hold & 0x7f); //BITS(7);
-                        //--- DROPBITS(7) ---//
-                        hold >>>= 7;
-                        bits -= 7;
-                        //---//
-                      }
-                      if (state.have + copy > state.nlen + state.ndist) {
-                        strm.msg = "invalid bit length repeat";
-                        state.mode = BAD;
-                        break;
-                      }
-                      while (copy--) {
-                        state.lens[state.have++] = len;
-                      }
-                    }
-                  }
-
-                  /* handle error breaks in while */
-                  if (state.mode === BAD) {
-                    break;
-                  }
-
-                  /* check for end-of-block code (better have one) */
-                  if (state.lens[256] === 0) {
-                    strm.msg = "invalid code -- missing end-of-block";
-                    state.mode = BAD;
-                    break;
-                  }
-
-                  /* build code tables -- note: do not change the lenbits or distbits
-         values here (9 and 6) without reading the comments in inftrees.h
-         concerning the ENOUGH constants, which depend on those values */
-                  state.lenbits = 9;
-
-                  opts = { bits: state.lenbits };
-                  ret = inflate_table(
-                    LENS,
-                    state.lens,
-                    0,
-                    state.nlen,
-                    state.lencode,
-                    0,
-                    state.work,
-                    opts,
-                  );
-                  // We have separate tables & no pointers. 2 commented lines below not needed.
-                  // state.next_index = opts.table_index;
-                  state.lenbits = opts.bits;
-                  // state.lencode = state.next;
-
-                  if (ret) {
-                    strm.msg = "invalid literal/lengths set";
-                    state.mode = BAD;
-                    break;
-                  }
-
-                  state.distbits = 6;
-                  //state.distcode.copy(state.codes);
-                  // Switch to use dynamic table
-                  state.distcode = state.distdyn;
-                  opts = { bits: state.distbits };
-                  ret = inflate_table(
-                    DISTS,
-                    state.lens,
-                    state.nlen,
-                    state.ndist,
-                    state.distcode,
-                    0,
-                    state.work,
-                    opts,
-                  );
-                  // We have separate tables & no pointers. 2 commented lines below not needed.
-                  // state.next_index = opts.table_index;
-                  state.distbits = opts.bits;
-                  // state.distcode = state.next;
-
-                  if (ret) {
-                    strm.msg = "invalid distances set";
-                    state.mode = BAD;
-                    break;
-                  }
-                  //Tracev((stderr, 'inflate:       codes ok\n'));
-                  state.mode = LEN_;
-                  if (flush === Z_TREES) {
-                    break inf_leave;
-                  }
-                /* falls through */
-                case LEN_:
-                  state.mode = LEN;
-                /* falls through */
-                case LEN:
-                  if (have >= 6 && left >= 258) {
-                    //--- RESTORE() ---
-                    strm.next_out = put;
-                    strm.avail_out = left;
-                    strm.next_in = next;
-                    strm.avail_in = have;
-                    state.hold = hold;
-                    state.bits = bits;
-                    //---
-                    inflate_fast(strm, _out);
-                    //--- LOAD() ---
-                    put = strm.next_out;
-                    output = strm.output;
-                    left = strm.avail_out;
-                    next = strm.next_in;
-                    input = strm.input;
-                    have = strm.avail_in;
-                    hold = state.hold;
-                    bits = state.bits;
-                    //---
-
-                    if (state.mode === TYPE) {
-                      state.back = -1;
-                    }
-                    break;
-                  }
-                  state.back = 0;
-                  for (;;) {
-                    here =
-                      state.lencode[
-                        hold & ((1 << state.lenbits) - 1)
-                      ]; /*BITS(state.lenbits)*/
-                    here_bits = here >>> 24;
-                    here_op = (here >>> 16) & 0xff;
-                    here_val = here & 0xffff;
-
-                    if (here_bits <= bits) {
-                      break;
-                    }
-                    //--- PULLBYTE() ---//
-                    if (have === 0) {
-                      break inf_leave;
-                    }
-                    have--;
-                    hold += input[next++] << bits;
-                    bits += 8;
-                    //---//
-                  }
-                  if (here_op && (here_op & 0xf0) === 0) {
-                    last_bits = here_bits;
-                    last_op = here_op;
-                    last_val = here_val;
-                    for (;;) {
-                      here =
-                        state.lencode[
-                          last_val +
-                            ((hold &
-                              ((1 << (last_bits + last_op)) -
-                                1)) /*BITS(last.bits + last.op)*/ >>
-                              last_bits)
-                        ];
-                      here_bits = here >>> 24;
-                      here_op = (here >>> 16) & 0xff;
-                      here_val = here & 0xffff;
-
-                      if (last_bits + here_bits <= bits) {
-                        break;
-                      }
-                      //--- PULLBYTE() ---//
-                      if (have === 0) {
-                        break inf_leave;
-                      }
-                      have--;
-                      hold += input[next++] << bits;
-                      bits += 8;
-                      //---//
-                    }
-                    //--- DROPBITS(last.bits) ---//
-                    hold >>>= last_bits;
-                    bits -= last_bits;
-                    //---//
-                    state.back += last_bits;
-                  }
-                  //--- DROPBITS(here.bits) ---//
-                  hold >>>= here_bits;
-                  bits -= here_bits;
-                  //---//
-                  state.back += here_bits;
-                  state.length = here_val;
-                  if (here_op === 0) {
-                    //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?
-                    //        "inflate:         literal '%c'\n" :
-                    //        "inflate:         literal 0x%02x\n", here.val));
-                    state.mode = LIT;
-                    break;
-                  }
-                  if (here_op & 32) {
-                    //Tracevv((stderr, "inflate:         end of block\n"));
-                    state.back = -1;
-                    state.mode = TYPE;
-                    break;
-                  }
-                  if (here_op & 64) {
-                    strm.msg = "invalid literal/length code";
-                    state.mode = BAD;
-                    break;
-                  }
-                  state.extra = here_op & 15;
-                  state.mode = LENEXT;
-                /* falls through */
-                case LENEXT:
-                  if (state.extra) {
-                    //=== NEEDBITS(state.extra);
-                    n = state.extra;
-                    while (bits < n) {
-                      if (have === 0) {
-                        break inf_leave;
-                      }
-                      have--;
-                      hold += input[next++] << bits;
-                      bits += 8;
-                    }
-                    //===//
-                    state.length +=
-                      hold & ((1 << state.extra) - 1) /*BITS(state.extra)*/;
-                    //--- DROPBITS(state.extra) ---//
-                    hold >>>= state.extra;
-                    bits -= state.extra;
-                    //---//
-                    state.back += state.extra;
-                  }
-                  //Tracevv((stderr, "inflate:         length %u\n", state.length));
-                  state.was = state.length;
-                  state.mode = DIST;
-                /* falls through */
-                case DIST:
-                  for (;;) {
-                    here =
-                      state.distcode[
-                        hold & ((1 << state.distbits) - 1)
-                      ]; /*BITS(state.distbits)*/
-                    here_bits = here >>> 24;
-                    here_op = (here >>> 16) & 0xff;
-                    here_val = here & 0xffff;
-
-                    if (here_bits <= bits) {
-                      break;
-                    }
-                    //--- PULLBYTE() ---//
-                    if (have === 0) {
-                      break inf_leave;
-                    }
-                    have--;
-                    hold += input[next++] << bits;
-                    bits += 8;
-                    //---//
-                  }
-                  if ((here_op & 0xf0) === 0) {
-                    last_bits = here_bits;
-                    last_op = here_op;
-                    last_val = here_val;
-                    for (;;) {
-                      here =
-                        state.distcode[
-                          last_val +
-                            ((hold &
-                              ((1 << (last_bits + last_op)) -
-                                1)) /*BITS(last.bits + last.op)*/ >>
-                              last_bits)
-                        ];
-                      here_bits = here >>> 24;
-                      here_op = (here >>> 16) & 0xff;
-                      here_val = here & 0xffff;
-
-                      if (last_bits + here_bits <= bits) {
-                        break;
-                      }
-                      //--- PULLBYTE() ---//
-                      if (have === 0) {
-                        break inf_leave;
-                      }
-                      have--;
-                      hold += input[next++] << bits;
-                      bits += 8;
-                      //---//
-                    }
-                    //--- DROPBITS(last.bits) ---//
-                    hold >>>= last_bits;
-                    bits -= last_bits;
-                    //---//
-                    state.back += last_bits;
-                  }
-                  //--- DROPBITS(here.bits) ---//
-                  hold >>>= here_bits;
-                  bits -= here_bits;
-                  //---//
-                  state.back += here_bits;
-                  if (here_op & 64) {
-                    strm.msg = "invalid distance code";
-                    state.mode = BAD;
-                    break;
-                  }
-                  state.offset = here_val;
-                  state.extra = here_op & 15;
-                  state.mode = DISTEXT;
-                /* falls through */
-                case DISTEXT:
-                  if (state.extra) {
-                    //=== NEEDBITS(state.extra);
-                    n = state.extra;
-                    while (bits < n) {
-                      if (have === 0) {
-                        break inf_leave;
-                      }
-                      have--;
-                      hold += input[next++] << bits;
-                      bits += 8;
-                    }
-                    //===//
-                    state.offset +=
-                      hold & ((1 << state.extra) - 1) /*BITS(state.extra)*/;
-                    //--- DROPBITS(state.extra) ---//
-                    hold >>>= state.extra;
-                    bits -= state.extra;
-                    //---//
-                    state.back += state.extra;
-                  }
-                  //#ifdef INFLATE_STRICT
-                  if (state.offset > state.dmax) {
-                    strm.msg = "invalid distance too far back";
-                    state.mode = BAD;
-                    break;
-                  }
-                  //#endif
-                  //Tracevv((stderr, "inflate:         distance %u\n", state.offset));
-                  state.mode = MATCH;
-                /* falls through */
-                case MATCH:
-                  if (left === 0) {
-                    break inf_leave;
-                  }
-                  copy = _out - left;
-                  if (state.offset > copy) {
-                    /* copy from window */
-                    copy = state.offset - copy;
-                    if (copy > state.whave) {
-                      if (state.sane) {
-                        strm.msg = "invalid distance too far back";
-                        state.mode = BAD;
-                        break;
-                      }
-                      // (!) This block is disabled in zlib defailts,
-                      // don't enable it for binary compatibility
-                      //#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR
-                      //          Trace((stderr, "inflate.c too far\n"));
-                      //          copy -= state.whave;
-                      //          if (copy > state.length) { copy = state.length; }
-                      //          if (copy > left) { copy = left; }
-                      //          left -= copy;
-                      //          state.length -= copy;
-                      //          do {
-                      //            output[put++] = 0;
-                      //          } while (--copy);
-                      //          if (state.length === 0) { state.mode = LEN; }
-                      //          break;
-                      //#endif
-                    }
-                    if (copy > state.wnext) {
-                      copy -= state.wnext;
-                      from = state.wsize - copy;
-                    } else {
-                      from = state.wnext - copy;
-                    }
-                    if (copy > state.length) {
-                      copy = state.length;
-                    }
-                    from_source = state.window;
-                  } else {
-                    /* copy from output */
-                    from_source = output;
-                    from = put - state.offset;
-                    copy = state.length;
-                  }
-                  if (copy > left) {
-                    copy = left;
-                  }
-                  left -= copy;
-                  state.length -= copy;
-                  do {
-                    output[put++] = from_source[from++];
-                  } while (--copy);
-                  if (state.length === 0) {
-                    state.mode = LEN;
-                  }
-                  break;
-                case LIT:
-                  if (left === 0) {
-                    break inf_leave;
-                  }
-                  output[put++] = state.length;
-                  left--;
-                  state.mode = LEN;
-                  break;
-                case CHECK:
-                  if (state.wrap) {
-                    //=== NEEDBITS(32);
-                    while (bits < 32) {
-                      if (have === 0) {
-                        break inf_leave;
-                      }
-                      have--;
-                      // Use '|' insdead of '+' to make sure that result is signed
-                      hold |= input[next++] << bits;
-                      bits += 8;
-                    }
-                    //===//
-                    _out -= left;
-                    strm.total_out += _out;
-                    state.total += _out;
-                    if (_out) {
-                      strm.adler = state.check =
-                        /*UPDATE(state.check, put - _out, _out);*/
-                        state.flags
-                          ? crc32(state.check, output, _out, put - _out)
-                          : adler32(state.check, output, _out, put - _out);
-                    }
-                    _out = left;
-                    // NB: crc32 stored as signed 32-bit int, zswap32 returns signed too
-                    if ((state.flags ? hold : zswap32(hold)) !== state.check) {
-                      strm.msg = "incorrect data check";
-                      state.mode = BAD;
-                      break;
-                    }
-                    //=== INITBITS();
-                    hold = 0;
-                    bits = 0;
-                    //===//
-                    //Tracev((stderr, "inflate:   check matches trailer\n"));
-                  }
-                  state.mode = LENGTH;
-                /* falls through */
-                case LENGTH:
-                  if (state.wrap && state.flags) {
-                    //=== NEEDBITS(32);
-                    while (bits < 32) {
-                      if (have === 0) {
-                        break inf_leave;
-                      }
-                      have--;
-                      hold += input[next++] << bits;
-                      bits += 8;
-                    }
-                    //===//
-                    if (hold !== (state.total & 0xffffffff)) {
-                      strm.msg = "incorrect length check";
-                      state.mode = BAD;
-                      break;
-                    }
-                    //=== INITBITS();
-                    hold = 0;
-                    bits = 0;
-                    //===//
-                    //Tracev((stderr, "inflate:   length matches trailer\n"));
-                  }
-                  state.mode = DONE;
-                /* falls through */
-                case DONE:
-                  ret = Z_STREAM_END;
-                  break inf_leave;
-                case BAD:
-                  ret = Z_DATA_ERROR;
-                  break inf_leave;
-                case MEM:
-                  return Z_MEM_ERROR;
-                case SYNC:
-                /* falls through */
-                default:
-                  return Z_STREAM_ERROR;
-              }
-            }
-
-            // inf_leave <- here is real place for "goto inf_leave", emulated via "break inf_leave"
-
-            /*
-     Return from inflate(), updating the total counts and the check value.
-     If there was no progress during the inflate() call, return a buffer
-     error.  Call updatewindow() to create and/or update the window state.
-     Note: a memory error from inflate() is non-recoverable.
-   */
-
-            //--- RESTORE() ---
-            strm.next_out = put;
-            strm.avail_out = left;
-            strm.next_in = next;
-            strm.avail_in = have;
-            state.hold = hold;
-            state.bits = bits;
-            //---
-
-            if (
-              state.wsize ||
-              (_out !== strm.avail_out &&
-                state.mode < BAD &&
-                (state.mode < CHECK || flush !== Z_FINISH))
-            ) {
-              if (
-                updatewindow(
-                  strm,
-                  strm.output,
-                  strm.next_out,
-                  _out - strm.avail_out,
-                )
-              ) {
-                state.mode = MEM;
-                return Z_MEM_ERROR;
-              }
-            }
-            _in -= strm.avail_in;
-            _out -= strm.avail_out;
-            strm.total_in += _in;
-            strm.total_out += _out;
-            state.total += _out;
-            if (state.wrap && _out) {
-              strm.adler = state.check =
-                /*UPDATE(state.check, strm.next_out - _out, _out);*/
-                state.flags
-                  ? crc32(state.check, output, _out, strm.next_out - _out)
-                  : adler32(state.check, output, _out, strm.next_out - _out);
-            }
-            strm.data_type =
-              state.bits +
-              (state.last ? 64 : 0) +
-              (state.mode === TYPE ? 128 : 0) +
-              (state.mode === LEN_ || state.mode === COPY_ ? 256 : 0);
-            if (
-              ((_in === 0 && _out === 0) || flush === Z_FINISH) &&
-              ret === Z_OK
-            ) {
-              ret = Z_BUF_ERROR;
-            }
-            return ret;
-          }
-
-          function inflateEnd(strm) {
-            if (!strm || !strm.state /*|| strm->zfree == (free_func)0*/) {
-              return Z_STREAM_ERROR;
-            }
-
-            var state = strm.state;
-            if (state.window) {
-              state.window = null;
-            }
-            strm.state = null;
-            return Z_OK;
-          }
-
-          function inflateGetHeader(strm, head) {
-            var state;
-
-            /* check state */
-            if (!strm || !strm.state) {
-              return Z_STREAM_ERROR;
-            }
-            state = strm.state;
-            if ((state.wrap & 2) === 0) {
-              return Z_STREAM_ERROR;
-            }
-
-            /* save header structure */
-            state.head = head;
-            head.done = false;
-            return Z_OK;
-          }
-
-          function inflateSetDictionary(strm, dictionary) {
-            var dictLength = dictionary.length;
-
-            var state;
-            var dictid;
-            var ret;
-
-            /* check state */
-            if (!strm /* == Z_NULL */ || !strm.state /* == Z_NULL */) {
-              return Z_STREAM_ERROR;
-            }
-            state = strm.state;
-
-            if (state.wrap !== 0 && state.mode !== DICT) {
-              return Z_STREAM_ERROR;
-            }
-
-            /* check for correct dictionary identifier */
-            if (state.mode === DICT) {
-              dictid = 1; /* adler32(0, null, 0)*/
-              /* dictid = adler32(dictid, dictionary, dictLength); */
-              dictid = adler32(dictid, dictionary, dictLength, 0);
-              if (dictid !== state.check) {
-                return Z_DATA_ERROR;
-              }
-            }
-            /* copy dictionary to window using updatewindow(), which will amend the
-   existing dictionary if appropriate */
-            ret = updatewindow(strm, dictionary, dictLength, dictLength);
-            if (ret) {
-              state.mode = MEM;
-              return Z_MEM_ERROR;
-            }
-            state.havedict = 1;
-            // Tracev((stderr, "inflate:   dictionary set\n"));
-            return Z_OK;
-          }
-
-          exports.inflateReset = inflateReset;
-          exports.inflateReset2 = inflateReset2;
-          exports.inflateResetKeep = inflateResetKeep;
-          exports.inflateInit = inflateInit;
-          exports.inflateInit2 = inflateInit2;
-          exports.inflate = inflate;
-          exports.inflateEnd = inflateEnd;
-          exports.inflateGetHeader = inflateGetHeader;
-          exports.inflateSetDictionary = inflateSetDictionary;
-          exports.inflateInfo = "pako inflate (from Nodeca project)";
-
-          /* Not implemented
-exports.inflateCopy = inflateCopy;
-exports.inflateGetDictionary = inflateGetDictionary;
-exports.inflateMark = inflateMark;
-exports.inflatePrime = inflatePrime;
-exports.inflateSync = inflateSync;
-exports.inflateSyncPoint = inflateSyncPoint;
-exports.inflateUndermine = inflateUndermine;
-*/
-        },
-        {
-          "../utils/common": 41,
-          "./adler32": 43,
-          "./crc32": 45,
-          "./inffast": 48,
-          "./inftrees": 50,
-        },
-      ],
-      50: [
-        function (require, module, exports) {
-          "use strict";
-
-          // (C) 1995-2013 Jean-loup Gailly and Mark Adler
-          // (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
-          //
-          // This software is provided 'as-is', without any express or implied
-          // warranty. In no event will the authors be held liable for any damages
-          // arising from the use of this software.
-          //
-          // Permission is granted to anyone to use this software for any purpose,
-          // including commercial applications, and to alter it and redistribute it
-          // freely, subject to the following restrictions:
-          //
-          // 1. The origin of this software must not be misrepresented; you must not
-          //   claim that you wrote the original software. If you use this software
-          //   in a product, an acknowledgment in the product documentation would be
-          //   appreciated but is not required.
-          // 2. Altered source versions must be plainly marked as such, and must not be
-          //   misrepresented as being the original software.
-          // 3. This notice may not be removed or altered from any source distribution.
-
-          var utils = require("../utils/common");
-
-          var MAXBITS = 15;
-          var ENOUGH_LENS = 852;
-          var ENOUGH_DISTS = 592;
-          //var ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS);
-
-          var CODES = 0;
-          var LENS = 1;
-          var DISTS = 2;
-
-          var lbase = [
-            /* Length codes 257..285 base */ 3, 4, 5, 6, 7, 8, 9, 10, 11, 13,
-            15, 17, 19, 23, 27, 31, 35, 43, 51, 59, 67, 83, 99, 115, 131, 163,
-            195, 227, 258, 0, 0,
-          ];
-
-          var lext = [
-            /* Length codes 257..285 extra */ 16, 16, 16, 16, 16, 16, 16, 16,
-            17, 17, 17, 17, 18, 18, 18, 18, 19, 19, 19, 19, 20, 20, 20, 20, 21,
-            21, 21, 21, 16, 72, 78,
-          ];
-
-          var dbase = [
-            /* Distance codes 0..29 base */ 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33,
-            49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073,
-            4097, 6145, 8193, 12289, 16385, 24577, 0, 0,
-          ];
-
-          var dext = [
-            /* Distance codes 0..29 extra */ 16, 16, 16, 16, 17, 17, 18, 18, 19,
-            19, 20, 20, 21, 21, 22, 22, 23, 23, 24, 24, 25, 25, 26, 26, 27, 27,
-            28, 28, 29, 29, 64, 64,
-          ];
-
-          module.exports = function inflate_table(
-            type,
-            lens,
-            lens_index,
-            codes,
-            table,
-            table_index,
-            work,
-            opts,
-          ) {
-            var bits = opts.bits;
-            //here = opts.here; /* table entry for duplication */
-
-            var len = 0; /* a code's length in bits */
-            var sym = 0; /* index of code symbols */
-            var min = 0,
-              max = 0; /* minimum and maximum code lengths */
-            var root = 0; /* number of index bits for root table */
-            var curr = 0; /* number of index bits for current table */
-            var drop = 0; /* code bits to drop for sub-table */
-            var left = 0; /* number of prefix codes available */
-            var used = 0; /* code entries in table used */
-            var huff = 0; /* Huffman code */
-            var incr; /* for incrementing code, index */
-            var fill; /* index for replicating entries */
-            var low; /* low bits for current root entry */
-            var mask; /* mask for low root bits */
-            var next; /* next available space in table */
-            var base = null; /* base value table to use */
-            var base_index = 0;
-            //  var shoextra;    /* extra bits table to use */
-            var end; /* use base and extra for symbol > end */
-            var count = new utils.Buf16(MAXBITS + 1); //[MAXBITS+1];    /* number of codes of each length */
-            var offs = new utils.Buf16(MAXBITS + 1); //[MAXBITS+1];     /* offsets in table for each length */
-            var extra = null;
-            var extra_index = 0;
-
-            var here_bits, here_op, here_val;
-
-            /*
-   Process a set of code lengths to create a canonical Huffman code.  The
-   code lengths are lens[0..codes-1].  Each length corresponds to the
-   symbols 0..codes-1.  The Huffman code is generated by first sorting the
-   symbols by length from short to long, and retaining the symbol order
-   for codes with equal lengths.  Then the code starts with all zero bits
-   for the first code of the shortest length, and the codes are integer
-   increments for the same length, and zeros are appended as the length
-   increases.  For the deflate format, these bits are stored backwards
-   from their more natural integer increment ordering, and so when the
-   decoding tables are built in the large loop below, the integer codes
-   are incremented backwards.
-
-   This routine assumes, but does not check, that all of the entries in
-   lens[] are in the range 0..MAXBITS.  The caller must assure this.
-   1..MAXBITS is interpreted as that code length.  zero means that that
-   symbol does not occur in this code.
-
-   The codes are sorted by computing a count of codes for each length,
-   creating from that a table of starting indices for each length in the
-   sorted table, and then entering the symbols in order in the sorted
-   table.  The sorted table is work[], with that space being provided by
-   the caller.
-
-   The length counts are used for other purposes as well, i.e. finding
-   the minimum and maximum length codes, determining if there are any
-   codes at all, checking for a valid set of lengths, and looking ahead
-   at length counts to determine sub-table sizes when building the
-   decoding tables.
-   */
-
-            /* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */
-            for (len = 0; len <= MAXBITS; len++) {
-              count[len] = 0;
-            }
-            for (sym = 0; sym < codes; sym++) {
-              count[lens[lens_index + sym]]++;
-            }
-
-            /* bound code lengths, force root to be within code lengths */
-            root = bits;
-            for (max = MAXBITS; max >= 1; max--) {
-              if (count[max] !== 0) {
-                break;
-              }
-            }
-            if (root > max) {
-              root = max;
-            }
-            if (max === 0) {
-              /* no symbols to code at all */
-              //table.op[opts.table_index] = 64;  //here.op = (var char)64;    /* invalid code marker */
-              //table.bits[opts.table_index] = 1;   //here.bits = (var char)1;
-              //table.val[opts.table_index++] = 0;   //here.val = (var short)0;
-              table[table_index++] = (1 << 24) | (64 << 16) | 0;
-
-              //table.op[opts.table_index] = 64;
-              //table.bits[opts.table_index] = 1;
-              //table.val[opts.table_index++] = 0;
-              table[table_index++] = (1 << 24) | (64 << 16) | 0;
-
-              opts.bits = 1;
-              return 0; /* no symbols, but wait for decoding to report error */
-            }
-            for (min = 1; min < max; min++) {
-              if (count[min] !== 0) {
-                break;
-              }
-            }
-            if (root < min) {
-              root = min;
-            }
-
-            /* check for an over-subscribed or incomplete set of lengths */
-            left = 1;
-            for (len = 1; len <= MAXBITS; len++) {
-              left <<= 1;
-              left -= count[len];
-              if (left < 0) {
-                return -1;
-              } /* over-subscribed */
-            }
-            if (left > 0 && (type === CODES || max !== 1)) {
-              return -1; /* incomplete set */
-            }
-
-            /* generate offsets into symbol table for each length for sorting */
-            offs[1] = 0;
-            for (len = 1; len < MAXBITS; len++) {
-              offs[len + 1] = offs[len] + count[len];
-            }
-
-            /* sort symbols by length, by symbol order within each length */
-            for (sym = 0; sym < codes; sym++) {
-              if (lens[lens_index + sym] !== 0) {
-                work[offs[lens[lens_index + sym]]++] = sym;
-              }
-            }
-
-            /*
-   Create and fill in decoding tables.  In this loop, the table being
-   filled is at next and has curr index bits.  The code being used is huff
-   with length len.  That code is converted to an index by dropping drop
-   bits off of the bottom.  For codes where len is less than drop + curr,
-   those top drop + curr - len bits are incremented through all values to
-   fill the table with replicated entries.
-
-   root is the number of index bits for the root table.  When len exceeds
-   root, sub-tables are created pointed to by the root entry with an index
-   of the low root bits of huff.  This is saved in low to check for when a
-   new sub-table should be started.  drop is zero when the root table is
-   being filled, and drop is root when sub-tables are being filled.
-
-   When a new sub-table is needed, it is necessary to look ahead in the
-   code lengths to determine what size sub-table is needed.  The length
-   counts are used for this, and so count[] is decremented as codes are
-   entered in the tables.
-
-   used keeps track of how many table entries have been allocated from the
-   provided *table space.  It is checked for LENS and DIST tables against
-   the constants ENOUGH_LENS and ENOUGH_DISTS to guard against changes in
-   the initial root table size constants.  See the comments in inftrees.h
-   for more information.
-
-   sym increments through all symbols, and the loop terminates when
-   all codes of length max, i.e. all codes, have been processed.  This
-   routine permits incomplete codes, so another loop after this one fills
-   in the rest of the decoding tables with invalid code markers.
-   */
-
-            /* set up for code type */
-            // poor man optimization - use if-else instead of switch,
-            // to avoid deopts in old v8
-            if (type === CODES) {
-              base = extra = work; /* dummy value--not used */
-              end = 19;
-            } else if (type === LENS) {
-              base = lbase;
-              base_index -= 257;
-              extra = lext;
-              extra_index -= 257;
-              end = 256;
-            } else {
-              /* DISTS */
-              base = dbase;
-              extra = dext;
-              end = -1;
-            }
-
-            /* initialize opts for loop */
-            huff = 0; /* starting code */
-            sym = 0; /* starting code symbol */
-            len = min; /* starting code length */
-            next = table_index; /* current table to fill in */
-            curr = root; /* current table index bits */
-            drop = 0; /* current bits to drop from code for index */
-            low = -1; /* trigger new sub-table when len > root */
-            used = 1 << root; /* use root table entries */
-            mask = used - 1; /* mask for comparing low */
-
-            /* check available table space */
-            if (
-              (type === LENS && used > ENOUGH_LENS) ||
-              (type === DISTS && used > ENOUGH_DISTS)
-            ) {
-              return 1;
-            }
-
-            /* process all codes and make table entries */
-            for (;;) {
-              /* create table entry */
-              here_bits = len - drop;
-              if (work[sym] < end) {
-                here_op = 0;
-                here_val = work[sym];
-              } else if (work[sym] > end) {
-                here_op = extra[extra_index + work[sym]];
-                here_val = base[base_index + work[sym]];
-              } else {
-                here_op = 32 + 64; /* end of block */
-                here_val = 0;
-              }
-
-              /* replicate for those indices with low len bits equal to huff */
-              incr = 1 << (len - drop);
-              fill = 1 << curr;
-              min = fill; /* save offset to next table */
-              do {
-                fill -= incr;
-                table[next + (huff >> drop) + fill] =
-                  (here_bits << 24) | (here_op << 16) | here_val | 0;
-              } while (fill !== 0);
-
-              /* backwards increment the len-bit code huff */
-              incr = 1 << (len - 1);
-              while (huff & incr) {
-                incr >>= 1;
-              }
-              if (incr !== 0) {
-                huff &= incr - 1;
-                huff += incr;
-              } else {
-                huff = 0;
-              }
-
-              /* go to next symbol, update count, len */
-              sym++;
-              if (--count[len] === 0) {
-                if (len === max) {
-                  break;
-                }
-                len = lens[lens_index + work[sym]];
-              }
-
-              /* create new sub-table if needed */
-              if (len > root && (huff & mask) !== low) {
-                /* if first time, transition to sub-tables */
-                if (drop === 0) {
-                  drop = root;
-                }
-
-                /* increment past last table */
-                next += min; /* here min is 1 << curr */
-
-                /* determine length of next table */
-                curr = len - drop;
-                left = 1 << curr;
-                while (curr + drop < max) {
-                  left -= count[curr + drop];
-                  if (left <= 0) {
-                    break;
-                  }
-                  curr++;
-                  left <<= 1;
-                }
-
-                /* check for enough space */
-                used += 1 << curr;
-                if (
-                  (type === LENS && used > ENOUGH_LENS) ||
-                  (type === DISTS && used > ENOUGH_DISTS)
-                ) {
-                  return 1;
-                }
-
-                /* point entry in root table to sub-table */
-                low = huff & mask;
-                /*table.op[low] = curr;
-      table.bits[low] = root;
-      table.val[low] = next - opts.table_index;*/
-                table[low] =
-                  (root << 24) | (curr << 16) | (next - table_index) | 0;
-              }
-            }
-
-            /* fill in remaining table entry if code is incomplete (guaranteed to have
-   at most one remaining entry, since if the code is incomplete, the
-   maximum code length that was allowed to get this far is one bit) */
-            if (huff !== 0) {
-              //table.op[next + huff] = 64;            /* invalid code marker */
-              //table.bits[next + huff] = len - drop;
-              //table.val[next + huff] = 0;
-              table[next + huff] = ((len - drop) << 24) | (64 << 16) | 0;
-            }
-
-            /* set return parameters */
-            //opts.table_index += used;
-            opts.bits = root;
-            return 0;
-          };
-        },
-        { "../utils/common": 41 },
-      ],
-      51: [
-        function (require, module, exports) {
-          "use strict";
-
-          // (C) 1995-2013 Jean-loup Gailly and Mark Adler
-          // (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
-          //
-          // This software is provided 'as-is', without any express or implied
-          // warranty. In no event will the authors be held liable for any damages
-          // arising from the use of this software.
-          //
-          // Permission is granted to anyone to use this software for any purpose,
-          // including commercial applications, and to alter it and redistribute it
-          // freely, subject to the following restrictions:
-          //
-          // 1. The origin of this software must not be misrepresented; you must not
-          //   claim that you wrote the original software. If you use this software
-          //   in a product, an acknowledgment in the product documentation would be
-          //   appreciated but is not required.
-          // 2. Altered source versions must be plainly marked as such, and must not be
-          //   misrepresented as being the original software.
-          // 3. This notice may not be removed or altered from any source distribution.
-
-          module.exports = {
-            2: "need dictionary" /* Z_NEED_DICT       2  */,
-            1: "stream end" /* Z_STREAM_END      1  */,
-            0: "" /* Z_OK              0  */,
-            "-1": "file error" /* Z_ERRNO         (-1) */,
-            "-2": "stream error" /* Z_STREAM_ERROR  (-2) */,
-            "-3": "data error" /* Z_DATA_ERROR    (-3) */,
-            "-4": "insufficient memory" /* Z_MEM_ERROR     (-4) */,
-            "-5": "buffer error" /* Z_BUF_ERROR     (-5) */,
-            "-6": "incompatible version" /* Z_VERSION_ERROR (-6) */,
-          };
-        },
-        {},
-      ],
-      52: [
-        function (require, module, exports) {
-          "use strict";
-
-          // (C) 1995-2013 Jean-loup Gailly and Mark Adler
-          // (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
-          //
-          // This software is provided 'as-is', without any express or implied
-          // warranty. In no event will the authors be held liable for any damages
-          // arising from the use of this software.
-          //
-          // Permission is granted to anyone to use this software for any purpose,
-          // including commercial applications, and to alter it and redistribute it
-          // freely, subject to the following restrictions:
-          //
-          // 1. The origin of this software must not be misrepresented; you must not
-          //   claim that you wrote the original software. If you use this software
-          //   in a product, an acknowledgment in the product documentation would be
-          //   appreciated but is not required.
-          // 2. Altered source versions must be plainly marked as such, and must not be
-          //   misrepresented as being the original software.
-          // 3. This notice may not be removed or altered from any source distribution.
-
-          var utils = require("../utils/common");
-
-          /* Public constants ==========================================================*/
-          /* ===========================================================================*/
-
-          //var Z_FILTERED          = 1;
-          //var Z_HUFFMAN_ONLY      = 2;
-          //var Z_RLE               = 3;
-          var Z_FIXED = 4;
-          //var Z_DEFAULT_STRATEGY  = 0;
-
-          /* Possible values of the data_type field (though see inflate()) */
-          var Z_BINARY = 0;
-          var Z_TEXT = 1;
-          //var Z_ASCII             = 1; // = Z_TEXT
-          var Z_UNKNOWN = 2;
-
-          /*============================================================================*/
-
-          function zero(buf) {
-            var len = buf.length;
-            while (--len >= 0) {
-              buf[len] = 0;
-            }
-          }
-
-          // From zutil.h
-
-          var STORED_BLOCK = 0;
-          var STATIC_TREES = 1;
-          var DYN_TREES = 2;
-          /* The three kinds of block type */
-
-          var MIN_MATCH = 3;
-          var MAX_MATCH = 258;
-          /* The minimum and maximum match lengths */
-
-          // From deflate.h
-          /* ===========================================================================
-           * Internal compression state.
-           */
-
-          var LENGTH_CODES = 29;
-          /* number of length codes, not counting the special END_BLOCK code */
-
-          var LITERALS = 256;
-          /* number of literal bytes 0..255 */
-
-          var L_CODES = LITERALS + 1 + LENGTH_CODES;
-          /* number of Literal or Length codes, including the END_BLOCK code */
-
-          var D_CODES = 30;
-          /* number of distance codes */
-
-          var BL_CODES = 19;
-          /* number of codes used to transfer the bit lengths */
-
-          var HEAP_SIZE = 2 * L_CODES + 1;
-          /* maximum heap size */
-
-          var MAX_BITS = 15;
-          /* All codes must not exceed MAX_BITS bits */
-
-          var Buf_size = 16;
-          /* size of bit buffer in bi_buf */
-
-          /* ===========================================================================
-           * Constants
-           */
-
-          var MAX_BL_BITS = 7;
-          /* Bit length codes must not exceed MAX_BL_BITS bits */
-
-          var END_BLOCK = 256;
-          /* end of block literal code */
-
-          var REP_3_6 = 16;
-          /* repeat previous bit length 3-6 times (2 bits of repeat count) */
-
-          var REPZ_3_10 = 17;
-          /* repeat a zero length 3-10 times  (3 bits of repeat count) */
-
-          var REPZ_11_138 = 18;
-          /* repeat a zero length 11-138 times  (7 bits of repeat count) */
-
-          /* eslint-disable comma-spacing,array-bracket-spacing */
-          var extra_lbits =
-            /* extra bits for each length code */
-            [
-              0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4,
-              4, 4, 5, 5, 5, 5, 0,
-            ];
-
-          var extra_dbits =
-            /* extra bits for each distance code */
-            [
-              0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9,
-              10, 10, 11, 11, 12, 12, 13, 13,
-            ];
-
-          var extra_blbits =
-            /* extra bits for each bit length code */
-            [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 7];
-
-          var bl_order = [
-            16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15,
-          ];
-          /* eslint-enable comma-spacing,array-bracket-spacing */
-
-          /* The lengths of the bit length codes are sent in order of decreasing
-           * probability, to avoid transmitting the lengths for unused bit length codes.
-           */
-
-          /* ===========================================================================
-           * Local data. These are initialized only once.
-           */
-
-          // We pre-fill arrays with 0 to avoid uninitialized gaps
-
-          var DIST_CODE_LEN = 512; /* see definition of array dist_code below */
-
-          // !!!! Use flat array insdead of structure, Freq = i*2, Len = i*2+1
-          var static_ltree = new Array((L_CODES + 2) * 2);
-          zero(static_ltree);
-          /* The static literal tree. Since the bit lengths are imposed, there is no
-           * need for the L_CODES extra codes used during heap construction. However
-           * The codes 286 and 287 are needed to build a canonical tree (see _tr_init
-           * below).
-           */
-
-          var static_dtree = new Array(D_CODES * 2);
-          zero(static_dtree);
-          /* The static distance tree. (Actually a trivial tree since all codes use
-           * 5 bits.)
-           */
-
-          var _dist_code = new Array(DIST_CODE_LEN);
-          zero(_dist_code);
-          /* Distance codes. The first 256 values correspond to the distances
-           * 3 .. 258, the last 256 values correspond to the top 8 bits of
-           * the 15 bit distances.
-           */
-
-          var _length_code = new Array(MAX_MATCH - MIN_MATCH + 1);
-          zero(_length_code);
-          /* length code for each normalized match length (0 == MIN_MATCH) */
-
-          var base_length = new Array(LENGTH_CODES);
-          zero(base_length);
-          /* First normalized length for each code (0 = MIN_MATCH) */
-
-          var base_dist = new Array(D_CODES);
-          zero(base_dist);
-          /* First normalized distance for each code (0 = distance of 1) */
-
-          function StaticTreeDesc(
-            static_tree,
-            extra_bits,
-            extra_base,
-            elems,
-            max_length,
-          ) {
-            this.static_tree = static_tree; /* static tree or NULL */
-            this.extra_bits = extra_bits; /* extra bits for each code or NULL */
-            this.extra_base = extra_base; /* base index for extra_bits */
-            this.elems = elems; /* max number of elements in the tree */
-            this.max_length = max_length; /* max bit length for the codes */
-
-            // show if `static_tree` has data or dummy - needed for monomorphic objects
-            this.has_stree = static_tree && static_tree.length;
-          }
-
-          var static_l_desc;
-          var static_d_desc;
-          var static_bl_desc;
-
-          function TreeDesc(dyn_tree, stat_desc) {
-            this.dyn_tree = dyn_tree; /* the dynamic tree */
-            this.max_code = 0; /* largest code with non zero frequency */
-            this.stat_desc = stat_desc; /* the corresponding static tree */
-          }
-
-          function d_code(dist) {
-            return dist < 256
-              ? _dist_code[dist]
-              : _dist_code[256 + (dist >>> 7)];
-          }
-
-          /* ===========================================================================
-           * Output a short LSB first on the stream.
-           * IN assertion: there is enough room in pendingBuf.
-           */
-          function put_short(s, w) {
-            //    put_byte(s, (uch)((w) & 0xff));
-            //    put_byte(s, (uch)((ush)(w) >> 8));
-            s.pending_buf[s.pending++] = w & 0xff;
-            s.pending_buf[s.pending++] = (w >>> 8) & 0xff;
-          }
-
-          /* ===========================================================================
-           * Send a value on a given number of bits.
-           * IN assertion: length <= 16 and value fits in length bits.
-           */
-          function send_bits(s, value, length) {
-            if (s.bi_valid > Buf_size - length) {
-              s.bi_buf |= (value << s.bi_valid) & 0xffff;
-              put_short(s, s.bi_buf);
-              s.bi_buf = value >> (Buf_size - s.bi_valid);
-              s.bi_valid += length - Buf_size;
-            } else {
-              s.bi_buf |= (value << s.bi_valid) & 0xffff;
-              s.bi_valid += length;
-            }
-          }
-
-          function send_code(s, c, tree) {
-            send_bits(s, tree[c * 2] /*.Code*/, tree[c * 2 + 1] /*.Len*/);
-          }
-
-          /* ===========================================================================
-           * Reverse the first len bits of a code, using straightforward code (a faster
-           * method would use a table)
-           * IN assertion: 1 <= len <= 15
-           */
-          function bi_reverse(code, len) {
-            var res = 0;
-            do {
-              res |= code & 1;
-              code >>>= 1;
-              res <<= 1;
-            } while (--len > 0);
-            return res >>> 1;
-          }
-
-          /* ===========================================================================
-           * Flush the bit buffer, keeping at most 7 bits in it.
-           */
-          function bi_flush(s) {
-            if (s.bi_valid === 16) {
-              put_short(s, s.bi_buf);
-              s.bi_buf = 0;
-              s.bi_valid = 0;
-            } else if (s.bi_valid >= 8) {
-              s.pending_buf[s.pending++] = s.bi_buf & 0xff;
-              s.bi_buf >>= 8;
-              s.bi_valid -= 8;
-            }
-          }
-
-          /* ===========================================================================
-           * Compute the optimal bit lengths for a tree and update the total bit length
-           * for the current block.
-           * IN assertion: the fields freq and dad are set, heap[heap_max] and
-           *    above are the tree nodes sorted by increasing frequency.
-           * OUT assertions: the field len is set to the optimal bit length, the
-           *     array bl_count contains the frequencies for each bit length.
-           *     The length opt_len is updated; static_len is also updated if stree is
-           *     not null.
-           */
-          function gen_bitlen(s, desc) {
-            //    deflate_state *s;
-            //    tree_desc *desc;    /* the tree descriptor */
-            var tree = desc.dyn_tree;
-            var max_code = desc.max_code;
-            var stree = desc.stat_desc.static_tree;
-            var has_stree = desc.stat_desc.has_stree;
-            var extra = desc.stat_desc.extra_bits;
-            var base = desc.stat_desc.extra_base;
-            var max_length = desc.stat_desc.max_length;
-            var h; /* heap index */
-            var n, m; /* iterate over the tree elements */
-            var bits; /* bit length */
-            var xbits; /* extra bits */
-            var f; /* frequency */
-            var overflow = 0; /* number of elements with bit length too large */
-
-            for (bits = 0; bits <= MAX_BITS; bits++) {
-              s.bl_count[bits] = 0;
-            }
-
-            /* In a first pass, compute the optimal bit lengths (which may
-             * overflow in the case of the bit length tree).
-             */
-            tree[
-              s.heap[s.heap_max] * 2 + 1
-            ] /*.Len*/ = 0; /* root of the heap */
-
-            for (h = s.heap_max + 1; h < HEAP_SIZE; h++) {
-              n = s.heap[h];
-              bits = tree[tree[n * 2 + 1] /*.Dad*/ * 2 + 1] /*.Len*/ + 1;
-              if (bits > max_length) {
-                bits = max_length;
-                overflow++;
-              }
-              tree[n * 2 + 1] /*.Len*/ = bits;
-              /* We overwrite tree[n].Dad which is no longer needed */
-
-              if (n > max_code) {
-                continue;
-              } /* not a leaf node */
-
-              s.bl_count[bits]++;
-              xbits = 0;
-              if (n >= base) {
-                xbits = extra[n - base];
-              }
-              f = tree[n * 2] /*.Freq*/;
-              s.opt_len += f * (bits + xbits);
-              if (has_stree) {
-                s.static_len += f * (stree[n * 2 + 1] /*.Len*/ + xbits);
-              }
-            }
-            if (overflow === 0) {
-              return;
-            }
-
-            // Trace((stderr,"\nbit length overflow\n"));
-            /* This happens for example on obj2 and pic of the Calgary corpus */
-
-            /* Find the first bit length which could increase: */
-            do {
-              bits = max_length - 1;
-              while (s.bl_count[bits] === 0) {
-                bits--;
-              }
-              s.bl_count[bits]--; /* move one leaf down the tree */
-              s.bl_count[
-                bits + 1
-              ] += 2; /* move one overflow item as its brother */
-              s.bl_count[max_length]--;
-              /* The brother of the overflow item also moves one step up,
-               * but this does not affect bl_count[max_length]
-               */
-              overflow -= 2;
-            } while (overflow > 0);
-
-            /* Now recompute all bit lengths, scanning in increasing frequency.
-             * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all
-             * lengths instead of fixing only the wrong ones. This idea is taken
-             * from 'ar' written by Haruhiko Okumura.)
-             */
-            for (bits = max_length; bits !== 0; bits--) {
-              n = s.bl_count[bits];
-              while (n !== 0) {
-                m = s.heap[--h];
-                if (m > max_code) {
-                  continue;
-                }
-                if (tree[m * 2 + 1] /*.Len*/ !== bits) {
-                  // Trace((stderr,"code %d bits %d->%d\n", m, tree[m].Len, bits));
-                  s.opt_len +=
-                    (bits - tree[m * 2 + 1]) /*.Len*/ * tree[m * 2] /*.Freq*/;
-                  tree[m * 2 + 1] /*.Len*/ = bits;
-                }
-                n--;
-              }
-            }
-          }
-
-          /* ===========================================================================
-           * Generate the codes for a given tree and bit counts (which need not be
-           * optimal).
-           * IN assertion: the array bl_count contains the bit length statistics for
-           * the given tree and the field len is set for all tree elements.
-           * OUT assertion: the field code is set for all tree elements of non
-           *     zero code length.
-           */
-          function gen_codes(tree, max_code, bl_count) {
-            //    ct_data *tree;             /* the tree to decorate */
-            //    int max_code;              /* largest code with non zero frequency */
-            //    ushf *bl_count;            /* number of codes at each bit length */
-            var next_code = new Array(
-              MAX_BITS + 1,
-            ); /* next code value for each bit length */
-            var code = 0; /* running code value */
-            var bits; /* bit index */
-            var n; /* code index */
-
-            /* The distribution counts are first used to generate the code values
-             * without bit reversal.
-             */
-            for (bits = 1; bits <= MAX_BITS; bits++) {
-              next_code[bits] = code = (code + bl_count[bits - 1]) << 1;
-            }
-            /* Check that the bit counts in bl_count are consistent. The last code
-             * must be all ones.
-             */
-            //Assert (code + bl_count[MAX_BITS]-1 == (1<<MAX_BITS)-1,
-            //        "inconsistent bit counts");
-            //Tracev((stderr,"\ngen_codes: max_code %d ", max_code));
-
-            for (n = 0; n <= max_code; n++) {
-              var len = tree[n * 2 + 1]; /*.Len*/
-              if (len === 0) {
-                continue;
-              }
-              /* Now reverse the bits */
-              tree[n * 2] /*.Code*/ = bi_reverse(next_code[len]++, len);
-
-              //Tracecv(tree != static_ltree, (stderr,"\nn %3d %c l %2d c %4x (%x) ",
-              //     n, (isgraph(n) ? n : ' '), len, tree[n].Code, next_code[len]-1));
-            }
-          }
-
-          /* ===========================================================================
-           * Initialize the various 'constant' tables.
-           */
-          function tr_static_init() {
-            var n; /* iterates over tree elements */
-            var bits; /* bit counter */
-            var length; /* length value */
-            var code; /* code value */
-            var dist; /* distance index */
-            var bl_count = new Array(MAX_BITS + 1);
-            /* number of codes at each bit length for an optimal tree */
-
-            // do check in _tr_init()
-            //if (static_init_done) return;
-
-            /* For some embedded targets, global variables are not initialized: */
-            /*#ifdef NO_INIT_GLOBAL_POINTERS
-  static_l_desc.static_tree = static_ltree;
-  static_l_desc.extra_bits = extra_lbits;
-  static_d_desc.static_tree = static_dtree;
-  static_d_desc.extra_bits = extra_dbits;
-  static_bl_desc.extra_bits = extra_blbits;
-#endif*/
-
-            /* Initialize the mapping length (0..255) -> length code (0..28) */
-            length = 0;
-            for (code = 0; code < LENGTH_CODES - 1; code++) {
-              base_length[code] = length;
-              for (n = 0; n < 1 << extra_lbits[code]; n++) {
-                _length_code[length++] = code;
-              }
-            }
-            //Assert (length == 256, "tr_static_init: length != 256");
-            /* Note that the length 255 (match length 258) can be represented
-             * in two different ways: code 284 + 5 bits or code 285, so we
-             * overwrite length_code[255] to use the best encoding:
-             */
-            _length_code[length - 1] = code;
-
-            /* Initialize the mapping dist (0..32K) -> dist code (0..29) */
-            dist = 0;
-            for (code = 0; code < 16; code++) {
-              base_dist[code] = dist;
-              for (n = 0; n < 1 << extra_dbits[code]; n++) {
-                _dist_code[dist++] = code;
-              }
-            }
-            //Assert (dist == 256, "tr_static_init: dist != 256");
-            dist >>= 7; /* from now on, all distances are divided by 128 */
-            for (; code < D_CODES; code++) {
-              base_dist[code] = dist << 7;
-              for (n = 0; n < 1 << (extra_dbits[code] - 7); n++) {
-                _dist_code[256 + dist++] = code;
-              }
-            }
-            //Assert (dist == 256, "tr_static_init: 256+dist != 512");
-
-            /* Construct the codes of the static literal tree */
-            for (bits = 0; bits <= MAX_BITS; bits++) {
-              bl_count[bits] = 0;
-            }
-
-            n = 0;
-            while (n <= 143) {
-              static_ltree[n * 2 + 1] /*.Len*/ = 8;
-              n++;
-              bl_count[8]++;
-            }
-            while (n <= 255) {
-              static_ltree[n * 2 + 1] /*.Len*/ = 9;
-              n++;
-              bl_count[9]++;
-            }
-            while (n <= 279) {
-              static_ltree[n * 2 + 1] /*.Len*/ = 7;
-              n++;
-              bl_count[7]++;
-            }
-            while (n <= 287) {
-              static_ltree[n * 2 + 1] /*.Len*/ = 8;
-              n++;
-              bl_count[8]++;
-            }
-            /* Codes 286 and 287 do not exist, but we must include them in the
-             * tree construction to get a canonical Huffman tree (longest code
-             * all ones)
-             */
-            gen_codes(static_ltree, L_CODES + 1, bl_count);
-
-            /* The static distance tree is trivial: */
-            for (n = 0; n < D_CODES; n++) {
-              static_dtree[n * 2 + 1] /*.Len*/ = 5;
-              static_dtree[n * 2] /*.Code*/ = bi_reverse(n, 5);
-            }
-
-            // Now data ready and we can init static trees
-            static_l_desc = new StaticTreeDesc(
-              static_ltree,
-              extra_lbits,
-              LITERALS + 1,
-              L_CODES,
-              MAX_BITS,
-            );
-            static_d_desc = new StaticTreeDesc(
-              static_dtree,
-              extra_dbits,
-              0,
-              D_CODES,
-              MAX_BITS,
-            );
-            static_bl_desc = new StaticTreeDesc(
-              new Array(0),
-              extra_blbits,
-              0,
-              BL_CODES,
-              MAX_BL_BITS,
-            );
-
-            //static_init_done = true;
-          }
-
-          /* ===========================================================================
-           * Initialize a new block.
-           */
-          function init_block(s) {
-            var n; /* iterates over tree elements */
-
-            /* Initialize the trees. */
-            for (n = 0; n < L_CODES; n++) {
-              s.dyn_ltree[n * 2] /*.Freq*/ = 0;
-            }
-            for (n = 0; n < D_CODES; n++) {
-              s.dyn_dtree[n * 2] /*.Freq*/ = 0;
-            }
-            for (n = 0; n < BL_CODES; n++) {
-              s.bl_tree[n * 2] /*.Freq*/ = 0;
-            }
-
-            s.dyn_ltree[END_BLOCK * 2] /*.Freq*/ = 1;
-            s.opt_len = s.static_len = 0;
-            s.last_lit = s.matches = 0;
-          }
-
-          /* ===========================================================================
-           * Flush the bit buffer and align the output on a byte boundary
-           */
-          function bi_windup(s) {
-            if (s.bi_valid > 8) {
-              put_short(s, s.bi_buf);
-            } else if (s.bi_valid > 0) {
-              //put_byte(s, (Byte)s->bi_buf);
-              s.pending_buf[s.pending++] = s.bi_buf;
-            }
-            s.bi_buf = 0;
-            s.bi_valid = 0;
-          }
-
-          /* ===========================================================================
-           * Copy a stored block, storing first the length and its
-           * one's complement if requested.
-           */
-          function copy_block(s, buf, len, header) {
-            //DeflateState *s;
-            //charf    *buf;    /* the input data */
-            //unsigned len;     /* its length */
-            //int      header;  /* true if block header must be written */
-            bi_windup(s); /* align on byte boundary */
-
-            if (header) {
-              put_short(s, len);
-              put_short(s, ~len);
-            }
-            //  while (len--) {
-            //    put_byte(s, *buf++);
-            //  }
-            utils.arraySet(s.pending_buf, s.window, buf, len, s.pending);
-            s.pending += len;
-          }
-
-          /* ===========================================================================
-           * Compares to subtrees, using the tree depth as tie breaker when
-           * the subtrees have equal frequency. This minimizes the worst case length.
-           */
-          function smaller(tree, n, m, depth) {
-            var _n2 = n * 2;
-            var _m2 = m * 2;
-            return (
-              tree[_n2] /*.Freq*/ < tree[_m2] /*.Freq*/ ||
-              (tree[_n2] /*.Freq*/ === tree[_m2] /*.Freq*/ &&
-                depth[n] <= depth[m])
-            );
-          }
-
-          /* ===========================================================================
-           * Restore the heap property by moving down the tree starting at node k,
-           * exchanging a node with the smallest of its two sons if necessary, stopping
-           * when the heap property is re-established (each father smaller than its
-           * two sons).
-           */
-          function pqdownheap(s, tree, k) {
-            //    deflate_state *s;
-            //    ct_data *tree;  /* the tree to restore */
-            //    int k;               /* node to move down */
-            var v = s.heap[k];
-            var j = k << 1; /* left son of k */
-            while (j <= s.heap_len) {
-              /* Set j to the smallest of the two sons: */
-              if (
-                j < s.heap_len &&
-                smaller(tree, s.heap[j + 1], s.heap[j], s.depth)
-              ) {
-                j++;
-              }
-              /* Exit if v is smaller than both sons */
-              if (smaller(tree, v, s.heap[j], s.depth)) {
-                break;
-              }
-
-              /* Exchange v with the smallest son */
-              s.heap[k] = s.heap[j];
-              k = j;
-
-              /* And continue down the tree, setting j to the left son of k */
-              j <<= 1;
-            }
-            s.heap[k] = v;
-          }
-
-          // inlined manually
-          // var SMALLEST = 1;
-
-          /* ===========================================================================
-           * Send the block data compressed using the given Huffman trees
-           */
-          function compress_block(s, ltree, dtree) {
-            //    deflate_state *s;
-            //    const ct_data *ltree; /* literal tree */
-            //    const ct_data *dtree; /* distance tree */
-            var dist; /* distance of matched string */
-            var lc; /* match length or unmatched char (if dist == 0) */
-            var lx = 0; /* running index in l_buf */
-            var code; /* the code to send */
-            var extra; /* number of extra bits to send */
-
-            if (s.last_lit !== 0) {
-              do {
-                dist =
-                  (s.pending_buf[s.d_buf + lx * 2] << 8) |
-                  s.pending_buf[s.d_buf + lx * 2 + 1];
-                lc = s.pending_buf[s.l_buf + lx];
-                lx++;
-
-                if (dist === 0) {
-                  send_code(s, lc, ltree); /* send a literal byte */
-                  //Tracecv(isgraph(lc), (stderr," '%c' ", lc));
-                } else {
-                  /* Here, lc is the match length - MIN_MATCH */
-                  code = _length_code[lc];
-                  send_code(
-                    s,
-                    code + LITERALS + 1,
-                    ltree,
-                  ); /* send the length code */
-                  extra = extra_lbits[code];
-                  if (extra !== 0) {
-                    lc -= base_length[code];
-                    send_bits(s, lc, extra); /* send the extra length bits */
-                  }
-                  dist--; /* dist is now the match distance - 1 */
-                  code = d_code(dist);
-                  //Assert (code < D_CODES, "bad d_code");
-
-                  send_code(s, code, dtree); /* send the distance code */
-                  extra = extra_dbits[code];
-                  if (extra !== 0) {
-                    dist -= base_dist[code];
-                    send_bits(
-                      s,
-                      dist,
-                      extra,
-                    ); /* send the extra distance bits */
-                  }
-                } /* literal or match pair ? */
-
-                /* Check that the overlay between pending_buf and d_buf+l_buf is ok: */
-                //Assert((uInt)(s->pending) < s->lit_bufsize + 2*lx,
-                //       "pendingBuf overflow");
-              } while (lx < s.last_lit);
-            }
-
-            send_code(s, END_BLOCK, ltree);
-          }
-
-          /* ===========================================================================
-           * Construct one Huffman tree and assigns the code bit strings and lengths.
-           * Update the total bit length for the current block.
-           * IN assertion: the field freq is set for all tree elements.
-           * OUT assertions: the fields len and code are set to the optimal bit length
-           *     and corresponding code. The length opt_len is updated; static_len is
-           *     also updated if stree is not null. The field max_code is set.
-           */
-          function build_tree(s, desc) {
-            //    deflate_state *s;
-            //    tree_desc *desc; /* the tree descriptor */
-            var tree = desc.dyn_tree;
-            var stree = desc.stat_desc.static_tree;
-            var has_stree = desc.stat_desc.has_stree;
-            var elems = desc.stat_desc.elems;
-            var n, m; /* iterate over heap elements */
-            var max_code = -1; /* largest code with non zero frequency */
-            var node; /* new node being created */
-
-            /* Construct the initial heap, with least frequent element in
-             * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1].
-             * heap[0] is not used.
-             */
-            s.heap_len = 0;
-            s.heap_max = HEAP_SIZE;
-
-            for (n = 0; n < elems; n++) {
-              if (tree[n * 2] /*.Freq*/ !== 0) {
-                s.heap[++s.heap_len] = max_code = n;
-                s.depth[n] = 0;
-              } else {
-                tree[n * 2 + 1] /*.Len*/ = 0;
-              }
-            }
-
-            /* The pkzip format requires that at least one distance code exists,
-             * and that at least one bit should be sent even if there is only one
-             * possible code. So to avoid special checks later on we force at least
-             * two codes of non zero frequency.
-             */
-            while (s.heap_len < 2) {
-              node = s.heap[++s.heap_len] = max_code < 2 ? ++max_code : 0;
-              tree[node * 2] /*.Freq*/ = 1;
-              s.depth[node] = 0;
-              s.opt_len--;
-
-              if (has_stree) {
-                s.static_len -= stree[node * 2 + 1] /*.Len*/;
-              }
-              /* node is 0 or 1 so it does not have extra bits */
-            }
-            desc.max_code = max_code;
-
-            /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree,
-             * establish sub-heaps of increasing lengths:
-             */
-            for (n = s.heap_len >> 1 /*int /2*/; n >= 1; n--) {
-              pqdownheap(s, tree, n);
-            }
-
-            /* Construct the Huffman tree by repeatedly combining the least two
-             * frequent nodes.
-             */
-            node = elems; /* next internal node of the tree */
-            do {
-              //pqremove(s, tree, n);  /* n = node of least frequency */
-              /*** pqremove ***/
-              n = s.heap[1 /*SMALLEST*/];
-              s.heap[1 /*SMALLEST*/] = s.heap[s.heap_len--];
-              pqdownheap(s, tree, 1 /*SMALLEST*/);
-              /***/
-
-              m = s.heap[1 /*SMALLEST*/]; /* m = node of next least frequency */
-
-              s.heap[--s.heap_max] = n; /* keep the nodes sorted by frequency */
-              s.heap[--s.heap_max] = m;
-
-              /* Create a new node father of n and m */
-              tree[node * 2] /*.Freq*/ =
-                tree[n * 2] /*.Freq*/ + tree[m * 2] /*.Freq*/;
-              s.depth[node] =
-                (s.depth[n] >= s.depth[m] ? s.depth[n] : s.depth[m]) + 1;
-              tree[n * 2 + 1] /*.Dad*/ = tree[m * 2 + 1] /*.Dad*/ = node;
-
-              /* and insert the new node in the heap */
-              s.heap[1 /*SMALLEST*/] = node++;
-              pqdownheap(s, tree, 1 /*SMALLEST*/);
-            } while (s.heap_len >= 2);
-
-            s.heap[--s.heap_max] = s.heap[1 /*SMALLEST*/];
-
-            /* At this point, the fields freq and dad are set. We can now
-             * generate the bit lengths.
-             */
-            gen_bitlen(s, desc);
-
-            /* The field len is now set, we can generate the bit codes */
-            gen_codes(tree, max_code, s.bl_count);
-          }
-
-          /* ===========================================================================
-           * Scan a literal or distance tree to determine the frequencies of the codes
-           * in the bit length tree.
-           */
-          function scan_tree(s, tree, max_code) {
-            //    deflate_state *s;
-            //    ct_data *tree;   /* the tree to be scanned */
-            //    int max_code;    /* and its largest code of non zero frequency */
-            var n; /* iterates over all tree elements */
-            var prevlen = -1; /* last emitted length */
-            var curlen; /* length of current code */
-
-            var nextlen = tree[0 * 2 + 1]; /*.Len*/ /* length of next code */
-
-            var count = 0; /* repeat count of the current code */
-            var max_count = 7; /* max repeat count */
-            var min_count = 4; /* min repeat count */
-
-            if (nextlen === 0) {
-              max_count = 138;
-              min_count = 3;
-            }
-            tree[(max_code + 1) * 2 + 1] /*.Len*/ = 0xffff; /* guard */
-
-            for (n = 0; n <= max_code; n++) {
-              curlen = nextlen;
-              nextlen = tree[(n + 1) * 2 + 1] /*.Len*/;
-
-              if (++count < max_count && curlen === nextlen) {
-                continue;
-              } else if (count < min_count) {
-                s.bl_tree[curlen * 2] /*.Freq*/ += count;
-              } else if (curlen !== 0) {
-                if (curlen !== prevlen) {
-                  s.bl_tree[curlen * 2] /*.Freq*/++;
-                }
-                s.bl_tree[REP_3_6 * 2] /*.Freq*/++;
-              } else if (count <= 10) {
-                s.bl_tree[REPZ_3_10 * 2] /*.Freq*/++;
-              } else {
-                s.bl_tree[REPZ_11_138 * 2] /*.Freq*/++;
-              }
-
-              count = 0;
-              prevlen = curlen;
-
-              if (nextlen === 0) {
-                max_count = 138;
-                min_count = 3;
-              } else if (curlen === nextlen) {
-                max_count = 6;
-                min_count = 3;
-              } else {
-                max_count = 7;
-                min_count = 4;
-              }
-            }
-          }
-
-          /* ===========================================================================
-           * Send a literal or distance tree in compressed form, using the codes in
-           * bl_tree.
-           */
-          function send_tree(s, tree, max_code) {
-            //    deflate_state *s;
-            //    ct_data *tree; /* the tree to be scanned */
-            //    int max_code;       /* and its largest code of non zero frequency */
-            var n; /* iterates over all tree elements */
-            var prevlen = -1; /* last emitted length */
-            var curlen; /* length of current code */
-
-            var nextlen = tree[0 * 2 + 1]; /*.Len*/ /* length of next code */
-
-            var count = 0; /* repeat count of the current code */
-            var max_count = 7; /* max repeat count */
-            var min_count = 4; /* min repeat count */
-
-            /* tree[max_code+1].Len = -1; */ /* guard already set */
-            if (nextlen === 0) {
-              max_count = 138;
-              min_count = 3;
-            }
-
-            for (n = 0; n <= max_code; n++) {
-              curlen = nextlen;
-              nextlen = tree[(n + 1) * 2 + 1] /*.Len*/;
-
-              if (++count < max_count && curlen === nextlen) {
-                continue;
-              } else if (count < min_count) {
-                do {
-                  send_code(s, curlen, s.bl_tree);
-                } while (--count !== 0);
-              } else if (curlen !== 0) {
-                if (curlen !== prevlen) {
-                  send_code(s, curlen, s.bl_tree);
-                  count--;
-                }
-                //Assert(count >= 3 && count <= 6, " 3_6?");
-                send_code(s, REP_3_6, s.bl_tree);
-                send_bits(s, count - 3, 2);
-              } else if (count <= 10) {
-                send_code(s, REPZ_3_10, s.bl_tree);
-                send_bits(s, count - 3, 3);
-              } else {
-                send_code(s, REPZ_11_138, s.bl_tree);
-                send_bits(s, count - 11, 7);
-              }
-
-              count = 0;
-              prevlen = curlen;
-              if (nextlen === 0) {
-                max_count = 138;
-                min_count = 3;
-              } else if (curlen === nextlen) {
-                max_count = 6;
-                min_count = 3;
-              } else {
-                max_count = 7;
-                min_count = 4;
-              }
-            }
-          }
-
-          /* ===========================================================================
-           * Construct the Huffman tree for the bit lengths and return the index in
-           * bl_order of the last bit length code to send.
-           */
-          function build_bl_tree(s) {
-            var max_blindex; /* index of last bit length code of non zero freq */
-
-            /* Determine the bit length frequencies for literal and distance trees */
-            scan_tree(s, s.dyn_ltree, s.l_desc.max_code);
-            scan_tree(s, s.dyn_dtree, s.d_desc.max_code);
-
-            /* Build the bit length tree: */
-            build_tree(s, s.bl_desc);
-            /* opt_len now includes the length of the tree representations, except
-             * the lengths of the bit lengths codes and the 5+5+4 bits for the counts.
-             */
-
-            /* Determine the number of bit length codes to send. The pkzip format
-             * requires that at least 4 bit length codes be sent. (appnote.txt says
-             * 3 but the actual value used is 4.)
-             */
-            for (max_blindex = BL_CODES - 1; max_blindex >= 3; max_blindex--) {
-              if (s.bl_tree[bl_order[max_blindex] * 2 + 1] /*.Len*/ !== 0) {
-                break;
-              }
-            }
-            /* Update opt_len to include the bit length tree and counts */
-            s.opt_len += 3 * (max_blindex + 1) + 5 + 5 + 4;
-            //Tracev((stderr, "\ndyn trees: dyn %ld, stat %ld",
-            //        s->opt_len, s->static_len));
-
-            return max_blindex;
-          }
-
-          /* ===========================================================================
-           * Send the header for a block using dynamic Huffman trees: the counts, the
-           * lengths of the bit length codes, the literal tree and the distance tree.
-           * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4.
-           */
-          function send_all_trees(s, lcodes, dcodes, blcodes) {
-            //    deflate_state *s;
-            //    int lcodes, dcodes, blcodes; /* number of codes for each tree */
-            var rank; /* index in bl_order */
-
-            //Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, "not enough codes");
-            //Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES,
-            //        "too many codes");
-            //Tracev((stderr, "\nbl counts: "));
-            send_bits(
-              s,
-              lcodes - 257,
-              5,
-            ); /* not +255 as stated in appnote.txt */
-            send_bits(s, dcodes - 1, 5);
-            send_bits(s, blcodes - 4, 4); /* not -3 as stated in appnote.txt */
-            for (rank = 0; rank < blcodes; rank++) {
-              //Tracev((stderr, "\nbl code %2d ", bl_order[rank]));
-              send_bits(s, s.bl_tree[bl_order[rank] * 2 + 1] /*.Len*/, 3);
-            }
-            //Tracev((stderr, "\nbl tree: sent %ld", s->bits_sent));
-
-            send_tree(s, s.dyn_ltree, lcodes - 1); /* literal tree */
-            //Tracev((stderr, "\nlit tree: sent %ld", s->bits_sent));
-
-            send_tree(s, s.dyn_dtree, dcodes - 1); /* distance tree */
-            //Tracev((stderr, "\ndist tree: sent %ld", s->bits_sent));
-          }
-
-          /* ===========================================================================
-           * Check if the data type is TEXT or BINARY, using the following algorithm:
-           * - TEXT if the two conditions below are satisfied:
-           *    a) There are no non-portable control characters belonging to the
-           *       "black list" (0..6, 14..25, 28..31).
-           *    b) There is at least one printable character belonging to the
-           *       "white list" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255).
-           * - BINARY otherwise.
-           * - The following partially-portable control characters form a
-           *   "gray list" that is ignored in this detection algorithm:
-           *   (7 {BEL}, 8 {BS}, 11 {VT}, 12 {FF}, 26 {SUB}, 27 {ESC}).
-           * IN assertion: the fields Freq of dyn_ltree are set.
-           */
-          function detect_data_type(s) {
-            /* black_mask is the bit mask of black-listed bytes
-             * set bits 0..6, 14..25, and 28..31
-             * 0xf3ffc07f = binary 11110011111111111100000001111111
-             */
-            var black_mask = 0xf3ffc07f;
-            var n;
-
-            /* Check for non-textual ("black-listed") bytes. */
-            for (n = 0; n <= 31; n++, black_mask >>>= 1) {
-              if (black_mask & 1 && s.dyn_ltree[n * 2] /*.Freq*/ !== 0) {
-                return Z_BINARY;
-              }
-            }
-
-            /* Check for textual ("white-listed") bytes. */
-            if (
-              s.dyn_ltree[9 * 2] /*.Freq*/ !== 0 ||
-              s.dyn_ltree[10 * 2] /*.Freq*/ !== 0 ||
-              s.dyn_ltree[13 * 2] /*.Freq*/ !== 0
-            ) {
-              return Z_TEXT;
-            }
-            for (n = 32; n < LITERALS; n++) {
-              if (s.dyn_ltree[n * 2] /*.Freq*/ !== 0) {
-                return Z_TEXT;
-              }
-            }
-
-            /* There are no "black-listed" or "white-listed" bytes:
-             * this stream either is empty or has tolerated ("gray-listed") bytes only.
-             */
-            return Z_BINARY;
-          }
-
-          var static_init_done = false;
-
-          /* ===========================================================================
-           * Initialize the tree data structures for a new zlib stream.
-           */
-          function _tr_init(s) {
-            if (!static_init_done) {
-              tr_static_init();
-              static_init_done = true;
-            }
-
-            s.l_desc = new TreeDesc(s.dyn_ltree, static_l_desc);
-            s.d_desc = new TreeDesc(s.dyn_dtree, static_d_desc);
-            s.bl_desc = new TreeDesc(s.bl_tree, static_bl_desc);
-
-            s.bi_buf = 0;
-            s.bi_valid = 0;
-
-            /* Initialize the first block of the first file: */
-            init_block(s);
-          }
-
-          /* ===========================================================================
-           * Send a stored block
-           */
-          function _tr_stored_block(s, buf, stored_len, last) {
-            //DeflateState *s;
-            //charf *buf;       /* input block */
-            //ulg stored_len;   /* length of input block */
-            //int last;         /* one if this is the last block for a file */
-            send_bits(
-              s,
-              (STORED_BLOCK << 1) + (last ? 1 : 0),
-              3,
-            ); /* send block type */
-            copy_block(s, buf, stored_len, true); /* with header */
-          }
-
-          /* ===========================================================================
-           * Send one empty static block to give enough lookahead for inflate.
-           * This takes 10 bits, of which 7 may remain in the bit buffer.
-           */
-          function _tr_align(s) {
-            send_bits(s, STATIC_TREES << 1, 3);
-            send_code(s, END_BLOCK, static_ltree);
-            bi_flush(s);
-          }
-
-          /* ===========================================================================
-           * Determine the best encoding for the current block: dynamic trees, static
-           * trees or store, and output the encoded block to the zip file.
-           */
-          function _tr_flush_block(s, buf, stored_len, last) {
-            //DeflateState *s;
-            //charf *buf;       /* input block, or NULL if too old */
-            //ulg stored_len;   /* length of input block */
-            //int last;         /* one if this is the last block for a file */
-            var opt_lenb, static_lenb; /* opt_len and static_len in bytes */
-            var max_blindex = 0; /* index of last bit length code of non zero freq */
-
-            /* Build the Huffman trees unless a stored block is forced */
-            if (s.level > 0) {
-              /* Check if the file is binary or text */
-              if (s.strm.data_type === Z_UNKNOWN) {
-                s.strm.data_type = detect_data_type(s);
-              }
-
-              /* Construct the literal and distance trees */
-              build_tree(s, s.l_desc);
-              // Tracev((stderr, "\nlit data: dyn %ld, stat %ld", s->opt_len,
-              //        s->static_len));
-
-              build_tree(s, s.d_desc);
-              // Tracev((stderr, "\ndist data: dyn %ld, stat %ld", s->opt_len,
-              //        s->static_len));
-              /* At this point, opt_len and static_len are the total bit lengths of
-               * the compressed block data, excluding the tree representations.
-               */
-
-              /* Build the bit length tree for the above two trees, and get the index
-               * in bl_order of the last bit length code to send.
-               */
-              max_blindex = build_bl_tree(s);
-
-              /* Determine the best encoding. Compute the block lengths in bytes. */
-              opt_lenb = (s.opt_len + 3 + 7) >>> 3;
-              static_lenb = (s.static_len + 3 + 7) >>> 3;
-
-              // Tracev((stderr, "\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u ",
-              //        opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len,
-              //        s->last_lit));
-
-              if (static_lenb <= opt_lenb) {
-                opt_lenb = static_lenb;
-              }
-            } else {
-              // Assert(buf != (char*)0, "lost buf");
-              opt_lenb = static_lenb =
-                stored_len + 5; /* force a stored block */
-            }
-
-            if (stored_len + 4 <= opt_lenb && buf !== -1) {
-              /* 4: two words for the lengths */
-
-              /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE.
-               * Otherwise we can't have processed more than WSIZE input bytes since
-               * the last block flush, because compression would have been
-               * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to
-               * transform a block into a stored block.
-               */
-              _tr_stored_block(s, buf, stored_len, last);
-            } else if (s.strategy === Z_FIXED || static_lenb === opt_lenb) {
-              send_bits(s, (STATIC_TREES << 1) + (last ? 1 : 0), 3);
-              compress_block(s, static_ltree, static_dtree);
-            } else {
-              send_bits(s, (DYN_TREES << 1) + (last ? 1 : 0), 3);
-              send_all_trees(
-                s,
-                s.l_desc.max_code + 1,
-                s.d_desc.max_code + 1,
-                max_blindex + 1,
-              );
-              compress_block(s, s.dyn_ltree, s.dyn_dtree);
-            }
-            // Assert (s->compressed_len == s->bits_sent, "bad compressed size");
-            /* The above check is made mod 2^32, for files larger than 512 MB
-             * and uLong implemented on 32 bits.
-             */
-            init_block(s);
-
-            if (last) {
-              bi_windup(s);
-            }
-            // Tracev((stderr,"\ncomprlen %lu(%lu) ", s->compressed_len>>3,
-            //       s->compressed_len-7*last));
-          }
-
-          /* ===========================================================================
-           * Save the match info and tally the frequency counts. Return true if
-           * the current block must be flushed.
-           */
-          function _tr_tally(s, dist, lc) {
-            //    deflate_state *s;
-            //    unsigned dist;  /* distance of matched string */
-            //    unsigned lc;    /* match length-MIN_MATCH or unmatched char (if dist==0) */
-            //var out_length, in_length, dcode;
-
-            s.pending_buf[s.d_buf + s.last_lit * 2] = (dist >>> 8) & 0xff;
-            s.pending_buf[s.d_buf + s.last_lit * 2 + 1] = dist & 0xff;
-
-            s.pending_buf[s.l_buf + s.last_lit] = lc & 0xff;
-            s.last_lit++;
-
-            if (dist === 0) {
-              /* lc is the unmatched char */
-              s.dyn_ltree[lc * 2] /*.Freq*/++;
-            } else {
-              s.matches++;
-              /* Here, lc is the match length - MIN_MATCH */
-              dist--; /* dist = match distance - 1 */
-              //Assert((ush)dist < (ush)MAX_DIST(s) &&
-              //       (ush)lc <= (ush)(MAX_MATCH-MIN_MATCH) &&
-              //       (ush)d_code(dist) < (ush)D_CODES,  "_tr_tally: bad match");
-
-              s.dyn_ltree[(_length_code[lc] + LITERALS + 1) * 2] /*.Freq*/++;
-              s.dyn_dtree[d_code(dist) * 2] /*.Freq*/++;
-            }
-
-            // (!) This block is disabled in zlib defailts,
-            // don't enable it for binary compatibility
-
-            //#ifdef TRUNCATE_BLOCK
-            //  /* Try to guess if it is profitable to stop the current block here */
-            //  if ((s.last_lit & 0x1fff) === 0 && s.level > 2) {
-            //    /* Compute an upper bound for the compressed length */
-            //    out_length = s.last_lit*8;
-            //    in_length = s.strstart - s.block_start;
-            //
-            //    for (dcode = 0; dcode < D_CODES; dcode++) {
-            //      out_length += s.dyn_dtree[dcode*2]/*.Freq*/ * (5 + extra_dbits[dcode]);
-            //    }
-            //    out_length >>>= 3;
-            //    //Tracev((stderr,"\nlast_lit %u, in %ld, out ~%ld(%ld%%) ",
-            //    //       s->last_lit, in_length, out_length,
-            //    //       100L - out_length*100L/in_length));
-            //    if (s.matches < (s.last_lit>>1)/*int /2*/ && out_length < (in_length>>1)/*int /2*/) {
-            //      return true;
-            //    }
-            //  }
-            //#endif
-
-            return s.last_lit === s.lit_bufsize - 1;
-            /* We avoid equality with lit_bufsize because of wraparound at 64K
-             * on 16 bit machines and because stored blocks are restricted to
-             * 64K-1 bytes.
-             */
-          }
-
-          exports._tr_init = _tr_init;
-          exports._tr_stored_block = _tr_stored_block;
-          exports._tr_flush_block = _tr_flush_block;
-          exports._tr_tally = _tr_tally;
-          exports._tr_align = _tr_align;
-        },
-        { "../utils/common": 41 },
-      ],
-      53: [
-        function (require, module, exports) {
-          "use strict";
-
-          // (C) 1995-2013 Jean-loup Gailly and Mark Adler
-          // (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
-          //
-          // This software is provided 'as-is', without any express or implied
-          // warranty. In no event will the authors be held liable for any damages
-          // arising from the use of this software.
-          //
-          // Permission is granted to anyone to use this software for any purpose,
-          // including commercial applications, and to alter it and redistribute it
-          // freely, subject to the following restrictions:
-          //
-          // 1. The origin of this software must not be misrepresented; you must not
-          //   claim that you wrote the original software. If you use this software
-          //   in a product, an acknowledgment in the product documentation would be
-          //   appreciated but is not required.
-          // 2. Altered source versions must be plainly marked as such, and must not be
-          //   misrepresented as being the original software.
-          // 3. This notice may not be removed or altered from any source distribution.
-
-          function ZStream() {
-            /* next input byte */
-            this.input = null; // JS specific, because we have no pointers
-            this.next_in = 0;
-            /* number of bytes available at input */
-            this.avail_in = 0;
-            /* total number of input bytes read so far */
-            this.total_in = 0;
-            /* next output byte should be put there */
-            this.output = null; // JS specific, because we have no pointers
-            this.next_out = 0;
-            /* remaining free space at output */
-            this.avail_out = 0;
-            /* total number of bytes output so far */
-            this.total_out = 0;
-            /* last error message, NULL if no error */
-            this.msg = "" /*Z_NULL*/;
-            /* not visible by applications */
-            this.state = null;
-            /* best guess about the data type: binary or text */
-            this.data_type = 2 /*Z_UNKNOWN*/;
-            /* adler32 value of the uncompressed data */
-            this.adler = 0;
-          }
-
-          module.exports = ZStream;
-        },
-        {},
-      ],
-      54: [
-        function (require, module, exports) {
-          (function (global) {
-            (function (global, undefined) {
-              "use strict";
-
-              if (global.setImmediate) {
-                return;
-              }
-
-              var nextHandle = 1; // Spec says greater than zero
-              var tasksByHandle = {};
-              var currentlyRunningATask = false;
-              var doc = global.document;
-              var registerImmediate;
-
-              function setImmediate(callback) {
-                // Callback can either be a function or a string
-                if (typeof callback !== "function") {
-                  callback = new Function("" + callback);
-                }
-                // Copy function arguments
-                var args = new Array(arguments.length - 1);
-                for (var i = 0; i < args.length; i++) {
-                  args[i] = arguments[i + 1];
-                }
-                // Store and register the task
-                var task = { callback: callback, args: args };
-                tasksByHandle[nextHandle] = task;
-                registerImmediate(nextHandle);
-                return nextHandle++;
-              }
-
-              function clearImmediate(handle) {
-                delete tasksByHandle[handle];
-              }
-
-              function run(task) {
-                var callback = task.callback;
-                var args = task.args;
-                switch (args.length) {
-                  case 0:
-                    callback();
-                    break;
-                  case 1:
-                    callback(args[0]);
-                    break;
-                  case 2:
-                    callback(args[0], args[1]);
-                    break;
-                  case 3:
-                    callback(args[0], args[1], args[2]);
-                    break;
-                  default:
-                    callback.apply(undefined, args);
-                    break;
-                }
-              }
-
-              function runIfPresent(handle) {
-                // From the spec: "Wait until any invocations of this algorithm started before this one have completed."
-                // So if we're currently running a task, we'll need to delay this invocation.
-                if (currentlyRunningATask) {
-                  // Delay by doing a setTimeout. setImmediate was tried instead, but in Firefox 7 it generated a
-                  // "too much recursion" error.
-                  setTimeout(runIfPresent, 0, handle);
-                } else {
-                  var task = tasksByHandle[handle];
-                  if (task) {
-                    currentlyRunningATask = true;
-                    try {
-                      run(task);
-                    } finally {
-                      clearImmediate(handle);
-                      currentlyRunningATask = false;
-                    }
-                  }
-                }
-              }
-
-              function installNextTickImplementation() {
-                registerImmediate = function (handle) {
-                  process.nextTick(function () {
-                    runIfPresent(handle);
-                  });
-                };
-              }
-
-              function canUsePostMessage() {
-                // The test against `importScripts` prevents this implementation from being installed inside a web worker,
-                // where `global.postMessage` means something completely different and can't be used for this purpose.
-                if (global.postMessage && !global.importScripts) {
-                  var postMessageIsAsynchronous = true;
-                  var oldOnMessage = global.onmessage;
-                  global.onmessage = function () {
-                    postMessageIsAsynchronous = false;
-                  };
-                  global.postMessage("", "*");
-                  global.onmessage = oldOnMessage;
-                  return postMessageIsAsynchronous;
-                }
-              }
-
-              function installPostMessageImplementation() {
-                // Installs an event handler on `global` for the `message` event: see
-                // * https://developer.mozilla.org/en/DOM/window.postMessage
-                // * http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#crossDocumentMessages
-
-                var messagePrefix = "setImmediate$" + Math.random() + "$";
-                var onGlobalMessage = function (event) {
-                  if (
-                    event.source === global &&
-                    typeof event.data === "string" &&
-                    event.data.indexOf(messagePrefix) === 0
-                  ) {
-                    runIfPresent(+event.data.slice(messagePrefix.length));
-                  }
-                };
-
-                if (global.addEventListener) {
-                  global.addEventListener("message", onGlobalMessage, false);
-                } else {
-                  global.attachEvent("onmessage", onGlobalMessage);
-                }
-
-                registerImmediate = function (handle) {
-                  global.postMessage(messagePrefix + handle, "*");
-                };
-              }
-
-              function installMessageChannelImplementation() {
-                var channel = new MessageChannel();
-                channel.port1.onmessage = function (event) {
-                  var handle = event.data;
-                  runIfPresent(handle);
-                };
-
-                registerImmediate = function (handle) {
-                  channel.port2.postMessage(handle);
-                };
-              }
-
-              function installReadyStateChangeImplementation() {
-                var html = doc.documentElement;
-                registerImmediate = function (handle) {
-                  // Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted
-                  // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.
-                  var script = doc.createElement("script");
-                  script.onreadystatechange = function () {
-                    runIfPresent(handle);
-                    script.onreadystatechange = null;
-                    html.removeChild(script);
-                    script = null;
-                  };
-                  html.appendChild(script);
-                };
-              }
-
-              function installSetTimeoutImplementation() {
-                registerImmediate = function (handle) {
-                  setTimeout(runIfPresent, 0, handle);
-                };
-              }
-
-              // If supported, we should attach to the prototype of global, since that is where setTimeout et al. live.
-              var attachTo =
-                Object.getPrototypeOf && Object.getPrototypeOf(global);
-              attachTo = attachTo && attachTo.setTimeout ? attachTo : global;
-
-              // Don't get fooled by e.g. browserify environments.
-              if ({}.toString.call(global.process) === "[object process]") {
-                // For Node.js before 0.9
-                installNextTickImplementation();
-              } else if (canUsePostMessage()) {
-                // For non-IE10 modern browsers
-                installPostMessageImplementation();
-              } else if (global.MessageChannel) {
-                // For web workers, where supported
-                installMessageChannelImplementation();
-              } else if (
-                doc &&
-                "onreadystatechange" in doc.createElement("script")
-              ) {
-                // For IE 6–8
-                installReadyStateChangeImplementation();
-              } else {
-                // For older browsers
-                installSetTimeoutImplementation();
-              }
-
-              attachTo.setImmediate = setImmediate;
-              attachTo.clearImmediate = clearImmediate;
-            })(
-              typeof self === "undefined"
-                ? typeof global === "undefined"
-                  ? this
-                  : global
-                : self,
-            );
-          }).call(
-            this,
-            typeof global !== "undefined"
-              ? global
-              : typeof self !== "undefined"
-              ? self
-              : typeof window !== "undefined"
-              ? window
-              : {},
-          );
-        },
-        {},
-      ],
-    },
-    {},
-    [10],
-  )(10);
-});
diff --git a/public/scripts/jszip.min.js b/public/scripts/jszip.min.js
deleted file mode 100644
index 2e4fbd6..0000000
--- a/public/scripts/jszip.min.js
+++ /dev/null
@@ -1,6242 +0,0 @@
-/*!
-
-JSZip v3.10.1 - A JavaScript class for generating and reading zip files
-<http://stuartk.com/jszip>
-
-(c) 2009-2016 Stuart Knightley <stuart [at] stuartk.com>
-Dual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip/main/LICENSE.markdown.
-
-JSZip uses the library pako released under the MIT license :
-https://github.com/nodeca/pako/blob/main/LICENSE
-*/
-
-!(function (e) {
-  if ("object" == typeof exports && "undefined" != typeof module)
-    module.exports = e();
-  else if ("function" == typeof define && define.amd) define([], e);
-  else {
-    ("undefined" != typeof window
-      ? window
-      : "undefined" != typeof global
-      ? global
-      : "undefined" != typeof self
-      ? self
-      : this
-    ).JSZip = e();
-  }
-})(function () {
-  return (function s(a, o, h) {
-    function u(r, e) {
-      if (!o[r]) {
-        if (!a[r]) {
-          var t = "function" == typeof require && require;
-          if (!e && t) return t(r, !0);
-          if (l) return l(r, !0);
-          var n = new Error("Cannot find module '" + r + "'");
-          throw ((n.code = "MODULE_NOT_FOUND"), n);
-        }
-        var i = (o[r] = { exports: {} });
-        a[r][0].call(
-          i.exports,
-          function (e) {
-            var t = a[r][1][e];
-            return u(t || e);
-          },
-          i,
-          i.exports,
-          s,
-          a,
-          o,
-          h,
-        );
-      }
-      return o[r].exports;
-    }
-    for (
-      var l = "function" == typeof require && require, e = 0;
-      e < h.length;
-      e++
-    )
-      u(h[e]);
-    return u;
-  })(
-    {
-      1: [
-        function (e, t, r) {
-          "use strict";
-          var d = e("./utils"),
-            c = e("./support"),
-            p =
-              "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
-          (r.encode = function (e) {
-            for (
-              var t,
-                r,
-                n,
-                i,
-                s,
-                a,
-                o,
-                h = [],
-                u = 0,
-                l = e.length,
-                f = l,
-                c = "string" !== d.getTypeOf(e);
-              u < e.length;
-
-            )
-              (f = l - u),
-                (n = c
-                  ? ((t = e[u++]), (r = u < l ? e[u++] : 0), u < l ? e[u++] : 0)
-                  : ((t = e.charCodeAt(u++)),
-                    (r = u < l ? e.charCodeAt(u++) : 0),
-                    u < l ? e.charCodeAt(u++) : 0)),
-                (i = t >> 2),
-                (s = ((3 & t) << 4) | (r >> 4)),
-                (a = 1 < f ? ((15 & r) << 2) | (n >> 6) : 64),
-                (o = 2 < f ? 63 & n : 64),
-                h.push(p.charAt(i) + p.charAt(s) + p.charAt(a) + p.charAt(o));
-            return h.join("");
-          }),
-            (r.decode = function (e) {
-              var t,
-                r,
-                n,
-                i,
-                s,
-                a,
-                o = 0,
-                h = 0,
-                u = "data:";
-              if (e.substr(0, u.length) === u)
-                throw new Error(
-                  "Invalid base64 input, it looks like a data url.",
-                );
-              var l,
-                f = (3 * (e = e.replace(/[^A-Za-z0-9+/=]/g, "")).length) / 4;
-              if (
-                (e.charAt(e.length - 1) === p.charAt(64) && f--,
-                e.charAt(e.length - 2) === p.charAt(64) && f--,
-                f % 1 != 0)
-              )
-                throw new Error("Invalid base64 input, bad content length.");
-              for (
-                l = c.uint8array ? new Uint8Array(0 | f) : new Array(0 | f);
-                o < e.length;
-
-              )
-                (t =
-                  (p.indexOf(e.charAt(o++)) << 2) |
-                  ((i = p.indexOf(e.charAt(o++))) >> 4)),
-                  (r = ((15 & i) << 4) | ((s = p.indexOf(e.charAt(o++))) >> 2)),
-                  (n = ((3 & s) << 6) | (a = p.indexOf(e.charAt(o++)))),
-                  (l[h++] = t),
-                  64 !== s && (l[h++] = r),
-                  64 !== a && (l[h++] = n);
-              return l;
-            });
-        },
-        { "./support": 30, "./utils": 32 },
-      ],
-      2: [
-        function (e, t, r) {
-          "use strict";
-          var n = e("./external"),
-            i = e("./stream/DataWorker"),
-            s = e("./stream/Crc32Probe"),
-            a = e("./stream/DataLengthProbe");
-          function o(e, t, r, n, i) {
-            (this.compressedSize = e),
-              (this.uncompressedSize = t),
-              (this.crc32 = r),
-              (this.compression = n),
-              (this.compressedContent = i);
-          }
-          (o.prototype = {
-            getContentWorker: function () {
-              var e = new i(n.Promise.resolve(this.compressedContent))
-                  .pipe(this.compression.uncompressWorker())
-                  .pipe(new a("data_length")),
-                t = this;
-              return (
-                e.on("end", function () {
-                  if (this.streamInfo.data_length !== t.uncompressedSize)
-                    throw new Error("Bug : uncompressed data size mismatch");
-                }),
-                e
-              );
-            },
-            getCompressedWorker: function () {
-              return new i(n.Promise.resolve(this.compressedContent))
-                .withStreamInfo("compressedSize", this.compressedSize)
-                .withStreamInfo("uncompressedSize", this.uncompressedSize)
-                .withStreamInfo("crc32", this.crc32)
-                .withStreamInfo("compression", this.compression);
-            },
-          }),
-            (o.createWorkerFrom = function (e, t, r) {
-              return e
-                .pipe(new s())
-                .pipe(new a("uncompressedSize"))
-                .pipe(t.compressWorker(r))
-                .pipe(new a("compressedSize"))
-                .withStreamInfo("compression", t);
-            }),
-            (t.exports = o);
-        },
-        {
-          "./external": 6,
-          "./stream/Crc32Probe": 25,
-          "./stream/DataLengthProbe": 26,
-          "./stream/DataWorker": 27,
-        },
-      ],
-      3: [
-        function (e, t, r) {
-          "use strict";
-          var n = e("./stream/GenericWorker");
-          (r.STORE = {
-            magic: "\0\0",
-            compressWorker: function () {
-              return new n("STORE compression");
-            },
-            uncompressWorker: function () {
-              return new n("STORE decompression");
-            },
-          }),
-            (r.DEFLATE = e("./flate"));
-        },
-        { "./flate": 7, "./stream/GenericWorker": 28 },
-      ],
-      4: [
-        function (e, t, r) {
-          "use strict";
-          var n = e("./utils");
-          var o = (function () {
-            for (var e, t = [], r = 0; r < 256; r++) {
-              e = r;
-              for (var n = 0; n < 8; n++)
-                e = 1 & e ? 3988292384 ^ (e >>> 1) : e >>> 1;
-              t[r] = e;
-            }
-            return t;
-          })();
-          t.exports = function (e, t) {
-            return void 0 !== e && e.length
-              ? "string" !== n.getTypeOf(e)
-                ? (function (e, t, r, n) {
-                    var i = o,
-                      s = n + r;
-                    e ^= -1;
-                    for (var a = n; a < s; a++)
-                      e = (e >>> 8) ^ i[255 & (e ^ t[a])];
-                    return -1 ^ e;
-                  })(0 | t, e, e.length, 0)
-                : (function (e, t, r, n) {
-                    var i = o,
-                      s = n + r;
-                    e ^= -1;
-                    for (var a = n; a < s; a++)
-                      e = (e >>> 8) ^ i[255 & (e ^ t.charCodeAt(a))];
-                    return -1 ^ e;
-                  })(0 | t, e, e.length, 0)
-              : 0;
-          };
-        },
-        { "./utils": 32 },
-      ],
-      5: [
-        function (e, t, r) {
-          "use strict";
-          (r.base64 = !1),
-            (r.binary = !1),
-            (r.dir = !1),
-            (r.createFolders = !0),
-            (r.date = null),
-            (r.compression = null),
-            (r.compressionOptions = null),
-            (r.comment = null),
-            (r.unixPermissions = null),
-            (r.dosPermissions = null);
-        },
-        {},
-      ],
-      6: [
-        function (e, t, r) {
-          "use strict";
-          var n = null;
-          (n = "undefined" != typeof Promise ? Promise : e("lie")),
-            (t.exports = { Promise: n });
-        },
-        { lie: 37 },
-      ],
-      7: [
-        function (e, t, r) {
-          "use strict";
-          var n =
-              "undefined" != typeof Uint8Array &&
-              "undefined" != typeof Uint16Array &&
-              "undefined" != typeof Uint32Array,
-            i = e("pako"),
-            s = e("./utils"),
-            a = e("./stream/GenericWorker"),
-            o = n ? "uint8array" : "array";
-          function h(e, t) {
-            a.call(this, "FlateWorker/" + e),
-              (this._pako = null),
-              (this._pakoAction = e),
-              (this._pakoOptions = t),
-              (this.meta = {});
-          }
-          (r.magic = "\b\0"),
-            s.inherits(h, a),
-            (h.prototype.processChunk = function (e) {
-              (this.meta = e.meta),
-                null === this._pako && this._createPako(),
-                this._pako.push(s.transformTo(o, e.data), !1);
-            }),
-            (h.prototype.flush = function () {
-              a.prototype.flush.call(this),
-                null === this._pako && this._createPako(),
-                this._pako.push([], !0);
-            }),
-            (h.prototype.cleanUp = function () {
-              a.prototype.cleanUp.call(this), (this._pako = null);
-            }),
-            (h.prototype._createPako = function () {
-              this._pako = new i[this._pakoAction]({
-                raw: !0,
-                level: this._pakoOptions.level || -1,
-              });
-              var t = this;
-              this._pako.onData = function (e) {
-                t.push({ data: e, meta: t.meta });
-              };
-            }),
-            (r.compressWorker = function (e) {
-              return new h("Deflate", e);
-            }),
-            (r.uncompressWorker = function () {
-              return new h("Inflate", {});
-            });
-        },
-        { "./stream/GenericWorker": 28, "./utils": 32, pako: 38 },
-      ],
-      8: [
-        function (e, t, r) {
-          "use strict";
-          function A(e, t) {
-            var r,
-              n = "";
-            for (r = 0; r < t; r++)
-              (n += String.fromCharCode(255 & e)), (e >>>= 8);
-            return n;
-          }
-          function n(e, t, r, n, i, s) {
-            var a,
-              o,
-              h = e.file,
-              u = e.compression,
-              l = s !== O.utf8encode,
-              f = I.transformTo("string", s(h.name)),
-              c = I.transformTo("string", O.utf8encode(h.name)),
-              d = h.comment,
-              p = I.transformTo("string", s(d)),
-              m = I.transformTo("string", O.utf8encode(d)),
-              _ = c.length !== h.name.length,
-              g = m.length !== d.length,
-              b = "",
-              v = "",
-              y = "",
-              w = h.dir,
-              k = h.date,
-              x = { crc32: 0, compressedSize: 0, uncompressedSize: 0 };
-            (t && !r) ||
-              ((x.crc32 = e.crc32),
-              (x.compressedSize = e.compressedSize),
-              (x.uncompressedSize = e.uncompressedSize));
-            var S = 0;
-            t && (S |= 8), l || (!_ && !g) || (S |= 2048);
-            var z = 0,
-              C = 0;
-            w && (z |= 16),
-              "UNIX" === i
-                ? ((C = 798),
-                  (z |= (function (e, t) {
-                    var r = e;
-                    return e || (r = t ? 16893 : 33204), (65535 & r) << 16;
-                  })(h.unixPermissions, w)))
-                : ((C = 20),
-                  (z |= (function (e) {
-                    return 63 & (e || 0);
-                  })(h.dosPermissions))),
-              (a = k.getUTCHours()),
-              (a <<= 6),
-              (a |= k.getUTCMinutes()),
-              (a <<= 5),
-              (a |= k.getUTCSeconds() / 2),
-              (o = k.getUTCFullYear() - 1980),
-              (o <<= 4),
-              (o |= k.getUTCMonth() + 1),
-              (o <<= 5),
-              (o |= k.getUTCDate()),
-              _ &&
-                ((v = A(1, 1) + A(B(f), 4) + c),
-                (b += "up" + A(v.length, 2) + v)),
-              g &&
-                ((y = A(1, 1) + A(B(p), 4) + m),
-                (b += "uc" + A(y.length, 2) + y));
-            var E = "";
-            return (
-              (E += "\n\0"),
-              (E += A(S, 2)),
-              (E += u.magic),
-              (E += A(a, 2)),
-              (E += A(o, 2)),
-              (E += A(x.crc32, 4)),
-              (E += A(x.compressedSize, 4)),
-              (E += A(x.uncompressedSize, 4)),
-              (E += A(f.length, 2)),
-              (E += A(b.length, 2)),
-              {
-                fileRecord: R.LOCAL_FILE_HEADER + E + f + b,
-                dirRecord:
-                  R.CENTRAL_FILE_HEADER +
-                  A(C, 2) +
-                  E +
-                  A(p.length, 2) +
-                  "\0\0\0\0" +
-                  A(z, 4) +
-                  A(n, 4) +
-                  f +
-                  b +
-                  p,
-              }
-            );
-          }
-          var I = e("../utils"),
-            i = e("../stream/GenericWorker"),
-            O = e("../utf8"),
-            B = e("../crc32"),
-            R = e("../signature");
-          function s(e, t, r, n) {
-            i.call(this, "ZipFileWorker"),
-              (this.bytesWritten = 0),
-              (this.zipComment = t),
-              (this.zipPlatform = r),
-              (this.encodeFileName = n),
-              (this.streamFiles = e),
-              (this.accumulate = !1),
-              (this.contentBuffer = []),
-              (this.dirRecords = []),
-              (this.currentSourceOffset = 0),
-              (this.entriesCount = 0),
-              (this.currentFile = null),
-              (this._sources = []);
-          }
-          I.inherits(s, i),
-            (s.prototype.push = function (e) {
-              var t = e.meta.percent || 0,
-                r = this.entriesCount,
-                n = this._sources.length;
-              this.accumulate
-                ? this.contentBuffer.push(e)
-                : ((this.bytesWritten += e.data.length),
-                  i.prototype.push.call(this, {
-                    data: e.data,
-                    meta: {
-                      currentFile: this.currentFile,
-                      percent: r ? (t + 100 * (r - n - 1)) / r : 100,
-                    },
-                  }));
-            }),
-            (s.prototype.openedSource = function (e) {
-              (this.currentSourceOffset = this.bytesWritten),
-                (this.currentFile = e.file.name);
-              var t = this.streamFiles && !e.file.dir;
-              if (t) {
-                var r = n(
-                  e,
-                  t,
-                  !1,
-                  this.currentSourceOffset,
-                  this.zipPlatform,
-                  this.encodeFileName,
-                );
-                this.push({ data: r.fileRecord, meta: { percent: 0 } });
-              } else this.accumulate = !0;
-            }),
-            (s.prototype.closedSource = function (e) {
-              this.accumulate = !1;
-              var t = this.streamFiles && !e.file.dir,
-                r = n(
-                  e,
-                  t,
-                  !0,
-                  this.currentSourceOffset,
-                  this.zipPlatform,
-                  this.encodeFileName,
-                );
-              if ((this.dirRecords.push(r.dirRecord), t))
-                this.push({
-                  data: (function (e) {
-                    return (
-                      R.DATA_DESCRIPTOR +
-                      A(e.crc32, 4) +
-                      A(e.compressedSize, 4) +
-                      A(e.uncompressedSize, 4)
-                    );
-                  })(e),
-                  meta: { percent: 100 },
-                });
-              else
-                for (
-                  this.push({ data: r.fileRecord, meta: { percent: 0 } });
-                  this.contentBuffer.length;
-
-                )
-                  this.push(this.contentBuffer.shift());
-              this.currentFile = null;
-            }),
-            (s.prototype.flush = function () {
-              for (
-                var e = this.bytesWritten, t = 0;
-                t < this.dirRecords.length;
-                t++
-              )
-                this.push({ data: this.dirRecords[t], meta: { percent: 100 } });
-              var r = this.bytesWritten - e,
-                n = (function (e, t, r, n, i) {
-                  var s = I.transformTo("string", i(n));
-                  return (
-                    R.CENTRAL_DIRECTORY_END +
-                    "\0\0\0\0" +
-                    A(e, 2) +
-                    A(e, 2) +
-                    A(t, 4) +
-                    A(r, 4) +
-                    A(s.length, 2) +
-                    s
-                  );
-                })(
-                  this.dirRecords.length,
-                  r,
-                  e,
-                  this.zipComment,
-                  this.encodeFileName,
-                );
-              this.push({ data: n, meta: { percent: 100 } });
-            }),
-            (s.prototype.prepareNextSource = function () {
-              (this.previous = this._sources.shift()),
-                this.openedSource(this.previous.streamInfo),
-                this.isPaused ? this.previous.pause() : this.previous.resume();
-            }),
-            (s.prototype.registerPrevious = function (e) {
-              this._sources.push(e);
-              var t = this;
-              return (
-                e.on("data", function (e) {
-                  t.processChunk(e);
-                }),
-                e.on("end", function () {
-                  t.closedSource(t.previous.streamInfo),
-                    t._sources.length ? t.prepareNextSource() : t.end();
-                }),
-                e.on("error", function (e) {
-                  t.error(e);
-                }),
-                this
-              );
-            }),
-            (s.prototype.resume = function () {
-              return (
-                !!i.prototype.resume.call(this) &&
-                (!this.previous && this._sources.length
-                  ? (this.prepareNextSource(), !0)
-                  : this.previous || this._sources.length || this.generatedError
-                  ? void 0
-                  : (this.end(), !0))
-              );
-            }),
-            (s.prototype.error = function (e) {
-              var t = this._sources;
-              if (!i.prototype.error.call(this, e)) return !1;
-              for (var r = 0; r < t.length; r++)
-                try {
-                  t[r].error(e);
-                } catch (e) {}
-              return !0;
-            }),
-            (s.prototype.lock = function () {
-              i.prototype.lock.call(this);
-              for (var e = this._sources, t = 0; t < e.length; t++) e[t].lock();
-            }),
-            (t.exports = s);
-        },
-        {
-          "../crc32": 4,
-          "../signature": 23,
-          "../stream/GenericWorker": 28,
-          "../utf8": 31,
-          "../utils": 32,
-        },
-      ],
-      9: [
-        function (e, t, r) {
-          "use strict";
-          var u = e("../compressions"),
-            n = e("./ZipFileWorker");
-          r.generateWorker = function (e, a, t) {
-            var o = new n(a.streamFiles, t, a.platform, a.encodeFileName),
-              h = 0;
-            try {
-              e.forEach(function (e, t) {
-                h++;
-                var r = (function (e, t) {
-                    var r = e || t,
-                      n = u[r];
-                    if (!n)
-                      throw new Error(
-                        r + " is not a valid compression method !",
-                      );
-                    return n;
-                  })(t.options.compression, a.compression),
-                  n =
-                    t.options.compressionOptions || a.compressionOptions || {},
-                  i = t.dir,
-                  s = t.date;
-                t._compressWorker(r, n)
-                  .withStreamInfo("file", {
-                    name: e,
-                    dir: i,
-                    date: s,
-                    comment: t.comment || "",
-                    unixPermissions: t.unixPermissions,
-                    dosPermissions: t.dosPermissions,
-                  })
-                  .pipe(o);
-              }),
-                (o.entriesCount = h);
-            } catch (e) {
-              o.error(e);
-            }
-            return o;
-          };
-        },
-        { "../compressions": 3, "./ZipFileWorker": 8 },
-      ],
-      10: [
-        function (e, t, r) {
-          "use strict";
-          function n() {
-            if (!(this instanceof n)) return new n();
-            if (arguments.length)
-              throw new Error(
-                "The constructor with parameters has been removed in JSZip 3.0, please check the upgrade guide.",
-              );
-            (this.files = Object.create(null)),
-              (this.comment = null),
-              (this.root = ""),
-              (this.clone = function () {
-                var e = new n();
-                for (var t in this)
-                  "function" != typeof this[t] && (e[t] = this[t]);
-                return e;
-              });
-          }
-          ((n.prototype = e("./object")).loadAsync = e("./load")),
-            (n.support = e("./support")),
-            (n.defaults = e("./defaults")),
-            (n.version = "3.10.1"),
-            (n.loadAsync = function (e, t) {
-              return new n().loadAsync(e, t);
-            }),
-            (n.external = e("./external")),
-            (t.exports = n);
-        },
-        {
-          "./defaults": 5,
-          "./external": 6,
-          "./load": 11,
-          "./object": 15,
-          "./support": 30,
-        },
-      ],
-      11: [
-        function (e, t, r) {
-          "use strict";
-          var u = e("./utils"),
-            i = e("./external"),
-            n = e("./utf8"),
-            s = e("./zipEntries"),
-            a = e("./stream/Crc32Probe"),
-            l = e("./nodejsUtils");
-          function f(n) {
-            return new i.Promise(function (e, t) {
-              var r = n.decompressed.getContentWorker().pipe(new a());
-              r.on("error", function (e) {
-                t(e);
-              })
-                .on("end", function () {
-                  r.streamInfo.crc32 !== n.decompressed.crc32
-                    ? t(new Error("Corrupted zip : CRC32 mismatch"))
-                    : e();
-                })
-                .resume();
-            });
-          }
-          t.exports = function (e, o) {
-            var h = this;
-            return (
-              (o = u.extend(o || {}, {
-                base64: !1,
-                checkCRC32: !1,
-                optimizedBinaryString: !1,
-                createFolders: !1,
-                decodeFileName: n.utf8decode,
-              })),
-              l.isNode && l.isStream(e)
-                ? i.Promise.reject(
-                    new Error(
-                      "JSZip can't accept a stream when loading a zip file.",
-                    ),
-                  )
-                : u
-                    .prepareContent(
-                      "the loaded zip file",
-                      e,
-                      !0,
-                      o.optimizedBinaryString,
-                      o.base64,
-                    )
-                    .then(function (e) {
-                      var t = new s(o);
-                      return t.load(e), t;
-                    })
-                    .then(function (e) {
-                      var t = [i.Promise.resolve(e)],
-                        r = e.files;
-                      if (o.checkCRC32)
-                        for (var n = 0; n < r.length; n++) t.push(f(r[n]));
-                      return i.Promise.all(t);
-                    })
-                    .then(function (e) {
-                      for (
-                        var t = e.shift(), r = t.files, n = 0;
-                        n < r.length;
-                        n++
-                      ) {
-                        var i = r[n],
-                          s = i.fileNameStr,
-                          a = u.resolve(i.fileNameStr);
-                        h.file(a, i.decompressed, {
-                          binary: !0,
-                          optimizedBinaryString: !0,
-                          date: i.date,
-                          dir: i.dir,
-                          comment: i.fileCommentStr.length
-                            ? i.fileCommentStr
-                            : null,
-                          unixPermissions: i.unixPermissions,
-                          dosPermissions: i.dosPermissions,
-                          createFolders: o.createFolders,
-                        }),
-                          i.dir || (h.file(a).unsafeOriginalName = s);
-                      }
-                      return (
-                        t.zipComment.length && (h.comment = t.zipComment), h
-                      );
-                    })
-            );
-          };
-        },
-        {
-          "./external": 6,
-          "./nodejsUtils": 14,
-          "./stream/Crc32Probe": 25,
-          "./utf8": 31,
-          "./utils": 32,
-          "./zipEntries": 33,
-        },
-      ],
-      12: [
-        function (e, t, r) {
-          "use strict";
-          var n = e("../utils"),
-            i = e("../stream/GenericWorker");
-          function s(e, t) {
-            i.call(this, "Nodejs stream input adapter for " + e),
-              (this._upstreamEnded = !1),
-              this._bindStream(t);
-          }
-          n.inherits(s, i),
-            (s.prototype._bindStream = function (e) {
-              var t = this;
-              (this._stream = e).pause(),
-                e
-                  .on("data", function (e) {
-                    t.push({ data: e, meta: { percent: 0 } });
-                  })
-                  .on("error", function (e) {
-                    t.isPaused ? (this.generatedError = e) : t.error(e);
-                  })
-                  .on("end", function () {
-                    t.isPaused ? (t._upstreamEnded = !0) : t.end();
-                  });
-            }),
-            (s.prototype.pause = function () {
-              return (
-                !!i.prototype.pause.call(this) && (this._stream.pause(), !0)
-              );
-            }),
-            (s.prototype.resume = function () {
-              return (
-                !!i.prototype.resume.call(this) &&
-                (this._upstreamEnded ? this.end() : this._stream.resume(), !0)
-              );
-            }),
-            (t.exports = s);
-        },
-        { "../stream/GenericWorker": 28, "../utils": 32 },
-      ],
-      13: [
-        function (e, t, r) {
-          "use strict";
-          var i = e("readable-stream").Readable;
-          function n(e, t, r) {
-            i.call(this, t), (this._helper = e);
-            var n = this;
-            e.on("data", function (e, t) {
-              n.push(e) || n._helper.pause(), r && r(t);
-            })
-              .on("error", function (e) {
-                n.emit("error", e);
-              })
-              .on("end", function () {
-                n.push(null);
-              });
-          }
-          e("../utils").inherits(n, i),
-            (n.prototype._read = function () {
-              this._helper.resume();
-            }),
-            (t.exports = n);
-        },
-        { "../utils": 32, "readable-stream": 16 },
-      ],
-      14: [
-        function (e, t, r) {
-          "use strict";
-          t.exports = {
-            isNode: "undefined" != typeof Buffer,
-            newBufferFrom: function (e, t) {
-              if (Buffer.from && Buffer.from !== Uint8Array.from)
-                return Buffer.from(e, t);
-              if ("number" == typeof e)
-                throw new Error('The "data" argument must not be a number');
-              return new Buffer(e, t);
-            },
-            allocBuffer: function (e) {
-              if (Buffer.alloc) return Buffer.alloc(e);
-              var t = new Buffer(e);
-              return t.fill(0), t;
-            },
-            isBuffer: function (e) {
-              return Buffer.isBuffer(e);
-            },
-            isStream: function (e) {
-              return (
-                e &&
-                "function" == typeof e.on &&
-                "function" == typeof e.pause &&
-                "function" == typeof e.resume
-              );
-            },
-          };
-        },
-        {},
-      ],
-      15: [
-        function (e, t, r) {
-          "use strict";
-          function s(e, t, r) {
-            var n,
-              i = u.getTypeOf(t),
-              s = u.extend(r || {}, f);
-            (s.date = s.date || new Date()),
-              null !== s.compression &&
-                (s.compression = s.compression.toUpperCase()),
-              "string" == typeof s.unixPermissions &&
-                (s.unixPermissions = parseInt(s.unixPermissions, 8)),
-              s.unixPermissions && 16384 & s.unixPermissions && (s.dir = !0),
-              s.dosPermissions && 16 & s.dosPermissions && (s.dir = !0),
-              s.dir && (e = g(e)),
-              s.createFolders && (n = _(e)) && b.call(this, n, !0);
-            var a = "string" === i && !1 === s.binary && !1 === s.base64;
-            (r && void 0 !== r.binary) || (s.binary = !a),
-              ((t instanceof c && 0 === t.uncompressedSize) ||
-                s.dir ||
-                !t ||
-                0 === t.length) &&
-                ((s.base64 = !1),
-                (s.binary = !0),
-                (t = ""),
-                (s.compression = "STORE"),
-                (i = "string"));
-            var o = null;
-            o =
-              t instanceof c || t instanceof l
-                ? t
-                : p.isNode && p.isStream(t)
-                ? new m(e, t)
-                : u.prepareContent(
-                    e,
-                    t,
-                    s.binary,
-                    s.optimizedBinaryString,
-                    s.base64,
-                  );
-            var h = new d(e, o, s);
-            this.files[e] = h;
-          }
-          var i = e("./utf8"),
-            u = e("./utils"),
-            l = e("./stream/GenericWorker"),
-            a = e("./stream/StreamHelper"),
-            f = e("./defaults"),
-            c = e("./compressedObject"),
-            d = e("./zipObject"),
-            o = e("./generate"),
-            p = e("./nodejsUtils"),
-            m = e("./nodejs/NodejsStreamInputAdapter"),
-            _ = function (e) {
-              "/" === e.slice(-1) && (e = e.substring(0, e.length - 1));
-              var t = e.lastIndexOf("/");
-              return 0 < t ? e.substring(0, t) : "";
-            },
-            g = function (e) {
-              return "/" !== e.slice(-1) && (e += "/"), e;
-            },
-            b = function (e, t) {
-              return (
-                (t = void 0 !== t ? t : f.createFolders),
-                (e = g(e)),
-                this.files[e] ||
-                  s.call(this, e, null, { dir: !0, createFolders: t }),
-                this.files[e]
-              );
-            };
-          function h(e) {
-            return "[object RegExp]" === Object.prototype.toString.call(e);
-          }
-          var n = {
-            load: function () {
-              throw new Error(
-                "This method has been removed in JSZip 3.0, please check the upgrade guide.",
-              );
-            },
-            forEach: function (e) {
-              var t, r, n;
-              for (t in this.files)
-                (n = this.files[t]),
-                  (r = t.slice(this.root.length, t.length)) &&
-                    t.slice(0, this.root.length) === this.root &&
-                    e(r, n);
-            },
-            filter: function (r) {
-              var n = [];
-              return (
-                this.forEach(function (e, t) {
-                  r(e, t) && n.push(t);
-                }),
-                n
-              );
-            },
-            file: function (e, t, r) {
-              if (1 !== arguments.length)
-                return (e = this.root + e), s.call(this, e, t, r), this;
-              if (h(e)) {
-                var n = e;
-                return this.filter(function (e, t) {
-                  return !t.dir && n.test(e);
-                });
-              }
-              var i = this.files[this.root + e];
-              return i && !i.dir ? i : null;
-            },
-            folder: function (r) {
-              if (!r) return this;
-              if (h(r))
-                return this.filter(function (e, t) {
-                  return t.dir && r.test(e);
-                });
-              var e = this.root + r,
-                t = b.call(this, e),
-                n = this.clone();
-              return (n.root = t.name), n;
-            },
-            remove: function (r) {
-              r = this.root + r;
-              var e = this.files[r];
-              if (
-                (e || ("/" !== r.slice(-1) && (r += "/"), (e = this.files[r])),
-                e && !e.dir)
-              )
-                delete this.files[r];
-              else
-                for (
-                  var t = this.filter(function (e, t) {
-                      return t.name.slice(0, r.length) === r;
-                    }),
-                    n = 0;
-                  n < t.length;
-                  n++
-                )
-                  delete this.files[t[n].name];
-              return this;
-            },
-            generate: function () {
-              throw new Error(
-                "This method has been removed in JSZip 3.0, please check the upgrade guide.",
-              );
-            },
-            generateInternalStream: function (e) {
-              var t,
-                r = {};
-              try {
-                if (
-                  (((r = u.extend(e || {}, {
-                    streamFiles: !1,
-                    compression: "STORE",
-                    compressionOptions: null,
-                    type: "",
-                    platform: "DOS",
-                    comment: null,
-                    mimeType: "application/zip",
-                    encodeFileName: i.utf8encode,
-                  })).type = r.type.toLowerCase()),
-                  (r.compression = r.compression.toUpperCase()),
-                  "binarystring" === r.type && (r.type = "string"),
-                  !r.type)
-                )
-                  throw new Error("No output type specified.");
-                u.checkSupport(r.type),
-                  ("darwin" !== r.platform &&
-                    "freebsd" !== r.platform &&
-                    "linux" !== r.platform &&
-                    "sunos" !== r.platform) ||
-                    (r.platform = "UNIX"),
-                  "win32" === r.platform && (r.platform = "DOS");
-                var n = r.comment || this.comment || "";
-                t = o.generateWorker(this, r, n);
-              } catch (e) {
-                (t = new l("error")).error(e);
-              }
-              return new a(t, r.type || "string", r.mimeType);
-            },
-            generateAsync: function (e, t) {
-              return this.generateInternalStream(e).accumulate(t);
-            },
-            generateNodeStream: function (e, t) {
-              return (
-                (e = e || {}).type || (e.type = "nodebuffer"),
-                this.generateInternalStream(e).toNodejsStream(t)
-              );
-            },
-          };
-          t.exports = n;
-        },
-        {
-          "./compressedObject": 2,
-          "./defaults": 5,
-          "./generate": 9,
-          "./nodejs/NodejsStreamInputAdapter": 12,
-          "./nodejsUtils": 14,
-          "./stream/GenericWorker": 28,
-          "./stream/StreamHelper": 29,
-          "./utf8": 31,
-          "./utils": 32,
-          "./zipObject": 35,
-        },
-      ],
-      16: [
-        function (e, t, r) {
-          "use strict";
-          t.exports = e("stream");
-        },
-        { stream: void 0 },
-      ],
-      17: [
-        function (e, t, r) {
-          "use strict";
-          var n = e("./DataReader");
-          function i(e) {
-            n.call(this, e);
-            for (var t = 0; t < this.data.length; t++) e[t] = 255 & e[t];
-          }
-          e("../utils").inherits(i, n),
-            (i.prototype.byteAt = function (e) {
-              return this.data[this.zero + e];
-            }),
-            (i.prototype.lastIndexOfSignature = function (e) {
-              for (
-                var t = e.charCodeAt(0),
-                  r = e.charCodeAt(1),
-                  n = e.charCodeAt(2),
-                  i = e.charCodeAt(3),
-                  s = this.length - 4;
-                0 <= s;
-                --s
-              )
-                if (
-                  this.data[s] === t &&
-                  this.data[s + 1] === r &&
-                  this.data[s + 2] === n &&
-                  this.data[s + 3] === i
-                )
-                  return s - this.zero;
-              return -1;
-            }),
-            (i.prototype.readAndCheckSignature = function (e) {
-              var t = e.charCodeAt(0),
-                r = e.charCodeAt(1),
-                n = e.charCodeAt(2),
-                i = e.charCodeAt(3),
-                s = this.readData(4);
-              return t === s[0] && r === s[1] && n === s[2] && i === s[3];
-            }),
-            (i.prototype.readData = function (e) {
-              if ((this.checkOffset(e), 0 === e)) return [];
-              var t = this.data.slice(
-                this.zero + this.index,
-                this.zero + this.index + e,
-              );
-              return (this.index += e), t;
-            }),
-            (t.exports = i);
-        },
-        { "../utils": 32, "./DataReader": 18 },
-      ],
-      18: [
-        function (e, t, r) {
-          "use strict";
-          var n = e("../utils");
-          function i(e) {
-            (this.data = e),
-              (this.length = e.length),
-              (this.index = 0),
-              (this.zero = 0);
-          }
-          (i.prototype = {
-            checkOffset: function (e) {
-              this.checkIndex(this.index + e);
-            },
-            checkIndex: function (e) {
-              if (this.length < this.zero + e || e < 0)
-                throw new Error(
-                  "End of data reached (data length = " +
-                    this.length +
-                    ", asked index = " +
-                    e +
-                    "). Corrupted zip ?",
-                );
-            },
-            setIndex: function (e) {
-              this.checkIndex(e), (this.index = e);
-            },
-            skip: function (e) {
-              this.setIndex(this.index + e);
-            },
-            byteAt: function () {},
-            readInt: function (e) {
-              var t,
-                r = 0;
-              for (
-                this.checkOffset(e), t = this.index + e - 1;
-                t >= this.index;
-                t--
-              )
-                r = (r << 8) + this.byteAt(t);
-              return (this.index += e), r;
-            },
-            readString: function (e) {
-              return n.transformTo("string", this.readData(e));
-            },
-            readData: function () {},
-            lastIndexOfSignature: function () {},
-            readAndCheckSignature: function () {},
-            readDate: function () {
-              var e = this.readInt(4);
-              return new Date(
-                Date.UTC(
-                  1980 + ((e >> 25) & 127),
-                  ((e >> 21) & 15) - 1,
-                  (e >> 16) & 31,
-                  (e >> 11) & 31,
-                  (e >> 5) & 63,
-                  (31 & e) << 1,
-                ),
-              );
-            },
-          }),
-            (t.exports = i);
-        },
-        { "../utils": 32 },
-      ],
-      19: [
-        function (e, t, r) {
-          "use strict";
-          var n = e("./Uint8ArrayReader");
-          function i(e) {
-            n.call(this, e);
-          }
-          e("../utils").inherits(i, n),
-            (i.prototype.readData = function (e) {
-              this.checkOffset(e);
-              var t = this.data.slice(
-                this.zero + this.index,
-                this.zero + this.index + e,
-              );
-              return (this.index += e), t;
-            }),
-            (t.exports = i);
-        },
-        { "../utils": 32, "./Uint8ArrayReader": 21 },
-      ],
-      20: [
-        function (e, t, r) {
-          "use strict";
-          var n = e("./DataReader");
-          function i(e) {
-            n.call(this, e);
-          }
-          e("../utils").inherits(i, n),
-            (i.prototype.byteAt = function (e) {
-              return this.data.charCodeAt(this.zero + e);
-            }),
-            (i.prototype.lastIndexOfSignature = function (e) {
-              return this.data.lastIndexOf(e) - this.zero;
-            }),
-            (i.prototype.readAndCheckSignature = function (e) {
-              return e === this.readData(4);
-            }),
-            (i.prototype.readData = function (e) {
-              this.checkOffset(e);
-              var t = this.data.slice(
-                this.zero + this.index,
-                this.zero + this.index + e,
-              );
-              return (this.index += e), t;
-            }),
-            (t.exports = i);
-        },
-        { "../utils": 32, "./DataReader": 18 },
-      ],
-      21: [
-        function (e, t, r) {
-          "use strict";
-          var n = e("./ArrayReader");
-          function i(e) {
-            n.call(this, e);
-          }
-          e("../utils").inherits(i, n),
-            (i.prototype.readData = function (e) {
-              if ((this.checkOffset(e), 0 === e)) return new Uint8Array(0);
-              var t = this.data.subarray(
-                this.zero + this.index,
-                this.zero + this.index + e,
-              );
-              return (this.index += e), t;
-            }),
-            (t.exports = i);
-        },
-        { "../utils": 32, "./ArrayReader": 17 },
-      ],
-      22: [
-        function (e, t, r) {
-          "use strict";
-          var n = e("../utils"),
-            i = e("../support"),
-            s = e("./ArrayReader"),
-            a = e("./StringReader"),
-            o = e("./NodeBufferReader"),
-            h = e("./Uint8ArrayReader");
-          t.exports = function (e) {
-            var t = n.getTypeOf(e);
-            return (
-              n.checkSupport(t),
-              "string" !== t || i.uint8array
-                ? "nodebuffer" === t
-                  ? new o(e)
-                  : i.uint8array
-                  ? new h(n.transformTo("uint8array", e))
-                  : new s(n.transformTo("array", e))
-                : new a(e)
-            );
-          };
-        },
-        {
-          "../support": 30,
-          "../utils": 32,
-          "./ArrayReader": 17,
-          "./NodeBufferReader": 19,
-          "./StringReader": 20,
-          "./Uint8ArrayReader": 21,
-        },
-      ],
-      23: [
-        function (e, t, r) {
-          "use strict";
-          (r.LOCAL_FILE_HEADER = "PK"),
-            (r.CENTRAL_FILE_HEADER = "PK"),
-            (r.CENTRAL_DIRECTORY_END = "PK"),
-            (r.ZIP64_CENTRAL_DIRECTORY_LOCATOR = "PK"),
-            (r.ZIP64_CENTRAL_DIRECTORY_END = "PK"),
-            (r.DATA_DESCRIPTOR = "PK\b");
-        },
-        {},
-      ],
-      24: [
-        function (e, t, r) {
-          "use strict";
-          var n = e("./GenericWorker"),
-            i = e("../utils");
-          function s(e) {
-            n.call(this, "ConvertWorker to " + e), (this.destType = e);
-          }
-          i.inherits(s, n),
-            (s.prototype.processChunk = function (e) {
-              this.push({
-                data: i.transformTo(this.destType, e.data),
-                meta: e.meta,
-              });
-            }),
-            (t.exports = s);
-        },
-        { "../utils": 32, "./GenericWorker": 28 },
-      ],
-      25: [
-        function (e, t, r) {
-          "use strict";
-          var n = e("./GenericWorker"),
-            i = e("../crc32");
-          function s() {
-            n.call(this, "Crc32Probe"), this.withStreamInfo("crc32", 0);
-          }
-          e("../utils").inherits(s, n),
-            (s.prototype.processChunk = function (e) {
-              (this.streamInfo.crc32 = i(e.data, this.streamInfo.crc32 || 0)),
-                this.push(e);
-            }),
-            (t.exports = s);
-        },
-        { "../crc32": 4, "../utils": 32, "./GenericWorker": 28 },
-      ],
-      26: [
-        function (e, t, r) {
-          "use strict";
-          var n = e("../utils"),
-            i = e("./GenericWorker");
-          function s(e) {
-            i.call(this, "DataLengthProbe for " + e),
-              (this.propName = e),
-              this.withStreamInfo(e, 0);
-          }
-          n.inherits(s, i),
-            (s.prototype.processChunk = function (e) {
-              if (e) {
-                var t = this.streamInfo[this.propName] || 0;
-                this.streamInfo[this.propName] = t + e.data.length;
-              }
-              i.prototype.processChunk.call(this, e);
-            }),
-            (t.exports = s);
-        },
-        { "../utils": 32, "./GenericWorker": 28 },
-      ],
-      27: [
-        function (e, t, r) {
-          "use strict";
-          var n = e("../utils"),
-            i = e("./GenericWorker");
-          function s(e) {
-            i.call(this, "DataWorker");
-            var t = this;
-            (this.dataIsReady = !1),
-              (this.index = 0),
-              (this.max = 0),
-              (this.data = null),
-              (this.type = ""),
-              (this._tickScheduled = !1),
-              e.then(
-                function (e) {
-                  (t.dataIsReady = !0),
-                    (t.data = e),
-                    (t.max = (e && e.length) || 0),
-                    (t.type = n.getTypeOf(e)),
-                    t.isPaused || t._tickAndRepeat();
-                },
-                function (e) {
-                  t.error(e);
-                },
-              );
-          }
-          n.inherits(s, i),
-            (s.prototype.cleanUp = function () {
-              i.prototype.cleanUp.call(this), (this.data = null);
-            }),
-            (s.prototype.resume = function () {
-              return (
-                !!i.prototype.resume.call(this) &&
-                (!this._tickScheduled &&
-                  this.dataIsReady &&
-                  ((this._tickScheduled = !0),
-                  n.delay(this._tickAndRepeat, [], this)),
-                !0)
-              );
-            }),
-            (s.prototype._tickAndRepeat = function () {
-              (this._tickScheduled = !1),
-                this.isPaused ||
-                  this.isFinished ||
-                  (this._tick(),
-                  this.isFinished ||
-                    (n.delay(this._tickAndRepeat, [], this),
-                    (this._tickScheduled = !0)));
-            }),
-            (s.prototype._tick = function () {
-              if (this.isPaused || this.isFinished) return !1;
-              var e = null,
-                t = Math.min(this.max, this.index + 16384);
-              if (this.index >= this.max) return this.end();
-              switch (this.type) {
-                case "string":
-                  e = this.data.substring(this.index, t);
-                  break;
-                case "uint8array":
-                  e = this.data.subarray(this.index, t);
-                  break;
-                case "array":
-                case "nodebuffer":
-                  e = this.data.slice(this.index, t);
-              }
-              return (
-                (this.index = t),
-                this.push({
-                  data: e,
-                  meta: {
-                    percent: this.max ? (this.index / this.max) * 100 : 0,
-                  },
-                })
-              );
-            }),
-            (t.exports = s);
-        },
-        { "../utils": 32, "./GenericWorker": 28 },
-      ],
-      28: [
-        function (e, t, r) {
-          "use strict";
-          function n(e) {
-            (this.name = e || "default"),
-              (this.streamInfo = {}),
-              (this.generatedError = null),
-              (this.extraStreamInfo = {}),
-              (this.isPaused = !0),
-              (this.isFinished = !1),
-              (this.isLocked = !1),
-              (this._listeners = { data: [], end: [], error: [] }),
-              (this.previous = null);
-          }
-          (n.prototype = {
-            push: function (e) {
-              this.emit("data", e);
-            },
-            end: function () {
-              if (this.isFinished) return !1;
-              this.flush();
-              try {
-                this.emit("end"), this.cleanUp(), (this.isFinished = !0);
-              } catch (e) {
-                this.emit("error", e);
-              }
-              return !0;
-            },
-            error: function (e) {
-              return (
-                !this.isFinished &&
-                (this.isPaused
-                  ? (this.generatedError = e)
-                  : ((this.isFinished = !0),
-                    this.emit("error", e),
-                    this.previous && this.previous.error(e),
-                    this.cleanUp()),
-                !0)
-              );
-            },
-            on: function (e, t) {
-              return this._listeners[e].push(t), this;
-            },
-            cleanUp: function () {
-              (this.streamInfo =
-                this.generatedError =
-                this.extraStreamInfo =
-                  null),
-                (this._listeners = []);
-            },
-            emit: function (e, t) {
-              if (this._listeners[e])
-                for (var r = 0; r < this._listeners[e].length; r++)
-                  this._listeners[e][r].call(this, t);
-            },
-            pipe: function (e) {
-              return e.registerPrevious(this);
-            },
-            registerPrevious: function (e) {
-              if (this.isLocked)
-                throw new Error(
-                  "The stream '" + this + "' has already been used.",
-                );
-              (this.streamInfo = e.streamInfo),
-                this.mergeStreamInfo(),
-                (this.previous = e);
-              var t = this;
-              return (
-                e.on("data", function (e) {
-                  t.processChunk(e);
-                }),
-                e.on("end", function () {
-                  t.end();
-                }),
-                e.on("error", function (e) {
-                  t.error(e);
-                }),
-                this
-              );
-            },
-            pause: function () {
-              return (
-                !this.isPaused &&
-                !this.isFinished &&
-                ((this.isPaused = !0),
-                this.previous && this.previous.pause(),
-                !0)
-              );
-            },
-            resume: function () {
-              if (!this.isPaused || this.isFinished) return !1;
-              var e = (this.isPaused = !1);
-              return (
-                this.generatedError &&
-                  (this.error(this.generatedError), (e = !0)),
-                this.previous && this.previous.resume(),
-                !e
-              );
-            },
-            flush: function () {},
-            processChunk: function (e) {
-              this.push(e);
-            },
-            withStreamInfo: function (e, t) {
-              return (
-                (this.extraStreamInfo[e] = t), this.mergeStreamInfo(), this
-              );
-            },
-            mergeStreamInfo: function () {
-              for (var e in this.extraStreamInfo)
-                Object.prototype.hasOwnProperty.call(this.extraStreamInfo, e) &&
-                  (this.streamInfo[e] = this.extraStreamInfo[e]);
-            },
-            lock: function () {
-              if (this.isLocked)
-                throw new Error(
-                  "The stream '" + this + "' has already been used.",
-                );
-              (this.isLocked = !0), this.previous && this.previous.lock();
-            },
-            toString: function () {
-              var e = "Worker " + this.name;
-              return this.previous ? this.previous + " -> " + e : e;
-            },
-          }),
-            (t.exports = n);
-        },
-        {},
-      ],
-      29: [
-        function (e, t, r) {
-          "use strict";
-          var h = e("../utils"),
-            i = e("./ConvertWorker"),
-            s = e("./GenericWorker"),
-            u = e("../base64"),
-            n = e("../support"),
-            a = e("../external"),
-            o = null;
-          if (n.nodestream)
-            try {
-              o = e("../nodejs/NodejsStreamOutputAdapter");
-            } catch (e) {}
-          function l(e, o) {
-            return new a.Promise(function (t, r) {
-              var n = [],
-                i = e._internalType,
-                s = e._outputType,
-                a = e._mimeType;
-              e.on("data", function (e, t) {
-                n.push(e), o && o(t);
-              })
-                .on("error", function (e) {
-                  (n = []), r(e);
-                })
-                .on("end", function () {
-                  try {
-                    var e = (function (e, t, r) {
-                      switch (e) {
-                        case "blob":
-                          return h.newBlob(h.transformTo("arraybuffer", t), r);
-                        case "base64":
-                          return u.encode(t);
-                        default:
-                          return h.transformTo(e, t);
-                      }
-                    })(
-                      s,
-                      (function (e, t) {
-                        var r,
-                          n = 0,
-                          i = null,
-                          s = 0;
-                        for (r = 0; r < t.length; r++) s += t[r].length;
-                        switch (e) {
-                          case "string":
-                            return t.join("");
-                          case "array":
-                            return Array.prototype.concat.apply([], t);
-                          case "uint8array":
-                            for (
-                              i = new Uint8Array(s), r = 0;
-                              r < t.length;
-                              r++
-                            )
-                              i.set(t[r], n), (n += t[r].length);
-                            return i;
-                          case "nodebuffer":
-                            return Buffer.concat(t);
-                          default:
-                            throw new Error(
-                              "concat : unsupported type '" + e + "'",
-                            );
-                        }
-                      })(i, n),
-                      a,
-                    );
-                    t(e);
-                  } catch (e) {
-                    r(e);
-                  }
-                  n = [];
-                })
-                .resume();
-            });
-          }
-          function f(e, t, r) {
-            var n = t;
-            switch (t) {
-              case "blob":
-              case "arraybuffer":
-                n = "uint8array";
-                break;
-              case "base64":
-                n = "string";
-            }
-            try {
-              (this._internalType = n),
-                (this._outputType = t),
-                (this._mimeType = r),
-                h.checkSupport(n),
-                (this._worker = e.pipe(new i(n))),
-                e.lock();
-            } catch (e) {
-              (this._worker = new s("error")), this._worker.error(e);
-            }
-          }
-          (f.prototype = {
-            accumulate: function (e) {
-              return l(this, e);
-            },
-            on: function (e, t) {
-              var r = this;
-              return (
-                "data" === e
-                  ? this._worker.on(e, function (e) {
-                      t.call(r, e.data, e.meta);
-                    })
-                  : this._worker.on(e, function () {
-                      h.delay(t, arguments, r);
-                    }),
-                this
-              );
-            },
-            resume: function () {
-              return h.delay(this._worker.resume, [], this._worker), this;
-            },
-            pause: function () {
-              return this._worker.pause(), this;
-            },
-            toNodejsStream: function (e) {
-              if (
-                (h.checkSupport("nodestream"),
-                "nodebuffer" !== this._outputType)
-              )
-                throw new Error(
-                  this._outputType + " is not supported by this method",
-                );
-              return new o(
-                this,
-                { objectMode: "nodebuffer" !== this._outputType },
-                e,
-              );
-            },
-          }),
-            (t.exports = f);
-        },
-        {
-          "../base64": 1,
-          "../external": 6,
-          "../nodejs/NodejsStreamOutputAdapter": 13,
-          "../support": 30,
-          "../utils": 32,
-          "./ConvertWorker": 24,
-          "./GenericWorker": 28,
-        },
-      ],
-      30: [
-        function (e, t, r) {
-          "use strict";
-          if (
-            ((r.base64 = !0),
-            (r.array = !0),
-            (r.string = !0),
-            (r.arraybuffer =
-              "undefined" != typeof ArrayBuffer &&
-              "undefined" != typeof Uint8Array),
-            (r.nodebuffer = "undefined" != typeof Buffer),
-            (r.uint8array = "undefined" != typeof Uint8Array),
-            "undefined" == typeof ArrayBuffer)
-          )
-            r.blob = !1;
-          else {
-            var n = new ArrayBuffer(0);
-            try {
-              r.blob = 0 === new Blob([n], { type: "application/zip" }).size;
-            } catch (e) {
-              try {
-                var i = new (self.BlobBuilder ||
-                  self.WebKitBlobBuilder ||
-                  self.MozBlobBuilder ||
-                  self.MSBlobBuilder)();
-                i.append(n), (r.blob = 0 === i.getBlob("application/zip").size);
-              } catch (e) {
-                r.blob = !1;
-              }
-            }
-          }
-          try {
-            r.nodestream = !!e("readable-stream").Readable;
-          } catch (e) {
-            r.nodestream = !1;
-          }
-        },
-        { "readable-stream": 16 },
-      ],
-      31: [
-        function (e, t, s) {
-          "use strict";
-          for (
-            var o = e("./utils"),
-              h = e("./support"),
-              r = e("./nodejsUtils"),
-              n = e("./stream/GenericWorker"),
-              u = new Array(256),
-              i = 0;
-            i < 256;
-            i++
-          )
-            u[i] =
-              252 <= i
-                ? 6
-                : 248 <= i
-                ? 5
-                : 240 <= i
-                ? 4
-                : 224 <= i
-                ? 3
-                : 192 <= i
-                ? 2
-                : 1;
-          u[254] = u[254] = 1;
-          function a() {
-            n.call(this, "utf-8 decode"), (this.leftOver = null);
-          }
-          function l() {
-            n.call(this, "utf-8 encode");
-          }
-          (s.utf8encode = function (e) {
-            return h.nodebuffer
-              ? r.newBufferFrom(e, "utf-8")
-              : (function (e) {
-                  var t,
-                    r,
-                    n,
-                    i,
-                    s,
-                    a = e.length,
-                    o = 0;
-                  for (i = 0; i < a; i++)
-                    55296 == (64512 & (r = e.charCodeAt(i))) &&
-                      i + 1 < a &&
-                      56320 == (64512 & (n = e.charCodeAt(i + 1))) &&
-                      ((r = 65536 + ((r - 55296) << 10) + (n - 56320)), i++),
-                      (o += r < 128 ? 1 : r < 2048 ? 2 : r < 65536 ? 3 : 4);
-                  for (
-                    t = h.uint8array ? new Uint8Array(o) : new Array(o),
-                      i = s = 0;
-                    s < o;
-                    i++
-                  )
-                    55296 == (64512 & (r = e.charCodeAt(i))) &&
-                      i + 1 < a &&
-                      56320 == (64512 & (n = e.charCodeAt(i + 1))) &&
-                      ((r = 65536 + ((r - 55296) << 10) + (n - 56320)), i++),
-                      r < 128
-                        ? (t[s++] = r)
-                        : (r < 2048
-                            ? (t[s++] = 192 | (r >>> 6))
-                            : (r < 65536
-                                ? (t[s++] = 224 | (r >>> 12))
-                                : ((t[s++] = 240 | (r >>> 18)),
-                                  (t[s++] = 128 | ((r >>> 12) & 63))),
-                              (t[s++] = 128 | ((r >>> 6) & 63))),
-                          (t[s++] = 128 | (63 & r)));
-                  return t;
-                })(e);
-          }),
-            (s.utf8decode = function (e) {
-              return h.nodebuffer
-                ? o.transformTo("nodebuffer", e).toString("utf-8")
-                : (function (e) {
-                    var t,
-                      r,
-                      n,
-                      i,
-                      s = e.length,
-                      a = new Array(2 * s);
-                    for (t = r = 0; t < s; )
-                      if ((n = e[t++]) < 128) a[r++] = n;
-                      else if (4 < (i = u[n])) (a[r++] = 65533), (t += i - 1);
-                      else {
-                        for (
-                          n &= 2 === i ? 31 : 3 === i ? 15 : 7;
-                          1 < i && t < s;
-
-                        )
-                          (n = (n << 6) | (63 & e[t++])), i--;
-                        1 < i
-                          ? (a[r++] = 65533)
-                          : n < 65536
-                          ? (a[r++] = n)
-                          : ((n -= 65536),
-                            (a[r++] = 55296 | ((n >> 10) & 1023)),
-                            (a[r++] = 56320 | (1023 & n)));
-                      }
-                    return (
-                      a.length !== r &&
-                        (a.subarray ? (a = a.subarray(0, r)) : (a.length = r)),
-                      o.applyFromCharCode(a)
-                    );
-                  })(
-                    (e = o.transformTo(
-                      h.uint8array ? "uint8array" : "array",
-                      e,
-                    )),
-                  );
-            }),
-            o.inherits(a, n),
-            (a.prototype.processChunk = function (e) {
-              var t = o.transformTo(
-                h.uint8array ? "uint8array" : "array",
-                e.data,
-              );
-              if (this.leftOver && this.leftOver.length) {
-                if (h.uint8array) {
-                  var r = t;
-                  (t = new Uint8Array(r.length + this.leftOver.length)).set(
-                    this.leftOver,
-                    0,
-                  ),
-                    t.set(r, this.leftOver.length);
-                } else t = this.leftOver.concat(t);
-                this.leftOver = null;
-              }
-              var n = (function (e, t) {
-                  var r;
-                  for (
-                    (t = t || e.length) > e.length && (t = e.length), r = t - 1;
-                    0 <= r && 128 == (192 & e[r]);
-
-                  )
-                    r--;
-                  return r < 0 ? t : 0 === r ? t : r + u[e[r]] > t ? r : t;
-                })(t),
-                i = t;
-              n !== t.length &&
-                (h.uint8array
-                  ? ((i = t.subarray(0, n)),
-                    (this.leftOver = t.subarray(n, t.length)))
-                  : ((i = t.slice(0, n)),
-                    (this.leftOver = t.slice(n, t.length)))),
-                this.push({ data: s.utf8decode(i), meta: e.meta });
-            }),
-            (a.prototype.flush = function () {
-              this.leftOver &&
-                this.leftOver.length &&
-                (this.push({ data: s.utf8decode(this.leftOver), meta: {} }),
-                (this.leftOver = null));
-            }),
-            (s.Utf8DecodeWorker = a),
-            o.inherits(l, n),
-            (l.prototype.processChunk = function (e) {
-              this.push({ data: s.utf8encode(e.data), meta: e.meta });
-            }),
-            (s.Utf8EncodeWorker = l);
-        },
-        {
-          "./nodejsUtils": 14,
-          "./stream/GenericWorker": 28,
-          "./support": 30,
-          "./utils": 32,
-        },
-      ],
-      32: [
-        function (e, t, a) {
-          "use strict";
-          var o = e("./support"),
-            h = e("./base64"),
-            r = e("./nodejsUtils"),
-            u = e("./external");
-          function n(e) {
-            return e;
-          }
-          function l(e, t) {
-            for (var r = 0; r < e.length; ++r) t[r] = 255 & e.charCodeAt(r);
-            return t;
-          }
-          e("setimmediate"),
-            (a.newBlob = function (t, r) {
-              a.checkSupport("blob");
-              try {
-                return new Blob([t], { type: r });
-              } catch (e) {
-                try {
-                  var n = new (self.BlobBuilder ||
-                    self.WebKitBlobBuilder ||
-                    self.MozBlobBuilder ||
-                    self.MSBlobBuilder)();
-                  return n.append(t), n.getBlob(r);
-                } catch (e) {
-                  throw new Error("Bug : can't construct the Blob.");
-                }
-              }
-            });
-          var i = {
-            stringifyByChunk: function (e, t, r) {
-              var n = [],
-                i = 0,
-                s = e.length;
-              if (s <= r) return String.fromCharCode.apply(null, e);
-              for (; i < s; )
-                "array" === t || "nodebuffer" === t
-                  ? n.push(
-                      String.fromCharCode.apply(
-                        null,
-                        e.slice(i, Math.min(i + r, s)),
-                      ),
-                    )
-                  : n.push(
-                      String.fromCharCode.apply(
-                        null,
-                        e.subarray(i, Math.min(i + r, s)),
-                      ),
-                    ),
-                  (i += r);
-              return n.join("");
-            },
-            stringifyByChar: function (e) {
-              for (var t = "", r = 0; r < e.length; r++)
-                t += String.fromCharCode(e[r]);
-              return t;
-            },
-            applyCanBeUsed: {
-              uint8array: (function () {
-                try {
-                  return (
-                    o.uint8array &&
-                    1 ===
-                      String.fromCharCode.apply(null, new Uint8Array(1)).length
-                  );
-                } catch (e) {
-                  return !1;
-                }
-              })(),
-              nodebuffer: (function () {
-                try {
-                  return (
-                    o.nodebuffer &&
-                    1 ===
-                      String.fromCharCode.apply(null, r.allocBuffer(1)).length
-                  );
-                } catch (e) {
-                  return !1;
-                }
-              })(),
-            },
-          };
-          function s(e) {
-            var t = 65536,
-              r = a.getTypeOf(e),
-              n = !0;
-            if (
-              ("uint8array" === r
-                ? (n = i.applyCanBeUsed.uint8array)
-                : "nodebuffer" === r && (n = i.applyCanBeUsed.nodebuffer),
-              n)
-            )
-              for (; 1 < t; )
-                try {
-                  return i.stringifyByChunk(e, r, t);
-                } catch (e) {
-                  t = Math.floor(t / 2);
-                }
-            return i.stringifyByChar(e);
-          }
-          function f(e, t) {
-            for (var r = 0; r < e.length; r++) t[r] = e[r];
-            return t;
-          }
-          a.applyFromCharCode = s;
-          var c = {};
-          (c.string = {
-            string: n,
-            array: function (e) {
-              return l(e, new Array(e.length));
-            },
-            arraybuffer: function (e) {
-              return c.string.uint8array(e).buffer;
-            },
-            uint8array: function (e) {
-              return l(e, new Uint8Array(e.length));
-            },
-            nodebuffer: function (e) {
-              return l(e, r.allocBuffer(e.length));
-            },
-          }),
-            (c.array = {
-              string: s,
-              array: n,
-              arraybuffer: function (e) {
-                return new Uint8Array(e).buffer;
-              },
-              uint8array: function (e) {
-                return new Uint8Array(e);
-              },
-              nodebuffer: function (e) {
-                return r.newBufferFrom(e);
-              },
-            }),
-            (c.arraybuffer = {
-              string: function (e) {
-                return s(new Uint8Array(e));
-              },
-              array: function (e) {
-                return f(new Uint8Array(e), new Array(e.byteLength));
-              },
-              arraybuffer: n,
-              uint8array: function (e) {
-                return new Uint8Array(e);
-              },
-              nodebuffer: function (e) {
-                return r.newBufferFrom(new Uint8Array(e));
-              },
-            }),
-            (c.uint8array = {
-              string: s,
-              array: function (e) {
-                return f(e, new Array(e.length));
-              },
-              arraybuffer: function (e) {
-                return e.buffer;
-              },
-              uint8array: n,
-              nodebuffer: function (e) {
-                return r.newBufferFrom(e);
-              },
-            }),
-            (c.nodebuffer = {
-              string: s,
-              array: function (e) {
-                return f(e, new Array(e.length));
-              },
-              arraybuffer: function (e) {
-                return c.nodebuffer.uint8array(e).buffer;
-              },
-              uint8array: function (e) {
-                return f(e, new Uint8Array(e.length));
-              },
-              nodebuffer: n,
-            }),
-            (a.transformTo = function (e, t) {
-              if (((t = t || ""), !e)) return t;
-              a.checkSupport(e);
-              var r = a.getTypeOf(t);
-              return c[r][e](t);
-            }),
-            (a.resolve = function (e) {
-              for (var t = e.split("/"), r = [], n = 0; n < t.length; n++) {
-                var i = t[n];
-                "." === i ||
-                  ("" === i && 0 !== n && n !== t.length - 1) ||
-                  (".." === i ? r.pop() : r.push(i));
-              }
-              return r.join("/");
-            }),
-            (a.getTypeOf = function (e) {
-              return "string" == typeof e
-                ? "string"
-                : "[object Array]" === Object.prototype.toString.call(e)
-                ? "array"
-                : o.nodebuffer && r.isBuffer(e)
-                ? "nodebuffer"
-                : o.uint8array && e instanceof Uint8Array
-                ? "uint8array"
-                : o.arraybuffer && e instanceof ArrayBuffer
-                ? "arraybuffer"
-                : void 0;
-            }),
-            (a.checkSupport = function (e) {
-              if (!o[e.toLowerCase()])
-                throw new Error(e + " is not supported by this platform");
-            }),
-            (a.MAX_VALUE_16BITS = 65535),
-            (a.MAX_VALUE_32BITS = -1),
-            (a.pretty = function (e) {
-              var t,
-                r,
-                n = "";
-              for (r = 0; r < (e || "").length; r++)
-                n +=
-                  "\\x" +
-                  ((t = e.charCodeAt(r)) < 16 ? "0" : "") +
-                  t.toString(16).toUpperCase();
-              return n;
-            }),
-            (a.delay = function (e, t, r) {
-              setImmediate(function () {
-                e.apply(r || null, t || []);
-              });
-            }),
-            (a.inherits = function (e, t) {
-              function r() {}
-              (r.prototype = t.prototype), (e.prototype = new r());
-            }),
-            (a.extend = function () {
-              var e,
-                t,
-                r = {};
-              for (e = 0; e < arguments.length; e++)
-                for (t in arguments[e])
-                  Object.prototype.hasOwnProperty.call(arguments[e], t) &&
-                    void 0 === r[t] &&
-                    (r[t] = arguments[e][t]);
-              return r;
-            }),
-            (a.prepareContent = function (r, e, n, i, s) {
-              return u.Promise.resolve(e)
-                .then(function (n) {
-                  return o.blob &&
-                    (n instanceof Blob ||
-                      -1 !==
-                        ["[object File]", "[object Blob]"].indexOf(
-                          Object.prototype.toString.call(n),
-                        )) &&
-                    "undefined" != typeof FileReader
-                    ? new u.Promise(function (t, r) {
-                        var e = new FileReader();
-                        (e.onload = function (e) {
-                          t(e.target.result);
-                        }),
-                          (e.onerror = function (e) {
-                            r(e.target.error);
-                          }),
-                          e.readAsArrayBuffer(n);
-                      })
-                    : n;
-                })
-                .then(function (e) {
-                  var t = a.getTypeOf(e);
-                  return t
-                    ? ("arraybuffer" === t
-                        ? (e = a.transformTo("uint8array", e))
-                        : "string" === t &&
-                          (s
-                            ? (e = h.decode(e))
-                            : n &&
-                              !0 !== i &&
-                              (e = (function (e) {
-                                return l(
-                                  e,
-                                  o.uint8array
-                                    ? new Uint8Array(e.length)
-                                    : new Array(e.length),
-                                );
-                              })(e))),
-                      e)
-                    : u.Promise.reject(
-                        new Error(
-                          "Can't read the data of '" +
-                            r +
-                            "'. Is it in a supported JavaScript type (String, Blob, ArrayBuffer, etc) ?",
-                        ),
-                      );
-                });
-            });
-        },
-        {
-          "./base64": 1,
-          "./external": 6,
-          "./nodejsUtils": 14,
-          "./support": 30,
-          setimmediate: 54,
-        },
-      ],
-      33: [
-        function (e, t, r) {
-          "use strict";
-          var n = e("./reader/readerFor"),
-            i = e("./utils"),
-            s = e("./signature"),
-            a = e("./zipEntry"),
-            o = e("./support");
-          function h(e) {
-            (this.files = []), (this.loadOptions = e);
-          }
-          (h.prototype = {
-            checkSignature: function (e) {
-              if (!this.reader.readAndCheckSignature(e)) {
-                this.reader.index -= 4;
-                var t = this.reader.readString(4);
-                throw new Error(
-                  "Corrupted zip or bug: unexpected signature (" +
-                    i.pretty(t) +
-                    ", expected " +
-                    i.pretty(e) +
-                    ")",
-                );
-              }
-            },
-            isSignature: function (e, t) {
-              var r = this.reader.index;
-              this.reader.setIndex(e);
-              var n = this.reader.readString(4) === t;
-              return this.reader.setIndex(r), n;
-            },
-            readBlockEndOfCentral: function () {
-              (this.diskNumber = this.reader.readInt(2)),
-                (this.diskWithCentralDirStart = this.reader.readInt(2)),
-                (this.centralDirRecordsOnThisDisk = this.reader.readInt(2)),
-                (this.centralDirRecords = this.reader.readInt(2)),
-                (this.centralDirSize = this.reader.readInt(4)),
-                (this.centralDirOffset = this.reader.readInt(4)),
-                (this.zipCommentLength = this.reader.readInt(2));
-              var e = this.reader.readData(this.zipCommentLength),
-                t = o.uint8array ? "uint8array" : "array",
-                r = i.transformTo(t, e);
-              this.zipComment = this.loadOptions.decodeFileName(r);
-            },
-            readBlockZip64EndOfCentral: function () {
-              (this.zip64EndOfCentralSize = this.reader.readInt(8)),
-                this.reader.skip(4),
-                (this.diskNumber = this.reader.readInt(4)),
-                (this.diskWithCentralDirStart = this.reader.readInt(4)),
-                (this.centralDirRecordsOnThisDisk = this.reader.readInt(8)),
-                (this.centralDirRecords = this.reader.readInt(8)),
-                (this.centralDirSize = this.reader.readInt(8)),
-                (this.centralDirOffset = this.reader.readInt(8)),
-                (this.zip64ExtensibleData = {});
-              for (var e, t, r, n = this.zip64EndOfCentralSize - 44; 0 < n; )
-                (e = this.reader.readInt(2)),
-                  (t = this.reader.readInt(4)),
-                  (r = this.reader.readData(t)),
-                  (this.zip64ExtensibleData[e] = {
-                    id: e,
-                    length: t,
-                    value: r,
-                  });
-            },
-            readBlockZip64EndOfCentralLocator: function () {
-              if (
-                ((this.diskWithZip64CentralDirStart = this.reader.readInt(4)),
-                (this.relativeOffsetEndOfZip64CentralDir =
-                  this.reader.readInt(8)),
-                (this.disksCount = this.reader.readInt(4)),
-                1 < this.disksCount)
-              )
-                throw new Error("Multi-volumes zip are not supported");
-            },
-            readLocalFiles: function () {
-              var e, t;
-              for (e = 0; e < this.files.length; e++)
-                (t = this.files[e]),
-                  this.reader.setIndex(t.localHeaderOffset),
-                  this.checkSignature(s.LOCAL_FILE_HEADER),
-                  t.readLocalPart(this.reader),
-                  t.handleUTF8(),
-                  t.processAttributes();
-            },
-            readCentralDir: function () {
-              var e;
-              for (
-                this.reader.setIndex(this.centralDirOffset);
-                this.reader.readAndCheckSignature(s.CENTRAL_FILE_HEADER);
-
-              )
-                (e = new a(
-                  { zip64: this.zip64 },
-                  this.loadOptions,
-                )).readCentralPart(this.reader),
-                  this.files.push(e);
-              if (
-                this.centralDirRecords !== this.files.length &&
-                0 !== this.centralDirRecords &&
-                0 === this.files.length
-              )
-                throw new Error(
-                  "Corrupted zip or bug: expected " +
-                    this.centralDirRecords +
-                    " records in central dir, got " +
-                    this.files.length,
-                );
-            },
-            readEndOfCentral: function () {
-              var e = this.reader.lastIndexOfSignature(s.CENTRAL_DIRECTORY_END);
-              if (e < 0)
-                throw !this.isSignature(0, s.LOCAL_FILE_HEADER)
-                  ? new Error(
-                      "Can't find end of central directory : is this a zip file ? If it is, see https://stuk.github.io/jszip/documentation/howto/read_zip.html",
-                    )
-                  : new Error(
-                      "Corrupted zip: can't find end of central directory",
-                    );
-              this.reader.setIndex(e);
-              var t = e;
-              if (
-                (this.checkSignature(s.CENTRAL_DIRECTORY_END),
-                this.readBlockEndOfCentral(),
-                this.diskNumber === i.MAX_VALUE_16BITS ||
-                  this.diskWithCentralDirStart === i.MAX_VALUE_16BITS ||
-                  this.centralDirRecordsOnThisDisk === i.MAX_VALUE_16BITS ||
-                  this.centralDirRecords === i.MAX_VALUE_16BITS ||
-                  this.centralDirSize === i.MAX_VALUE_32BITS ||
-                  this.centralDirOffset === i.MAX_VALUE_32BITS)
-              ) {
-                if (
-                  ((this.zip64 = !0),
-                  (e = this.reader.lastIndexOfSignature(
-                    s.ZIP64_CENTRAL_DIRECTORY_LOCATOR,
-                  )) < 0)
-                )
-                  throw new Error(
-                    "Corrupted zip: can't find the ZIP64 end of central directory locator",
-                  );
-                if (
-                  (this.reader.setIndex(e),
-                  this.checkSignature(s.ZIP64_CENTRAL_DIRECTORY_LOCATOR),
-                  this.readBlockZip64EndOfCentralLocator(),
-                  !this.isSignature(
-                    this.relativeOffsetEndOfZip64CentralDir,
-                    s.ZIP64_CENTRAL_DIRECTORY_END,
-                  ) &&
-                    ((this.relativeOffsetEndOfZip64CentralDir =
-                      this.reader.lastIndexOfSignature(
-                        s.ZIP64_CENTRAL_DIRECTORY_END,
-                      )),
-                    this.relativeOffsetEndOfZip64CentralDir < 0))
-                )
-                  throw new Error(
-                    "Corrupted zip: can't find the ZIP64 end of central directory",
-                  );
-                this.reader.setIndex(this.relativeOffsetEndOfZip64CentralDir),
-                  this.checkSignature(s.ZIP64_CENTRAL_DIRECTORY_END),
-                  this.readBlockZip64EndOfCentral();
-              }
-              var r = this.centralDirOffset + this.centralDirSize;
-              this.zip64 && ((r += 20), (r += 12 + this.zip64EndOfCentralSize));
-              var n = t - r;
-              if (0 < n)
-                this.isSignature(t, s.CENTRAL_FILE_HEADER) ||
-                  (this.reader.zero = n);
-              else if (n < 0)
-                throw new Error(
-                  "Corrupted zip: missing " + Math.abs(n) + " bytes.",
-                );
-            },
-            prepareReader: function (e) {
-              this.reader = n(e);
-            },
-            load: function (e) {
-              this.prepareReader(e),
-                this.readEndOfCentral(),
-                this.readCentralDir(),
-                this.readLocalFiles();
-            },
-          }),
-            (t.exports = h);
-        },
-        {
-          "./reader/readerFor": 22,
-          "./signature": 23,
-          "./support": 30,
-          "./utils": 32,
-          "./zipEntry": 34,
-        },
-      ],
-      34: [
-        function (e, t, r) {
-          "use strict";
-          var n = e("./reader/readerFor"),
-            s = e("./utils"),
-            i = e("./compressedObject"),
-            a = e("./crc32"),
-            o = e("./utf8"),
-            h = e("./compressions"),
-            u = e("./support");
-          function l(e, t) {
-            (this.options = e), (this.loadOptions = t);
-          }
-          (l.prototype = {
-            isEncrypted: function () {
-              return 1 == (1 & this.bitFlag);
-            },
-            useUTF8: function () {
-              return 2048 == (2048 & this.bitFlag);
-            },
-            readLocalPart: function (e) {
-              var t, r;
-              if (
-                (e.skip(22),
-                (this.fileNameLength = e.readInt(2)),
-                (r = e.readInt(2)),
-                (this.fileName = e.readData(this.fileNameLength)),
-                e.skip(r),
-                -1 === this.compressedSize || -1 === this.uncompressedSize)
-              )
-                throw new Error(
-                  "Bug or corrupted zip : didn't get enough information from the central directory (compressedSize === -1 || uncompressedSize === -1)",
-                );
-              if (
-                null ===
-                (t = (function (e) {
-                  for (var t in h)
-                    if (
-                      Object.prototype.hasOwnProperty.call(h, t) &&
-                      h[t].magic === e
-                    )
-                      return h[t];
-                  return null;
-                })(this.compressionMethod))
-              )
-                throw new Error(
-                  "Corrupted zip : compression " +
-                    s.pretty(this.compressionMethod) +
-                    " unknown (inner file : " +
-                    s.transformTo("string", this.fileName) +
-                    ")",
-                );
-              this.decompressed = new i(
-                this.compressedSize,
-                this.uncompressedSize,
-                this.crc32,
-                t,
-                e.readData(this.compressedSize),
-              );
-            },
-            readCentralPart: function (e) {
-              (this.versionMadeBy = e.readInt(2)),
-                e.skip(2),
-                (this.bitFlag = e.readInt(2)),
-                (this.compressionMethod = e.readString(2)),
-                (this.date = e.readDate()),
-                (this.crc32 = e.readInt(4)),
-                (this.compressedSize = e.readInt(4)),
-                (this.uncompressedSize = e.readInt(4));
-              var t = e.readInt(2);
-              if (
-                ((this.extraFieldsLength = e.readInt(2)),
-                (this.fileCommentLength = e.readInt(2)),
-                (this.diskNumberStart = e.readInt(2)),
-                (this.internalFileAttributes = e.readInt(2)),
-                (this.externalFileAttributes = e.readInt(4)),
-                (this.localHeaderOffset = e.readInt(4)),
-                this.isEncrypted())
-              )
-                throw new Error("Encrypted zip are not supported");
-              e.skip(t),
-                this.readExtraFields(e),
-                this.parseZIP64ExtraField(e),
-                (this.fileComment = e.readData(this.fileCommentLength));
-            },
-            processAttributes: function () {
-              (this.unixPermissions = null), (this.dosPermissions = null);
-              var e = this.versionMadeBy >> 8;
-              (this.dir = !!(16 & this.externalFileAttributes)),
-                0 == e &&
-                  (this.dosPermissions = 63 & this.externalFileAttributes),
-                3 == e &&
-                  (this.unixPermissions =
-                    (this.externalFileAttributes >> 16) & 65535),
-                this.dir ||
-                  "/" !== this.fileNameStr.slice(-1) ||
-                  (this.dir = !0);
-            },
-            parseZIP64ExtraField: function () {
-              if (this.extraFields[1]) {
-                var e = n(this.extraFields[1].value);
-                this.uncompressedSize === s.MAX_VALUE_32BITS &&
-                  (this.uncompressedSize = e.readInt(8)),
-                  this.compressedSize === s.MAX_VALUE_32BITS &&
-                    (this.compressedSize = e.readInt(8)),
-                  this.localHeaderOffset === s.MAX_VALUE_32BITS &&
-                    (this.localHeaderOffset = e.readInt(8)),
-                  this.diskNumberStart === s.MAX_VALUE_32BITS &&
-                    (this.diskNumberStart = e.readInt(4));
-              }
-            },
-            readExtraFields: function (e) {
-              var t,
-                r,
-                n,
-                i = e.index + this.extraFieldsLength;
-              for (
-                this.extraFields || (this.extraFields = {});
-                e.index + 4 < i;
-
-              )
-                (t = e.readInt(2)),
-                  (r = e.readInt(2)),
-                  (n = e.readData(r)),
-                  (this.extraFields[t] = { id: t, length: r, value: n });
-              e.setIndex(i);
-            },
-            handleUTF8: function () {
-              var e = u.uint8array ? "uint8array" : "array";
-              if (this.useUTF8())
-                (this.fileNameStr = o.utf8decode(this.fileName)),
-                  (this.fileCommentStr = o.utf8decode(this.fileComment));
-              else {
-                var t = this.findExtraFieldUnicodePath();
-                if (null !== t) this.fileNameStr = t;
-                else {
-                  var r = s.transformTo(e, this.fileName);
-                  this.fileNameStr = this.loadOptions.decodeFileName(r);
-                }
-                var n = this.findExtraFieldUnicodeComment();
-                if (null !== n) this.fileCommentStr = n;
-                else {
-                  var i = s.transformTo(e, this.fileComment);
-                  this.fileCommentStr = this.loadOptions.decodeFileName(i);
-                }
-              }
-            },
-            findExtraFieldUnicodePath: function () {
-              var e = this.extraFields[28789];
-              if (e) {
-                var t = n(e.value);
-                return 1 !== t.readInt(1)
-                  ? null
-                  : a(this.fileName) !== t.readInt(4)
-                  ? null
-                  : o.utf8decode(t.readData(e.length - 5));
-              }
-              return null;
-            },
-            findExtraFieldUnicodeComment: function () {
-              var e = this.extraFields[25461];
-              if (e) {
-                var t = n(e.value);
-                return 1 !== t.readInt(1)
-                  ? null
-                  : a(this.fileComment) !== t.readInt(4)
-                  ? null
-                  : o.utf8decode(t.readData(e.length - 5));
-              }
-              return null;
-            },
-          }),
-            (t.exports = l);
-        },
-        {
-          "./compressedObject": 2,
-          "./compressions": 3,
-          "./crc32": 4,
-          "./reader/readerFor": 22,
-          "./support": 30,
-          "./utf8": 31,
-          "./utils": 32,
-        },
-      ],
-      35: [
-        function (e, t, r) {
-          "use strict";
-          function n(e, t, r) {
-            (this.name = e),
-              (this.dir = r.dir),
-              (this.date = r.date),
-              (this.comment = r.comment),
-              (this.unixPermissions = r.unixPermissions),
-              (this.dosPermissions = r.dosPermissions),
-              (this._data = t),
-              (this._dataBinary = r.binary),
-              (this.options = {
-                compression: r.compression,
-                compressionOptions: r.compressionOptions,
-              });
-          }
-          var s = e("./stream/StreamHelper"),
-            i = e("./stream/DataWorker"),
-            a = e("./utf8"),
-            o = e("./compressedObject"),
-            h = e("./stream/GenericWorker");
-          n.prototype = {
-            internalStream: function (e) {
-              var t = null,
-                r = "string";
-              try {
-                if (!e) throw new Error("No output type specified.");
-                var n = "string" === (r = e.toLowerCase()) || "text" === r;
-                ("binarystring" !== r && "text" !== r) || (r = "string"),
-                  (t = this._decompressWorker());
-                var i = !this._dataBinary;
-                i && !n && (t = t.pipe(new a.Utf8EncodeWorker())),
-                  !i && n && (t = t.pipe(new a.Utf8DecodeWorker()));
-              } catch (e) {
-                (t = new h("error")).error(e);
-              }
-              return new s(t, r, "");
-            },
-            async: function (e, t) {
-              return this.internalStream(e).accumulate(t);
-            },
-            nodeStream: function (e, t) {
-              return this.internalStream(e || "nodebuffer").toNodejsStream(t);
-            },
-            _compressWorker: function (e, t) {
-              if (
-                this._data instanceof o &&
-                this._data.compression.magic === e.magic
-              )
-                return this._data.getCompressedWorker();
-              var r = this._decompressWorker();
-              return (
-                this._dataBinary || (r = r.pipe(new a.Utf8EncodeWorker())),
-                o.createWorkerFrom(r, e, t)
-              );
-            },
-            _decompressWorker: function () {
-              return this._data instanceof o
-                ? this._data.getContentWorker()
-                : this._data instanceof h
-                ? this._data
-                : new i(this._data);
-            },
-          };
-          for (
-            var u = [
-                "asText",
-                "asBinary",
-                "asNodeBuffer",
-                "asUint8Array",
-                "asArrayBuffer",
-              ],
-              l = function () {
-                throw new Error(
-                  "This method has been removed in JSZip 3.0, please check the upgrade guide.",
-                );
-              },
-              f = 0;
-            f < u.length;
-            f++
-          )
-            n.prototype[u[f]] = l;
-          t.exports = n;
-        },
-        {
-          "./compressedObject": 2,
-          "./stream/DataWorker": 27,
-          "./stream/GenericWorker": 28,
-          "./stream/StreamHelper": 29,
-          "./utf8": 31,
-        },
-      ],
-      36: [
-        function (e, l, t) {
-          (function (t) {
-            "use strict";
-            var r,
-              n,
-              e = t.MutationObserver || t.WebKitMutationObserver;
-            if (e) {
-              var i = 0,
-                s = new e(u),
-                a = t.document.createTextNode("");
-              s.observe(a, { characterData: !0 }),
-                (r = function () {
-                  a.data = i = ++i % 2;
-                });
-            } else if (t.setImmediate || void 0 === t.MessageChannel)
-              r =
-                "document" in t &&
-                "onreadystatechange" in t.document.createElement("script")
-                  ? function () {
-                      var e = t.document.createElement("script");
-                      (e.onreadystatechange = function () {
-                        u(),
-                          (e.onreadystatechange = null),
-                          e.parentNode.removeChild(e),
-                          (e = null);
-                      }),
-                        t.document.documentElement.appendChild(e);
-                    }
-                  : function () {
-                      setTimeout(u, 0);
-                    };
-            else {
-              var o = new t.MessageChannel();
-              (o.port1.onmessage = u),
-                (r = function () {
-                  o.port2.postMessage(0);
-                });
-            }
-            var h = [];
-            function u() {
-              var e, t;
-              n = !0;
-              for (var r = h.length; r; ) {
-                for (t = h, h = [], e = -1; ++e < r; ) t[e]();
-                r = h.length;
-              }
-              n = !1;
-            }
-            l.exports = function (e) {
-              1 !== h.push(e) || n || r();
-            };
-          }).call(
-            this,
-            "undefined" != typeof global
-              ? global
-              : "undefined" != typeof self
-              ? self
-              : "undefined" != typeof window
-              ? window
-              : {},
-          );
-        },
-        {},
-      ],
-      37: [
-        function (e, t, r) {
-          "use strict";
-          var i = e("immediate");
-          function u() {}
-          var l = {},
-            s = ["REJECTED"],
-            a = ["FULFILLED"],
-            n = ["PENDING"];
-          function o(e) {
-            if ("function" != typeof e)
-              throw new TypeError("resolver must be a function");
-            (this.state = n),
-              (this.queue = []),
-              (this.outcome = void 0),
-              e !== u && d(this, e);
-          }
-          function h(e, t, r) {
-            (this.promise = e),
-              "function" == typeof t &&
-                ((this.onFulfilled = t),
-                (this.callFulfilled = this.otherCallFulfilled)),
-              "function" == typeof r &&
-                ((this.onRejected = r),
-                (this.callRejected = this.otherCallRejected));
-          }
-          function f(t, r, n) {
-            i(function () {
-              var e;
-              try {
-                e = r(n);
-              } catch (e) {
-                return l.reject(t, e);
-              }
-              e === t
-                ? l.reject(
-                    t,
-                    new TypeError("Cannot resolve promise with itself"),
-                  )
-                : l.resolve(t, e);
-            });
-          }
-          function c(e) {
-            var t = e && e.then;
-            if (
-              e &&
-              ("object" == typeof e || "function" == typeof e) &&
-              "function" == typeof t
-            )
-              return function () {
-                t.apply(e, arguments);
-              };
-          }
-          function d(t, e) {
-            var r = !1;
-            function n(e) {
-              r || ((r = !0), l.reject(t, e));
-            }
-            function i(e) {
-              r || ((r = !0), l.resolve(t, e));
-            }
-            var s = p(function () {
-              e(i, n);
-            });
-            "error" === s.status && n(s.value);
-          }
-          function p(e, t) {
-            var r = {};
-            try {
-              (r.value = e(t)), (r.status = "success");
-            } catch (e) {
-              (r.status = "error"), (r.value = e);
-            }
-            return r;
-          }
-          ((t.exports = o).prototype.finally = function (t) {
-            if ("function" != typeof t) return this;
-            var r = this.constructor;
-            return this.then(
-              function (e) {
-                return r.resolve(t()).then(function () {
-                  return e;
-                });
-              },
-              function (e) {
-                return r.resolve(t()).then(function () {
-                  throw e;
-                });
-              },
-            );
-          }),
-            (o.prototype.catch = function (e) {
-              return this.then(null, e);
-            }),
-            (o.prototype.then = function (e, t) {
-              if (
-                ("function" != typeof e && this.state === a) ||
-                ("function" != typeof t && this.state === s)
-              )
-                return this;
-              var r = new this.constructor(u);
-              this.state !== n
-                ? f(r, this.state === a ? e : t, this.outcome)
-                : this.queue.push(new h(r, e, t));
-              return r;
-            }),
-            (h.prototype.callFulfilled = function (e) {
-              l.resolve(this.promise, e);
-            }),
-            (h.prototype.otherCallFulfilled = function (e) {
-              f(this.promise, this.onFulfilled, e);
-            }),
-            (h.prototype.callRejected = function (e) {
-              l.reject(this.promise, e);
-            }),
-            (h.prototype.otherCallRejected = function (e) {
-              f(this.promise, this.onRejected, e);
-            }),
-            (l.resolve = function (e, t) {
-              var r = p(c, t);
-              if ("error" === r.status) return l.reject(e, r.value);
-              var n = r.value;
-              if (n) d(e, n);
-              else {
-                (e.state = a), (e.outcome = t);
-                for (var i = -1, s = e.queue.length; ++i < s; )
-                  e.queue[i].callFulfilled(t);
-              }
-              return e;
-            }),
-            (l.reject = function (e, t) {
-              (e.state = s), (e.outcome = t);
-              for (var r = -1, n = e.queue.length; ++r < n; )
-                e.queue[r].callRejected(t);
-              return e;
-            }),
-            (o.resolve = function (e) {
-              if (e instanceof this) return e;
-              return l.resolve(new this(u), e);
-            }),
-            (o.reject = function (e) {
-              var t = new this(u);
-              return l.reject(t, e);
-            }),
-            (o.all = function (e) {
-              var r = this;
-              if ("[object Array]" !== Object.prototype.toString.call(e))
-                return this.reject(new TypeError("must be an array"));
-              var n = e.length,
-                i = !1;
-              if (!n) return this.resolve([]);
-              var s = new Array(n),
-                a = 0,
-                t = -1,
-                o = new this(u);
-              for (; ++t < n; ) h(e[t], t);
-              return o;
-              function h(e, t) {
-                r.resolve(e).then(
-                  function (e) {
-                    (s[t] = e), ++a !== n || i || ((i = !0), l.resolve(o, s));
-                  },
-                  function (e) {
-                    i || ((i = !0), l.reject(o, e));
-                  },
-                );
-              }
-            }),
-            (o.race = function (e) {
-              var t = this;
-              if ("[object Array]" !== Object.prototype.toString.call(e))
-                return this.reject(new TypeError("must be an array"));
-              var r = e.length,
-                n = !1;
-              if (!r) return this.resolve([]);
-              var i = -1,
-                s = new this(u);
-              for (; ++i < r; )
-                (a = e[i]),
-                  t.resolve(a).then(
-                    function (e) {
-                      n || ((n = !0), l.resolve(s, e));
-                    },
-                    function (e) {
-                      n || ((n = !0), l.reject(s, e));
-                    },
-                  );
-              var a;
-              return s;
-            });
-        },
-        { immediate: 36 },
-      ],
-      38: [
-        function (e, t, r) {
-          "use strict";
-          var n = {};
-          (0, e("./lib/utils/common").assign)(
-            n,
-            e("./lib/deflate"),
-            e("./lib/inflate"),
-            e("./lib/zlib/constants"),
-          ),
-            (t.exports = n);
-        },
-        {
-          "./lib/deflate": 39,
-          "./lib/inflate": 40,
-          "./lib/utils/common": 41,
-          "./lib/zlib/constants": 44,
-        },
-      ],
-      39: [
-        function (e, t, r) {
-          "use strict";
-          var a = e("./zlib/deflate"),
-            o = e("./utils/common"),
-            h = e("./utils/strings"),
-            i = e("./zlib/messages"),
-            s = e("./zlib/zstream"),
-            u = Object.prototype.toString,
-            l = 0,
-            f = -1,
-            c = 0,
-            d = 8;
-          function p(e) {
-            if (!(this instanceof p)) return new p(e);
-            this.options = o.assign(
-              {
-                level: f,
-                method: d,
-                chunkSize: 16384,
-                windowBits: 15,
-                memLevel: 8,
-                strategy: c,
-                to: "",
-              },
-              e || {},
-            );
-            var t = this.options;
-            t.raw && 0 < t.windowBits
-              ? (t.windowBits = -t.windowBits)
-              : t.gzip &&
-                0 < t.windowBits &&
-                t.windowBits < 16 &&
-                (t.windowBits += 16),
-              (this.err = 0),
-              (this.msg = ""),
-              (this.ended = !1),
-              (this.chunks = []),
-              (this.strm = new s()),
-              (this.strm.avail_out = 0);
-            var r = a.deflateInit2(
-              this.strm,
-              t.level,
-              t.method,
-              t.windowBits,
-              t.memLevel,
-              t.strategy,
-            );
-            if (r !== l) throw new Error(i[r]);
-            if (
-              (t.header && a.deflateSetHeader(this.strm, t.header),
-              t.dictionary)
-            ) {
-              var n;
-              if (
-                ((n =
-                  "string" == typeof t.dictionary
-                    ? h.string2buf(t.dictionary)
-                    : "[object ArrayBuffer]" === u.call(t.dictionary)
-                    ? new Uint8Array(t.dictionary)
-                    : t.dictionary),
-                (r = a.deflateSetDictionary(this.strm, n)) !== l)
-              )
-                throw new Error(i[r]);
-              this._dict_set = !0;
-            }
-          }
-          function n(e, t) {
-            var r = new p(t);
-            if ((r.push(e, !0), r.err)) throw r.msg || i[r.err];
-            return r.result;
-          }
-          (p.prototype.push = function (e, t) {
-            var r,
-              n,
-              i = this.strm,
-              s = this.options.chunkSize;
-            if (this.ended) return !1;
-            (n = t === ~~t ? t : !0 === t ? 4 : 0),
-              "string" == typeof e
-                ? (i.input = h.string2buf(e))
-                : "[object ArrayBuffer]" === u.call(e)
-                ? (i.input = new Uint8Array(e))
-                : (i.input = e),
-              (i.next_in = 0),
-              (i.avail_in = i.input.length);
-            do {
-              if (
-                (0 === i.avail_out &&
-                  ((i.output = new o.Buf8(s)),
-                  (i.next_out = 0),
-                  (i.avail_out = s)),
-                1 !== (r = a.deflate(i, n)) && r !== l)
-              )
-                return this.onEnd(r), !(this.ended = !0);
-              (0 !== i.avail_out &&
-                (0 !== i.avail_in || (4 !== n && 2 !== n))) ||
-                ("string" === this.options.to
-                  ? this.onData(
-                      h.buf2binstring(o.shrinkBuf(i.output, i.next_out)),
-                    )
-                  : this.onData(o.shrinkBuf(i.output, i.next_out)));
-            } while ((0 < i.avail_in || 0 === i.avail_out) && 1 !== r);
-            return 4 === n
-              ? ((r = a.deflateEnd(this.strm)),
-                this.onEnd(r),
-                (this.ended = !0),
-                r === l)
-              : 2 !== n || (this.onEnd(l), !(i.avail_out = 0));
-          }),
-            (p.prototype.onData = function (e) {
-              this.chunks.push(e);
-            }),
-            (p.prototype.onEnd = function (e) {
-              e === l &&
-                ("string" === this.options.to
-                  ? (this.result = this.chunks.join(""))
-                  : (this.result = o.flattenChunks(this.chunks))),
-                (this.chunks = []),
-                (this.err = e),
-                (this.msg = this.strm.msg);
-            }),
-            (r.Deflate = p),
-            (r.deflate = n),
-            (r.deflateRaw = function (e, t) {
-              return ((t = t || {}).raw = !0), n(e, t);
-            }),
-            (r.gzip = function (e, t) {
-              return ((t = t || {}).gzip = !0), n(e, t);
-            });
-        },
-        {
-          "./utils/common": 41,
-          "./utils/strings": 42,
-          "./zlib/deflate": 46,
-          "./zlib/messages": 51,
-          "./zlib/zstream": 53,
-        },
-      ],
-      40: [
-        function (e, t, r) {
-          "use strict";
-          var c = e("./zlib/inflate"),
-            d = e("./utils/common"),
-            p = e("./utils/strings"),
-            m = e("./zlib/constants"),
-            n = e("./zlib/messages"),
-            i = e("./zlib/zstream"),
-            s = e("./zlib/gzheader"),
-            _ = Object.prototype.toString;
-          function a(e) {
-            if (!(this instanceof a)) return new a(e);
-            this.options = d.assign(
-              { chunkSize: 16384, windowBits: 0, to: "" },
-              e || {},
-            );
-            var t = this.options;
-            t.raw &&
-              0 <= t.windowBits &&
-              t.windowBits < 16 &&
-              ((t.windowBits = -t.windowBits),
-              0 === t.windowBits && (t.windowBits = -15)),
-              !(0 <= t.windowBits && t.windowBits < 16) ||
-                (e && e.windowBits) ||
-                (t.windowBits += 32),
-              15 < t.windowBits &&
-                t.windowBits < 48 &&
-                0 == (15 & t.windowBits) &&
-                (t.windowBits |= 15),
-              (this.err = 0),
-              (this.msg = ""),
-              (this.ended = !1),
-              (this.chunks = []),
-              (this.strm = new i()),
-              (this.strm.avail_out = 0);
-            var r = c.inflateInit2(this.strm, t.windowBits);
-            if (r !== m.Z_OK) throw new Error(n[r]);
-            (this.header = new s()), c.inflateGetHeader(this.strm, this.header);
-          }
-          function o(e, t) {
-            var r = new a(t);
-            if ((r.push(e, !0), r.err)) throw r.msg || n[r.err];
-            return r.result;
-          }
-          (a.prototype.push = function (e, t) {
-            var r,
-              n,
-              i,
-              s,
-              a,
-              o,
-              h = this.strm,
-              u = this.options.chunkSize,
-              l = this.options.dictionary,
-              f = !1;
-            if (this.ended) return !1;
-            (n = t === ~~t ? t : !0 === t ? m.Z_FINISH : m.Z_NO_FLUSH),
-              "string" == typeof e
-                ? (h.input = p.binstring2buf(e))
-                : "[object ArrayBuffer]" === _.call(e)
-                ? (h.input = new Uint8Array(e))
-                : (h.input = e),
-              (h.next_in = 0),
-              (h.avail_in = h.input.length);
-            do {
-              if (
-                (0 === h.avail_out &&
-                  ((h.output = new d.Buf8(u)),
-                  (h.next_out = 0),
-                  (h.avail_out = u)),
-                (r = c.inflate(h, m.Z_NO_FLUSH)) === m.Z_NEED_DICT &&
-                  l &&
-                  ((o =
-                    "string" == typeof l
-                      ? p.string2buf(l)
-                      : "[object ArrayBuffer]" === _.call(l)
-                      ? new Uint8Array(l)
-                      : l),
-                  (r = c.inflateSetDictionary(this.strm, o))),
-                r === m.Z_BUF_ERROR && !0 === f && ((r = m.Z_OK), (f = !1)),
-                r !== m.Z_STREAM_END && r !== m.Z_OK)
-              )
-                return this.onEnd(r), !(this.ended = !0);
-              h.next_out &&
-                ((0 !== h.avail_out &&
-                  r !== m.Z_STREAM_END &&
-                  (0 !== h.avail_in ||
-                    (n !== m.Z_FINISH && n !== m.Z_SYNC_FLUSH))) ||
-                  ("string" === this.options.to
-                    ? ((i = p.utf8border(h.output, h.next_out)),
-                      (s = h.next_out - i),
-                      (a = p.buf2string(h.output, i)),
-                      (h.next_out = s),
-                      (h.avail_out = u - s),
-                      s && d.arraySet(h.output, h.output, i, s, 0),
-                      this.onData(a))
-                    : this.onData(d.shrinkBuf(h.output, h.next_out)))),
-                0 === h.avail_in && 0 === h.avail_out && (f = !0);
-            } while (
-              (0 < h.avail_in || 0 === h.avail_out) &&
-              r !== m.Z_STREAM_END
-            );
-            return (
-              r === m.Z_STREAM_END && (n = m.Z_FINISH),
-              n === m.Z_FINISH
-                ? ((r = c.inflateEnd(this.strm)),
-                  this.onEnd(r),
-                  (this.ended = !0),
-                  r === m.Z_OK)
-                : n !== m.Z_SYNC_FLUSH ||
-                  (this.onEnd(m.Z_OK), !(h.avail_out = 0))
-            );
-          }),
-            (a.prototype.onData = function (e) {
-              this.chunks.push(e);
-            }),
-            (a.prototype.onEnd = function (e) {
-              e === m.Z_OK &&
-                ("string" === this.options.to
-                  ? (this.result = this.chunks.join(""))
-                  : (this.result = d.flattenChunks(this.chunks))),
-                (this.chunks = []),
-                (this.err = e),
-                (this.msg = this.strm.msg);
-            }),
-            (r.Inflate = a),
-            (r.inflate = o),
-            (r.inflateRaw = function (e, t) {
-              return ((t = t || {}).raw = !0), o(e, t);
-            }),
-            (r.ungzip = o);
-        },
-        {
-          "./utils/common": 41,
-          "./utils/strings": 42,
-          "./zlib/constants": 44,
-          "./zlib/gzheader": 47,
-          "./zlib/inflate": 49,
-          "./zlib/messages": 51,
-          "./zlib/zstream": 53,
-        },
-      ],
-      41: [
-        function (e, t, r) {
-          "use strict";
-          var n =
-            "undefined" != typeof Uint8Array &&
-            "undefined" != typeof Uint16Array &&
-            "undefined" != typeof Int32Array;
-          (r.assign = function (e) {
-            for (var t = Array.prototype.slice.call(arguments, 1); t.length; ) {
-              var r = t.shift();
-              if (r) {
-                if ("object" != typeof r)
-                  throw new TypeError(r + "must be non-object");
-                for (var n in r) r.hasOwnProperty(n) && (e[n] = r[n]);
-              }
-            }
-            return e;
-          }),
-            (r.shrinkBuf = function (e, t) {
-              return e.length === t
-                ? e
-                : e.subarray
-                ? e.subarray(0, t)
-                : ((e.length = t), e);
-            });
-          var i = {
-              arraySet: function (e, t, r, n, i) {
-                if (t.subarray && e.subarray) e.set(t.subarray(r, r + n), i);
-                else for (var s = 0; s < n; s++) e[i + s] = t[r + s];
-              },
-              flattenChunks: function (e) {
-                var t, r, n, i, s, a;
-                for (t = n = 0, r = e.length; t < r; t++) n += e[t].length;
-                for (a = new Uint8Array(n), t = i = 0, r = e.length; t < r; t++)
-                  (s = e[t]), a.set(s, i), (i += s.length);
-                return a;
-              },
-            },
-            s = {
-              arraySet: function (e, t, r, n, i) {
-                for (var s = 0; s < n; s++) e[i + s] = t[r + s];
-              },
-              flattenChunks: function (e) {
-                return [].concat.apply([], e);
-              },
-            };
-          (r.setTyped = function (e) {
-            e
-              ? ((r.Buf8 = Uint8Array),
-                (r.Buf16 = Uint16Array),
-                (r.Buf32 = Int32Array),
-                r.assign(r, i))
-              : ((r.Buf8 = Array),
-                (r.Buf16 = Array),
-                (r.Buf32 = Array),
-                r.assign(r, s));
-          }),
-            r.setTyped(n);
-        },
-        {},
-      ],
-      42: [
-        function (e, t, r) {
-          "use strict";
-          var h = e("./common"),
-            i = !0,
-            s = !0;
-          try {
-            String.fromCharCode.apply(null, [0]);
-          } catch (e) {
-            i = !1;
-          }
-          try {
-            String.fromCharCode.apply(null, new Uint8Array(1));
-          } catch (e) {
-            s = !1;
-          }
-          for (var u = new h.Buf8(256), n = 0; n < 256; n++)
-            u[n] =
-              252 <= n
-                ? 6
-                : 248 <= n
-                ? 5
-                : 240 <= n
-                ? 4
-                : 224 <= n
-                ? 3
-                : 192 <= n
-                ? 2
-                : 1;
-          function l(e, t) {
-            if (t < 65537 && ((e.subarray && s) || (!e.subarray && i)))
-              return String.fromCharCode.apply(null, h.shrinkBuf(e, t));
-            for (var r = "", n = 0; n < t; n++) r += String.fromCharCode(e[n]);
-            return r;
-          }
-          (u[254] = u[254] = 1),
-            (r.string2buf = function (e) {
-              var t,
-                r,
-                n,
-                i,
-                s,
-                a = e.length,
-                o = 0;
-              for (i = 0; i < a; i++)
-                55296 == (64512 & (r = e.charCodeAt(i))) &&
-                  i + 1 < a &&
-                  56320 == (64512 & (n = e.charCodeAt(i + 1))) &&
-                  ((r = 65536 + ((r - 55296) << 10) + (n - 56320)), i++),
-                  (o += r < 128 ? 1 : r < 2048 ? 2 : r < 65536 ? 3 : 4);
-              for (t = new h.Buf8(o), i = s = 0; s < o; i++)
-                55296 == (64512 & (r = e.charCodeAt(i))) &&
-                  i + 1 < a &&
-                  56320 == (64512 & (n = e.charCodeAt(i + 1))) &&
-                  ((r = 65536 + ((r - 55296) << 10) + (n - 56320)), i++),
-                  r < 128
-                    ? (t[s++] = r)
-                    : (r < 2048
-                        ? (t[s++] = 192 | (r >>> 6))
-                        : (r < 65536
-                            ? (t[s++] = 224 | (r >>> 12))
-                            : ((t[s++] = 240 | (r >>> 18)),
-                              (t[s++] = 128 | ((r >>> 12) & 63))),
-                          (t[s++] = 128 | ((r >>> 6) & 63))),
-                      (t[s++] = 128 | (63 & r)));
-              return t;
-            }),
-            (r.buf2binstring = function (e) {
-              return l(e, e.length);
-            }),
-            (r.binstring2buf = function (e) {
-              for (
-                var t = new h.Buf8(e.length), r = 0, n = t.length;
-                r < n;
-                r++
-              )
-                t[r] = e.charCodeAt(r);
-              return t;
-            }),
-            (r.buf2string = function (e, t) {
-              var r,
-                n,
-                i,
-                s,
-                a = t || e.length,
-                o = new Array(2 * a);
-              for (r = n = 0; r < a; )
-                if ((i = e[r++]) < 128) o[n++] = i;
-                else if (4 < (s = u[i])) (o[n++] = 65533), (r += s - 1);
-                else {
-                  for (i &= 2 === s ? 31 : 3 === s ? 15 : 7; 1 < s && r < a; )
-                    (i = (i << 6) | (63 & e[r++])), s--;
-                  1 < s
-                    ? (o[n++] = 65533)
-                    : i < 65536
-                    ? (o[n++] = i)
-                    : ((i -= 65536),
-                      (o[n++] = 55296 | ((i >> 10) & 1023)),
-                      (o[n++] = 56320 | (1023 & i)));
-                }
-              return l(o, n);
-            }),
-            (r.utf8border = function (e, t) {
-              var r;
-              for (
-                (t = t || e.length) > e.length && (t = e.length), r = t - 1;
-                0 <= r && 128 == (192 & e[r]);
-
-              )
-                r--;
-              return r < 0 ? t : 0 === r ? t : r + u[e[r]] > t ? r : t;
-            });
-        },
-        { "./common": 41 },
-      ],
-      43: [
-        function (e, t, r) {
-          "use strict";
-          t.exports = function (e, t, r, n) {
-            for (
-              var i = (65535 & e) | 0, s = ((e >>> 16) & 65535) | 0, a = 0;
-              0 !== r;
-
-            ) {
-              for (
-                r -= a = 2e3 < r ? 2e3 : r;
-                (s = (s + (i = (i + t[n++]) | 0)) | 0), --a;
-
-              );
-              (i %= 65521), (s %= 65521);
-            }
-            return i | (s << 16) | 0;
-          };
-        },
-        {},
-      ],
-      44: [
-        function (e, t, r) {
-          "use strict";
-          t.exports = {
-            Z_NO_FLUSH: 0,
-            Z_PARTIAL_FLUSH: 1,
-            Z_SYNC_FLUSH: 2,
-            Z_FULL_FLUSH: 3,
-            Z_FINISH: 4,
-            Z_BLOCK: 5,
-            Z_TREES: 6,
-            Z_OK: 0,
-            Z_STREAM_END: 1,
-            Z_NEED_DICT: 2,
-            Z_ERRNO: -1,
-            Z_STREAM_ERROR: -2,
-            Z_DATA_ERROR: -3,
-            Z_BUF_ERROR: -5,
-            Z_NO_COMPRESSION: 0,
-            Z_BEST_SPEED: 1,
-            Z_BEST_COMPRESSION: 9,
-            Z_DEFAULT_COMPRESSION: -1,
-            Z_FILTERED: 1,
-            Z_HUFFMAN_ONLY: 2,
-            Z_RLE: 3,
-            Z_FIXED: 4,
-            Z_DEFAULT_STRATEGY: 0,
-            Z_BINARY: 0,
-            Z_TEXT: 1,
-            Z_UNKNOWN: 2,
-            Z_DEFLATED: 8,
-          };
-        },
-        {},
-      ],
-      45: [
-        function (e, t, r) {
-          "use strict";
-          var o = (function () {
-            for (var e, t = [], r = 0; r < 256; r++) {
-              e = r;
-              for (var n = 0; n < 8; n++)
-                e = 1 & e ? 3988292384 ^ (e >>> 1) : e >>> 1;
-              t[r] = e;
-            }
-            return t;
-          })();
-          t.exports = function (e, t, r, n) {
-            var i = o,
-              s = n + r;
-            e ^= -1;
-            for (var a = n; a < s; a++) e = (e >>> 8) ^ i[255 & (e ^ t[a])];
-            return -1 ^ e;
-          };
-        },
-        {},
-      ],
-      46: [
-        function (e, t, r) {
-          "use strict";
-          var h,
-            c = e("../utils/common"),
-            u = e("./trees"),
-            d = e("./adler32"),
-            p = e("./crc32"),
-            n = e("./messages"),
-            l = 0,
-            f = 4,
-            m = 0,
-            _ = -2,
-            g = -1,
-            b = 4,
-            i = 2,
-            v = 8,
-            y = 9,
-            s = 286,
-            a = 30,
-            o = 19,
-            w = 2 * s + 1,
-            k = 15,
-            x = 3,
-            S = 258,
-            z = S + x + 1,
-            C = 42,
-            E = 113,
-            A = 1,
-            I = 2,
-            O = 3,
-            B = 4;
-          function R(e, t) {
-            return (e.msg = n[t]), t;
-          }
-          function T(e) {
-            return (e << 1) - (4 < e ? 9 : 0);
-          }
-          function D(e) {
-            for (var t = e.length; 0 <= --t; ) e[t] = 0;
-          }
-          function F(e) {
-            var t = e.state,
-              r = t.pending;
-            r > e.avail_out && (r = e.avail_out),
-              0 !== r &&
-                (c.arraySet(
-                  e.output,
-                  t.pending_buf,
-                  t.pending_out,
-                  r,
-                  e.next_out,
-                ),
-                (e.next_out += r),
-                (t.pending_out += r),
-                (e.total_out += r),
-                (e.avail_out -= r),
-                (t.pending -= r),
-                0 === t.pending && (t.pending_out = 0));
-          }
-          function N(e, t) {
-            u._tr_flush_block(
-              e,
-              0 <= e.block_start ? e.block_start : -1,
-              e.strstart - e.block_start,
-              t,
-            ),
-              (e.block_start = e.strstart),
-              F(e.strm);
-          }
-          function U(e, t) {
-            e.pending_buf[e.pending++] = t;
-          }
-          function P(e, t) {
-            (e.pending_buf[e.pending++] = (t >>> 8) & 255),
-              (e.pending_buf[e.pending++] = 255 & t);
-          }
-          function L(e, t) {
-            var r,
-              n,
-              i = e.max_chain_length,
-              s = e.strstart,
-              a = e.prev_length,
-              o = e.nice_match,
-              h = e.strstart > e.w_size - z ? e.strstart - (e.w_size - z) : 0,
-              u = e.window,
-              l = e.w_mask,
-              f = e.prev,
-              c = e.strstart + S,
-              d = u[s + a - 1],
-              p = u[s + a];
-            e.prev_length >= e.good_match && (i >>= 2),
-              o > e.lookahead && (o = e.lookahead);
-            do {
-              if (
-                u[(r = t) + a] === p &&
-                u[r + a - 1] === d &&
-                u[r] === u[s] &&
-                u[++r] === u[s + 1]
-              ) {
-                (s += 2), r++;
-                do {} while (
-                  u[++s] === u[++r] &&
-                  u[++s] === u[++r] &&
-                  u[++s] === u[++r] &&
-                  u[++s] === u[++r] &&
-                  u[++s] === u[++r] &&
-                  u[++s] === u[++r] &&
-                  u[++s] === u[++r] &&
-                  u[++s] === u[++r] &&
-                  s < c
-                );
-                if (((n = S - (c - s)), (s = c - S), a < n)) {
-                  if (((e.match_start = t), o <= (a = n))) break;
-                  (d = u[s + a - 1]), (p = u[s + a]);
-                }
-              }
-            } while ((t = f[t & l]) > h && 0 != --i);
-            return a <= e.lookahead ? a : e.lookahead;
-          }
-          function j(e) {
-            var t,
-              r,
-              n,
-              i,
-              s,
-              a,
-              o,
-              h,
-              u,
-              l,
-              f = e.w_size;
-            do {
-              if (
-                ((i = e.window_size - e.lookahead - e.strstart),
-                e.strstart >= f + (f - z))
-              ) {
-                for (
-                  c.arraySet(e.window, e.window, f, f, 0),
-                    e.match_start -= f,
-                    e.strstart -= f,
-                    e.block_start -= f,
-                    t = r = e.hash_size;
-                  (n = e.head[--t]), (e.head[t] = f <= n ? n - f : 0), --r;
-
-                );
-                for (
-                  t = r = f;
-                  (n = e.prev[--t]), (e.prev[t] = f <= n ? n - f : 0), --r;
-
-                );
-                i += f;
-              }
-              if (0 === e.strm.avail_in) break;
-              if (
-                ((a = e.strm),
-                (o = e.window),
-                (h = e.strstart + e.lookahead),
-                (u = i),
-                (l = void 0),
-                (l = a.avail_in),
-                u < l && (l = u),
-                (r =
-                  0 === l
-                    ? 0
-                    : ((a.avail_in -= l),
-                      c.arraySet(o, a.input, a.next_in, l, h),
-                      1 === a.state.wrap
-                        ? (a.adler = d(a.adler, o, l, h))
-                        : 2 === a.state.wrap && (a.adler = p(a.adler, o, l, h)),
-                      (a.next_in += l),
-                      (a.total_in += l),
-                      l)),
-                (e.lookahead += r),
-                e.lookahead + e.insert >= x)
-              )
-                for (
-                  s = e.strstart - e.insert,
-                    e.ins_h = e.window[s],
-                    e.ins_h =
-                      ((e.ins_h << e.hash_shift) ^ e.window[s + 1]) &
-                      e.hash_mask;
-                  e.insert &&
-                  ((e.ins_h =
-                    ((e.ins_h << e.hash_shift) ^ e.window[s + x - 1]) &
-                    e.hash_mask),
-                  (e.prev[s & e.w_mask] = e.head[e.ins_h]),
-                  (e.head[e.ins_h] = s),
-                  s++,
-                  e.insert--,
-                  !(e.lookahead + e.insert < x));
-
-                );
-            } while (e.lookahead < z && 0 !== e.strm.avail_in);
-          }
-          function Z(e, t) {
-            for (var r, n; ; ) {
-              if (e.lookahead < z) {
-                if ((j(e), e.lookahead < z && t === l)) return A;
-                if (0 === e.lookahead) break;
-              }
-              if (
-                ((r = 0),
-                e.lookahead >= x &&
-                  ((e.ins_h =
-                    ((e.ins_h << e.hash_shift) ^ e.window[e.strstart + x - 1]) &
-                    e.hash_mask),
-                  (r = e.prev[e.strstart & e.w_mask] = e.head[e.ins_h]),
-                  (e.head[e.ins_h] = e.strstart)),
-                0 !== r &&
-                  e.strstart - r <= e.w_size - z &&
-                  (e.match_length = L(e, r)),
-                e.match_length >= x)
-              )
-                if (
-                  ((n = u._tr_tally(
-                    e,
-                    e.strstart - e.match_start,
-                    e.match_length - x,
-                  )),
-                  (e.lookahead -= e.match_length),
-                  e.match_length <= e.max_lazy_match && e.lookahead >= x)
-                ) {
-                  for (
-                    e.match_length--;
-                    e.strstart++,
-                      (e.ins_h =
-                        ((e.ins_h << e.hash_shift) ^
-                          e.window[e.strstart + x - 1]) &
-                        e.hash_mask),
-                      (r = e.prev[e.strstart & e.w_mask] = e.head[e.ins_h]),
-                      (e.head[e.ins_h] = e.strstart),
-                      0 != --e.match_length;
-
-                  );
-                  e.strstart++;
-                } else
-                  (e.strstart += e.match_length),
-                    (e.match_length = 0),
-                    (e.ins_h = e.window[e.strstart]),
-                    (e.ins_h =
-                      ((e.ins_h << e.hash_shift) ^ e.window[e.strstart + 1]) &
-                      e.hash_mask);
-              else
-                (n = u._tr_tally(e, 0, e.window[e.strstart])),
-                  e.lookahead--,
-                  e.strstart++;
-              if (n && (N(e, !1), 0 === e.strm.avail_out)) return A;
-            }
-            return (
-              (e.insert = e.strstart < x - 1 ? e.strstart : x - 1),
-              t === f
-                ? (N(e, !0), 0 === e.strm.avail_out ? O : B)
-                : e.last_lit && (N(e, !1), 0 === e.strm.avail_out)
-                ? A
-                : I
-            );
-          }
-          function W(e, t) {
-            for (var r, n, i; ; ) {
-              if (e.lookahead < z) {
-                if ((j(e), e.lookahead < z && t === l)) return A;
-                if (0 === e.lookahead) break;
-              }
-              if (
-                ((r = 0),
-                e.lookahead >= x &&
-                  ((e.ins_h =
-                    ((e.ins_h << e.hash_shift) ^ e.window[e.strstart + x - 1]) &
-                    e.hash_mask),
-                  (r = e.prev[e.strstart & e.w_mask] = e.head[e.ins_h]),
-                  (e.head[e.ins_h] = e.strstart)),
-                (e.prev_length = e.match_length),
-                (e.prev_match = e.match_start),
-                (e.match_length = x - 1),
-                0 !== r &&
-                  e.prev_length < e.max_lazy_match &&
-                  e.strstart - r <= e.w_size - z &&
-                  ((e.match_length = L(e, r)),
-                  e.match_length <= 5 &&
-                    (1 === e.strategy ||
-                      (e.match_length === x &&
-                        4096 < e.strstart - e.match_start)) &&
-                    (e.match_length = x - 1)),
-                e.prev_length >= x && e.match_length <= e.prev_length)
-              ) {
-                for (
-                  i = e.strstart + e.lookahead - x,
-                    n = u._tr_tally(
-                      e,
-                      e.strstart - 1 - e.prev_match,
-                      e.prev_length - x,
-                    ),
-                    e.lookahead -= e.prev_length - 1,
-                    e.prev_length -= 2;
-                  ++e.strstart <= i &&
-                    ((e.ins_h =
-                      ((e.ins_h << e.hash_shift) ^
-                        e.window[e.strstart + x - 1]) &
-                      e.hash_mask),
-                    (r = e.prev[e.strstart & e.w_mask] = e.head[e.ins_h]),
-                    (e.head[e.ins_h] = e.strstart)),
-                    0 != --e.prev_length;
-
-                );
-                if (
-                  ((e.match_available = 0),
-                  (e.match_length = x - 1),
-                  e.strstart++,
-                  n && (N(e, !1), 0 === e.strm.avail_out))
-                )
-                  return A;
-              } else if (e.match_available) {
-                if (
-                  ((n = u._tr_tally(e, 0, e.window[e.strstart - 1])) &&
-                    N(e, !1),
-                  e.strstart++,
-                  e.lookahead--,
-                  0 === e.strm.avail_out)
-                )
-                  return A;
-              } else (e.match_available = 1), e.strstart++, e.lookahead--;
-            }
-            return (
-              e.match_available &&
-                ((n = u._tr_tally(e, 0, e.window[e.strstart - 1])),
-                (e.match_available = 0)),
-              (e.insert = e.strstart < x - 1 ? e.strstart : x - 1),
-              t === f
-                ? (N(e, !0), 0 === e.strm.avail_out ? O : B)
-                : e.last_lit && (N(e, !1), 0 === e.strm.avail_out)
-                ? A
-                : I
-            );
-          }
-          function M(e, t, r, n, i) {
-            (this.good_length = e),
-              (this.max_lazy = t),
-              (this.nice_length = r),
-              (this.max_chain = n),
-              (this.func = i);
-          }
-          function H() {
-            (this.strm = null),
-              (this.status = 0),
-              (this.pending_buf = null),
-              (this.pending_buf_size = 0),
-              (this.pending_out = 0),
-              (this.pending = 0),
-              (this.wrap = 0),
-              (this.gzhead = null),
-              (this.gzindex = 0),
-              (this.method = v),
-              (this.last_flush = -1),
-              (this.w_size = 0),
-              (this.w_bits = 0),
-              (this.w_mask = 0),
-              (this.window = null),
-              (this.window_size = 0),
-              (this.prev = null),
-              (this.head = null),
-              (this.ins_h = 0),
-              (this.hash_size = 0),
-              (this.hash_bits = 0),
-              (this.hash_mask = 0),
-              (this.hash_shift = 0),
-              (this.block_start = 0),
-              (this.match_length = 0),
-              (this.prev_match = 0),
-              (this.match_available = 0),
-              (this.strstart = 0),
-              (this.match_start = 0),
-              (this.lookahead = 0),
-              (this.prev_length = 0),
-              (this.max_chain_length = 0),
-              (this.max_lazy_match = 0),
-              (this.level = 0),
-              (this.strategy = 0),
-              (this.good_match = 0),
-              (this.nice_match = 0),
-              (this.dyn_ltree = new c.Buf16(2 * w)),
-              (this.dyn_dtree = new c.Buf16(2 * (2 * a + 1))),
-              (this.bl_tree = new c.Buf16(2 * (2 * o + 1))),
-              D(this.dyn_ltree),
-              D(this.dyn_dtree),
-              D(this.bl_tree),
-              (this.l_desc = null),
-              (this.d_desc = null),
-              (this.bl_desc = null),
-              (this.bl_count = new c.Buf16(k + 1)),
-              (this.heap = new c.Buf16(2 * s + 1)),
-              D(this.heap),
-              (this.heap_len = 0),
-              (this.heap_max = 0),
-              (this.depth = new c.Buf16(2 * s + 1)),
-              D(this.depth),
-              (this.l_buf = 0),
-              (this.lit_bufsize = 0),
-              (this.last_lit = 0),
-              (this.d_buf = 0),
-              (this.opt_len = 0),
-              (this.static_len = 0),
-              (this.matches = 0),
-              (this.insert = 0),
-              (this.bi_buf = 0),
-              (this.bi_valid = 0);
-          }
-          function G(e) {
-            var t;
-            return e && e.state
-              ? ((e.total_in = e.total_out = 0),
-                (e.data_type = i),
-                ((t = e.state).pending = 0),
-                (t.pending_out = 0),
-                t.wrap < 0 && (t.wrap = -t.wrap),
-                (t.status = t.wrap ? C : E),
-                (e.adler = 2 === t.wrap ? 0 : 1),
-                (t.last_flush = l),
-                u._tr_init(t),
-                m)
-              : R(e, _);
-          }
-          function K(e) {
-            var t = G(e);
-            return (
-              t === m &&
-                (function (e) {
-                  (e.window_size = 2 * e.w_size),
-                    D(e.head),
-                    (e.max_lazy_match = h[e.level].max_lazy),
-                    (e.good_match = h[e.level].good_length),
-                    (e.nice_match = h[e.level].nice_length),
-                    (e.max_chain_length = h[e.level].max_chain),
-                    (e.strstart = 0),
-                    (e.block_start = 0),
-                    (e.lookahead = 0),
-                    (e.insert = 0),
-                    (e.match_length = e.prev_length = x - 1),
-                    (e.match_available = 0),
-                    (e.ins_h = 0);
-                })(e.state),
-              t
-            );
-          }
-          function Y(e, t, r, n, i, s) {
-            if (!e) return _;
-            var a = 1;
-            if (
-              (t === g && (t = 6),
-              n < 0 ? ((a = 0), (n = -n)) : 15 < n && ((a = 2), (n -= 16)),
-              i < 1 ||
-                y < i ||
-                r !== v ||
-                n < 8 ||
-                15 < n ||
-                t < 0 ||
-                9 < t ||
-                s < 0 ||
-                b < s)
-            )
-              return R(e, _);
-            8 === n && (n = 9);
-            var o = new H();
-            return (
-              ((e.state = o).strm = e),
-              (o.wrap = a),
-              (o.gzhead = null),
-              (o.w_bits = n),
-              (o.w_size = 1 << o.w_bits),
-              (o.w_mask = o.w_size - 1),
-              (o.hash_bits = i + 7),
-              (o.hash_size = 1 << o.hash_bits),
-              (o.hash_mask = o.hash_size - 1),
-              (o.hash_shift = ~~((o.hash_bits + x - 1) / x)),
-              (o.window = new c.Buf8(2 * o.w_size)),
-              (o.head = new c.Buf16(o.hash_size)),
-              (o.prev = new c.Buf16(o.w_size)),
-              (o.lit_bufsize = 1 << (i + 6)),
-              (o.pending_buf_size = 4 * o.lit_bufsize),
-              (o.pending_buf = new c.Buf8(o.pending_buf_size)),
-              (o.d_buf = 1 * o.lit_bufsize),
-              (o.l_buf = 3 * o.lit_bufsize),
-              (o.level = t),
-              (o.strategy = s),
-              (o.method = r),
-              K(e)
-            );
-          }
-          (h = [
-            new M(0, 0, 0, 0, function (e, t) {
-              var r = 65535;
-              for (
-                r > e.pending_buf_size - 5 && (r = e.pending_buf_size - 5);
-                ;
-
-              ) {
-                if (e.lookahead <= 1) {
-                  if ((j(e), 0 === e.lookahead && t === l)) return A;
-                  if (0 === e.lookahead) break;
-                }
-                (e.strstart += e.lookahead), (e.lookahead = 0);
-                var n = e.block_start + r;
-                if (
-                  (0 === e.strstart || e.strstart >= n) &&
-                  ((e.lookahead = e.strstart - n),
-                  (e.strstart = n),
-                  N(e, !1),
-                  0 === e.strm.avail_out)
-                )
-                  return A;
-                if (
-                  e.strstart - e.block_start >= e.w_size - z &&
-                  (N(e, !1), 0 === e.strm.avail_out)
-                )
-                  return A;
-              }
-              return (
-                (e.insert = 0),
-                t === f
-                  ? (N(e, !0), 0 === e.strm.avail_out ? O : B)
-                  : (e.strstart > e.block_start && (N(e, !1), e.strm.avail_out),
-                    A)
-              );
-            }),
-            new M(4, 4, 8, 4, Z),
-            new M(4, 5, 16, 8, Z),
-            new M(4, 6, 32, 32, Z),
-            new M(4, 4, 16, 16, W),
-            new M(8, 16, 32, 32, W),
-            new M(8, 16, 128, 128, W),
-            new M(8, 32, 128, 256, W),
-            new M(32, 128, 258, 1024, W),
-            new M(32, 258, 258, 4096, W),
-          ]),
-            (r.deflateInit = function (e, t) {
-              return Y(e, t, v, 15, 8, 0);
-            }),
-            (r.deflateInit2 = Y),
-            (r.deflateReset = K),
-            (r.deflateResetKeep = G),
-            (r.deflateSetHeader = function (e, t) {
-              return e && e.state
-                ? 2 !== e.state.wrap
-                  ? _
-                  : ((e.state.gzhead = t), m)
-                : _;
-            }),
-            (r.deflate = function (e, t) {
-              var r, n, i, s;
-              if (!e || !e.state || 5 < t || t < 0) return e ? R(e, _) : _;
-              if (
-                ((n = e.state),
-                !e.output ||
-                  (!e.input && 0 !== e.avail_in) ||
-                  (666 === n.status && t !== f))
-              )
-                return R(e, 0 === e.avail_out ? -5 : _);
-              if (
-                ((n.strm = e),
-                (r = n.last_flush),
-                (n.last_flush = t),
-                n.status === C)
-              )
-                if (2 === n.wrap)
-                  (e.adler = 0),
-                    U(n, 31),
-                    U(n, 139),
-                    U(n, 8),
-                    n.gzhead
-                      ? (U(
-                          n,
-                          (n.gzhead.text ? 1 : 0) +
-                            (n.gzhead.hcrc ? 2 : 0) +
-                            (n.gzhead.extra ? 4 : 0) +
-                            (n.gzhead.name ? 8 : 0) +
-                            (n.gzhead.comment ? 16 : 0),
-                        ),
-                        U(n, 255 & n.gzhead.time),
-                        U(n, (n.gzhead.time >> 8) & 255),
-                        U(n, (n.gzhead.time >> 16) & 255),
-                        U(n, (n.gzhead.time >> 24) & 255),
-                        U(
-                          n,
-                          9 === n.level
-                            ? 2
-                            : 2 <= n.strategy || n.level < 2
-                            ? 4
-                            : 0,
-                        ),
-                        U(n, 255 & n.gzhead.os),
-                        n.gzhead.extra &&
-                          n.gzhead.extra.length &&
-                          (U(n, 255 & n.gzhead.extra.length),
-                          U(n, (n.gzhead.extra.length >> 8) & 255)),
-                        n.gzhead.hcrc &&
-                          (e.adler = p(e.adler, n.pending_buf, n.pending, 0)),
-                        (n.gzindex = 0),
-                        (n.status = 69))
-                      : (U(n, 0),
-                        U(n, 0),
-                        U(n, 0),
-                        U(n, 0),
-                        U(n, 0),
-                        U(
-                          n,
-                          9 === n.level
-                            ? 2
-                            : 2 <= n.strategy || n.level < 2
-                            ? 4
-                            : 0,
-                        ),
-                        U(n, 3),
-                        (n.status = E));
-                else {
-                  var a = (v + ((n.w_bits - 8) << 4)) << 8;
-                  (a |=
-                    (2 <= n.strategy || n.level < 2
-                      ? 0
-                      : n.level < 6
-                      ? 1
-                      : 6 === n.level
-                      ? 2
-                      : 3) << 6),
-                    0 !== n.strstart && (a |= 32),
-                    (a += 31 - (a % 31)),
-                    (n.status = E),
-                    P(n, a),
-                    0 !== n.strstart &&
-                      (P(n, e.adler >>> 16), P(n, 65535 & e.adler)),
-                    (e.adler = 1);
-                }
-              if (69 === n.status)
-                if (n.gzhead.extra) {
-                  for (
-                    i = n.pending;
-                    n.gzindex < (65535 & n.gzhead.extra.length) &&
-                    (n.pending !== n.pending_buf_size ||
-                      (n.gzhead.hcrc &&
-                        n.pending > i &&
-                        (e.adler = p(e.adler, n.pending_buf, n.pending - i, i)),
-                      F(e),
-                      (i = n.pending),
-                      n.pending !== n.pending_buf_size));
-
-                  )
-                    U(n, 255 & n.gzhead.extra[n.gzindex]), n.gzindex++;
-                  n.gzhead.hcrc &&
-                    n.pending > i &&
-                    (e.adler = p(e.adler, n.pending_buf, n.pending - i, i)),
-                    n.gzindex === n.gzhead.extra.length &&
-                      ((n.gzindex = 0), (n.status = 73));
-                } else n.status = 73;
-              if (73 === n.status)
-                if (n.gzhead.name) {
-                  i = n.pending;
-                  do {
-                    if (
-                      n.pending === n.pending_buf_size &&
-                      (n.gzhead.hcrc &&
-                        n.pending > i &&
-                        (e.adler = p(e.adler, n.pending_buf, n.pending - i, i)),
-                      F(e),
-                      (i = n.pending),
-                      n.pending === n.pending_buf_size)
-                    ) {
-                      s = 1;
-                      break;
-                    }
-                    (s =
-                      n.gzindex < n.gzhead.name.length
-                        ? 255 & n.gzhead.name.charCodeAt(n.gzindex++)
-                        : 0),
-                      U(n, s);
-                  } while (0 !== s);
-                  n.gzhead.hcrc &&
-                    n.pending > i &&
-                    (e.adler = p(e.adler, n.pending_buf, n.pending - i, i)),
-                    0 === s && ((n.gzindex = 0), (n.status = 91));
-                } else n.status = 91;
-              if (91 === n.status)
-                if (n.gzhead.comment) {
-                  i = n.pending;
-                  do {
-                    if (
-                      n.pending === n.pending_buf_size &&
-                      (n.gzhead.hcrc &&
-                        n.pending > i &&
-                        (e.adler = p(e.adler, n.pending_buf, n.pending - i, i)),
-                      F(e),
-                      (i = n.pending),
-                      n.pending === n.pending_buf_size)
-                    ) {
-                      s = 1;
-                      break;
-                    }
-                    (s =
-                      n.gzindex < n.gzhead.comment.length
-                        ? 255 & n.gzhead.comment.charCodeAt(n.gzindex++)
-                        : 0),
-                      U(n, s);
-                  } while (0 !== s);
-                  n.gzhead.hcrc &&
-                    n.pending > i &&
-                    (e.adler = p(e.adler, n.pending_buf, n.pending - i, i)),
-                    0 === s && (n.status = 103);
-                } else n.status = 103;
-              if (
-                (103 === n.status &&
-                  (n.gzhead.hcrc
-                    ? (n.pending + 2 > n.pending_buf_size && F(e),
-                      n.pending + 2 <= n.pending_buf_size &&
-                        (U(n, 255 & e.adler),
-                        U(n, (e.adler >> 8) & 255),
-                        (e.adler = 0),
-                        (n.status = E)))
-                    : (n.status = E)),
-                0 !== n.pending)
-              ) {
-                if ((F(e), 0 === e.avail_out)) return (n.last_flush = -1), m;
-              } else if (0 === e.avail_in && T(t) <= T(r) && t !== f)
-                return R(e, -5);
-              if (666 === n.status && 0 !== e.avail_in) return R(e, -5);
-              if (
-                0 !== e.avail_in ||
-                0 !== n.lookahead ||
-                (t !== l && 666 !== n.status)
-              ) {
-                var o =
-                  2 === n.strategy
-                    ? (function (e, t) {
-                        for (var r; ; ) {
-                          if (0 === e.lookahead && (j(e), 0 === e.lookahead)) {
-                            if (t === l) return A;
-                            break;
-                          }
-                          if (
-                            ((e.match_length = 0),
-                            (r = u._tr_tally(e, 0, e.window[e.strstart])),
-                            e.lookahead--,
-                            e.strstart++,
-                            r && (N(e, !1), 0 === e.strm.avail_out))
-                          )
-                            return A;
-                        }
-                        return (
-                          (e.insert = 0),
-                          t === f
-                            ? (N(e, !0), 0 === e.strm.avail_out ? O : B)
-                            : e.last_lit && (N(e, !1), 0 === e.strm.avail_out)
-                            ? A
-                            : I
-                        );
-                      })(n, t)
-                    : 3 === n.strategy
-                    ? (function (e, t) {
-                        for (var r, n, i, s, a = e.window; ; ) {
-                          if (e.lookahead <= S) {
-                            if ((j(e), e.lookahead <= S && t === l)) return A;
-                            if (0 === e.lookahead) break;
-                          }
-                          if (
-                            ((e.match_length = 0),
-                            e.lookahead >= x &&
-                              0 < e.strstart &&
-                              (n = a[(i = e.strstart - 1)]) === a[++i] &&
-                              n === a[++i] &&
-                              n === a[++i])
-                          ) {
-                            s = e.strstart + S;
-                            do {} while (
-                              n === a[++i] &&
-                              n === a[++i] &&
-                              n === a[++i] &&
-                              n === a[++i] &&
-                              n === a[++i] &&
-                              n === a[++i] &&
-                              n === a[++i] &&
-                              n === a[++i] &&
-                              i < s
-                            );
-                            (e.match_length = S - (s - i)),
-                              e.match_length > e.lookahead &&
-                                (e.match_length = e.lookahead);
-                          }
-                          if (
-                            (e.match_length >= x
-                              ? ((r = u._tr_tally(e, 1, e.match_length - x)),
-                                (e.lookahead -= e.match_length),
-                                (e.strstart += e.match_length),
-                                (e.match_length = 0))
-                              : ((r = u._tr_tally(e, 0, e.window[e.strstart])),
-                                e.lookahead--,
-                                e.strstart++),
-                            r && (N(e, !1), 0 === e.strm.avail_out))
-                          )
-                            return A;
-                        }
-                        return (
-                          (e.insert = 0),
-                          t === f
-                            ? (N(e, !0), 0 === e.strm.avail_out ? O : B)
-                            : e.last_lit && (N(e, !1), 0 === e.strm.avail_out)
-                            ? A
-                            : I
-                        );
-                      })(n, t)
-                    : h[n.level].func(n, t);
-                if (
-                  ((o !== O && o !== B) || (n.status = 666), o === A || o === O)
-                )
-                  return 0 === e.avail_out && (n.last_flush = -1), m;
-                if (
-                  o === I &&
-                  (1 === t
-                    ? u._tr_align(n)
-                    : 5 !== t &&
-                      (u._tr_stored_block(n, 0, 0, !1),
-                      3 === t &&
-                        (D(n.head),
-                        0 === n.lookahead &&
-                          ((n.strstart = 0),
-                          (n.block_start = 0),
-                          (n.insert = 0)))),
-                  F(e),
-                  0 === e.avail_out)
-                )
-                  return (n.last_flush = -1), m;
-              }
-              return t !== f
-                ? m
-                : n.wrap <= 0
-                ? 1
-                : (2 === n.wrap
-                    ? (U(n, 255 & e.adler),
-                      U(n, (e.adler >> 8) & 255),
-                      U(n, (e.adler >> 16) & 255),
-                      U(n, (e.adler >> 24) & 255),
-                      U(n, 255 & e.total_in),
-                      U(n, (e.total_in >> 8) & 255),
-                      U(n, (e.total_in >> 16) & 255),
-                      U(n, (e.total_in >> 24) & 255))
-                    : (P(n, e.adler >>> 16), P(n, 65535 & e.adler)),
-                  F(e),
-                  0 < n.wrap && (n.wrap = -n.wrap),
-                  0 !== n.pending ? m : 1);
-            }),
-            (r.deflateEnd = function (e) {
-              var t;
-              return e && e.state
-                ? (t = e.state.status) !== C &&
-                  69 !== t &&
-                  73 !== t &&
-                  91 !== t &&
-                  103 !== t &&
-                  t !== E &&
-                  666 !== t
-                  ? R(e, _)
-                  : ((e.state = null), t === E ? R(e, -3) : m)
-                : _;
-            }),
-            (r.deflateSetDictionary = function (e, t) {
-              var r,
-                n,
-                i,
-                s,
-                a,
-                o,
-                h,
-                u,
-                l = t.length;
-              if (!e || !e.state) return _;
-              if (
-                2 === (s = (r = e.state).wrap) ||
-                (1 === s && r.status !== C) ||
-                r.lookahead
-              )
-                return _;
-              for (
-                1 === s && (e.adler = d(e.adler, t, l, 0)),
-                  r.wrap = 0,
-                  l >= r.w_size &&
-                    (0 === s &&
-                      (D(r.head),
-                      (r.strstart = 0),
-                      (r.block_start = 0),
-                      (r.insert = 0)),
-                    (u = new c.Buf8(r.w_size)),
-                    c.arraySet(u, t, l - r.w_size, r.w_size, 0),
-                    (t = u),
-                    (l = r.w_size)),
-                  a = e.avail_in,
-                  o = e.next_in,
-                  h = e.input,
-                  e.avail_in = l,
-                  e.next_in = 0,
-                  e.input = t,
-                  j(r);
-                r.lookahead >= x;
-
-              ) {
-                for (
-                  n = r.strstart, i = r.lookahead - (x - 1);
-                  (r.ins_h =
-                    ((r.ins_h << r.hash_shift) ^ r.window[n + x - 1]) &
-                    r.hash_mask),
-                    (r.prev[n & r.w_mask] = r.head[r.ins_h]),
-                    (r.head[r.ins_h] = n),
-                    n++,
-                    --i;
-
-                );
-                (r.strstart = n), (r.lookahead = x - 1), j(r);
-              }
-              return (
-                (r.strstart += r.lookahead),
-                (r.block_start = r.strstart),
-                (r.insert = r.lookahead),
-                (r.lookahead = 0),
-                (r.match_length = r.prev_length = x - 1),
-                (r.match_available = 0),
-                (e.next_in = o),
-                (e.input = h),
-                (e.avail_in = a),
-                (r.wrap = s),
-                m
-              );
-            }),
-            (r.deflateInfo = "pako deflate (from Nodeca project)");
-        },
-        {
-          "../utils/common": 41,
-          "./adler32": 43,
-          "./crc32": 45,
-          "./messages": 51,
-          "./trees": 52,
-        },
-      ],
-      47: [
-        function (e, t, r) {
-          "use strict";
-          t.exports = function () {
-            (this.text = 0),
-              (this.time = 0),
-              (this.xflags = 0),
-              (this.os = 0),
-              (this.extra = null),
-              (this.extra_len = 0),
-              (this.name = ""),
-              (this.comment = ""),
-              (this.hcrc = 0),
-              (this.done = !1);
-          };
-        },
-        {},
-      ],
-      48: [
-        function (e, t, r) {
-          "use strict";
-          t.exports = function (e, t) {
-            var r,
-              n,
-              i,
-              s,
-              a,
-              o,
-              h,
-              u,
-              l,
-              f,
-              c,
-              d,
-              p,
-              m,
-              _,
-              g,
-              b,
-              v,
-              y,
-              w,
-              k,
-              x,
-              S,
-              z,
-              C;
-            (r = e.state),
-              (n = e.next_in),
-              (z = e.input),
-              (i = n + (e.avail_in - 5)),
-              (s = e.next_out),
-              (C = e.output),
-              (a = s - (t - e.avail_out)),
-              (o = s + (e.avail_out - 257)),
-              (h = r.dmax),
-              (u = r.wsize),
-              (l = r.whave),
-              (f = r.wnext),
-              (c = r.window),
-              (d = r.hold),
-              (p = r.bits),
-              (m = r.lencode),
-              (_ = r.distcode),
-              (g = (1 << r.lenbits) - 1),
-              (b = (1 << r.distbits) - 1);
-            e: do {
-              p < 15 &&
-                ((d += z[n++] << p), (p += 8), (d += z[n++] << p), (p += 8)),
-                (v = m[d & g]);
-              t: for (;;) {
-                if (
-                  ((d >>>= y = v >>> 24),
-                  (p -= y),
-                  0 === (y = (v >>> 16) & 255))
-                )
-                  C[s++] = 65535 & v;
-                else {
-                  if (!(16 & y)) {
-                    if (0 == (64 & y)) {
-                      v = m[(65535 & v) + (d & ((1 << y) - 1))];
-                      continue t;
-                    }
-                    if (32 & y) {
-                      r.mode = 12;
-                      break e;
-                    }
-                    (e.msg = "invalid literal/length code"), (r.mode = 30);
-                    break e;
-                  }
-                  (w = 65535 & v),
-                    (y &= 15) &&
-                      (p < y && ((d += z[n++] << p), (p += 8)),
-                      (w += d & ((1 << y) - 1)),
-                      (d >>>= y),
-                      (p -= y)),
-                    p < 15 &&
-                      ((d += z[n++] << p),
-                      (p += 8),
-                      (d += z[n++] << p),
-                      (p += 8)),
-                    (v = _[d & b]);
-                  r: for (;;) {
-                    if (
-                      ((d >>>= y = v >>> 24),
-                      (p -= y),
-                      !(16 & (y = (v >>> 16) & 255)))
-                    ) {
-                      if (0 == (64 & y)) {
-                        v = _[(65535 & v) + (d & ((1 << y) - 1))];
-                        continue r;
-                      }
-                      (e.msg = "invalid distance code"), (r.mode = 30);
-                      break e;
-                    }
-                    if (
-                      ((k = 65535 & v),
-                      p < (y &= 15) &&
-                        ((d += z[n++] << p),
-                        (p += 8) < y && ((d += z[n++] << p), (p += 8))),
-                      h < (k += d & ((1 << y) - 1)))
-                    ) {
-                      (e.msg = "invalid distance too far back"), (r.mode = 30);
-                      break e;
-                    }
-                    if (((d >>>= y), (p -= y), (y = s - a) < k)) {
-                      if (l < (y = k - y) && r.sane) {
-                        (e.msg = "invalid distance too far back"),
-                          (r.mode = 30);
-                        break e;
-                      }
-                      if (((S = c), (x = 0) === f)) {
-                        if (((x += u - y), y < w)) {
-                          for (w -= y; (C[s++] = c[x++]), --y; );
-                          (x = s - k), (S = C);
-                        }
-                      } else if (f < y) {
-                        if (((x += u + f - y), (y -= f) < w)) {
-                          for (w -= y; (C[s++] = c[x++]), --y; );
-                          if (((x = 0), f < w)) {
-                            for (w -= y = f; (C[s++] = c[x++]), --y; );
-                            (x = s - k), (S = C);
-                          }
-                        }
-                      } else if (((x += f - y), y < w)) {
-                        for (w -= y; (C[s++] = c[x++]), --y; );
-                        (x = s - k), (S = C);
-                      }
-                      for (; 2 < w; )
-                        (C[s++] = S[x++]),
-                          (C[s++] = S[x++]),
-                          (C[s++] = S[x++]),
-                          (w -= 3);
-                      w && ((C[s++] = S[x++]), 1 < w && (C[s++] = S[x++]));
-                    } else {
-                      for (
-                        x = s - k;
-                        (C[s++] = C[x++]),
-                          (C[s++] = C[x++]),
-                          (C[s++] = C[x++]),
-                          2 < (w -= 3);
-
-                      );
-                      w && ((C[s++] = C[x++]), 1 < w && (C[s++] = C[x++]));
-                    }
-                    break;
-                  }
-                }
-                break;
-              }
-            } while (n < i && s < o);
-            (n -= w = p >> 3),
-              (d &= (1 << (p -= w << 3)) - 1),
-              (e.next_in = n),
-              (e.next_out = s),
-              (e.avail_in = n < i ? i - n + 5 : 5 - (n - i)),
-              (e.avail_out = s < o ? o - s + 257 : 257 - (s - o)),
-              (r.hold = d),
-              (r.bits = p);
-          };
-        },
-        {},
-      ],
-      49: [
-        function (e, t, r) {
-          "use strict";
-          var I = e("../utils/common"),
-            O = e("./adler32"),
-            B = e("./crc32"),
-            R = e("./inffast"),
-            T = e("./inftrees"),
-            D = 1,
-            F = 2,
-            N = 0,
-            U = -2,
-            P = 1,
-            n = 852,
-            i = 592;
-          function L(e) {
-            return (
-              ((e >>> 24) & 255) +
-              ((e >>> 8) & 65280) +
-              ((65280 & e) << 8) +
-              ((255 & e) << 24)
-            );
-          }
-          function s() {
-            (this.mode = 0),
-              (this.last = !1),
-              (this.wrap = 0),
-              (this.havedict = !1),
-              (this.flags = 0),
-              (this.dmax = 0),
-              (this.check = 0),
-              (this.total = 0),
-              (this.head = null),
-              (this.wbits = 0),
-              (this.wsize = 0),
-              (this.whave = 0),
-              (this.wnext = 0),
-              (this.window = null),
-              (this.hold = 0),
-              (this.bits = 0),
-              (this.length = 0),
-              (this.offset = 0),
-              (this.extra = 0),
-              (this.lencode = null),
-              (this.distcode = null),
-              (this.lenbits = 0),
-              (this.distbits = 0),
-              (this.ncode = 0),
-              (this.nlen = 0),
-              (this.ndist = 0),
-              (this.have = 0),
-              (this.next = null),
-              (this.lens = new I.Buf16(320)),
-              (this.work = new I.Buf16(288)),
-              (this.lendyn = null),
-              (this.distdyn = null),
-              (this.sane = 0),
-              (this.back = 0),
-              (this.was = 0);
-          }
-          function a(e) {
-            var t;
-            return e && e.state
-              ? ((t = e.state),
-                (e.total_in = e.total_out = t.total = 0),
-                (e.msg = ""),
-                t.wrap && (e.adler = 1 & t.wrap),
-                (t.mode = P),
-                (t.last = 0),
-                (t.havedict = 0),
-                (t.dmax = 32768),
-                (t.head = null),
-                (t.hold = 0),
-                (t.bits = 0),
-                (t.lencode = t.lendyn = new I.Buf32(n)),
-                (t.distcode = t.distdyn = new I.Buf32(i)),
-                (t.sane = 1),
-                (t.back = -1),
-                N)
-              : U;
-          }
-          function o(e) {
-            var t;
-            return e && e.state
-              ? (((t = e.state).wsize = 0), (t.whave = 0), (t.wnext = 0), a(e))
-              : U;
-          }
-          function h(e, t) {
-            var r, n;
-            return e && e.state
-              ? ((n = e.state),
-                t < 0
-                  ? ((r = 0), (t = -t))
-                  : ((r = 1 + (t >> 4)), t < 48 && (t &= 15)),
-                t && (t < 8 || 15 < t)
-                  ? U
-                  : (null !== n.window && n.wbits !== t && (n.window = null),
-                    (n.wrap = r),
-                    (n.wbits = t),
-                    o(e)))
-              : U;
-          }
-          function u(e, t) {
-            var r, n;
-            return e
-              ? ((n = new s()),
-                ((e.state = n).window = null),
-                (r = h(e, t)) !== N && (e.state = null),
-                r)
-              : U;
-          }
-          var l,
-            f,
-            c = !0;
-          function j(e) {
-            if (c) {
-              var t;
-              for (l = new I.Buf32(512), f = new I.Buf32(32), t = 0; t < 144; )
-                e.lens[t++] = 8;
-              for (; t < 256; ) e.lens[t++] = 9;
-              for (; t < 280; ) e.lens[t++] = 7;
-              for (; t < 288; ) e.lens[t++] = 8;
-              for (
-                T(D, e.lens, 0, 288, l, 0, e.work, { bits: 9 }), t = 0;
-                t < 32;
-
-              )
-                e.lens[t++] = 5;
-              T(F, e.lens, 0, 32, f, 0, e.work, { bits: 5 }), (c = !1);
-            }
-            (e.lencode = l),
-              (e.lenbits = 9),
-              (e.distcode = f),
-              (e.distbits = 5);
-          }
-          function Z(e, t, r, n) {
-            var i,
-              s = e.state;
-            return (
-              null === s.window &&
-                ((s.wsize = 1 << s.wbits),
-                (s.wnext = 0),
-                (s.whave = 0),
-                (s.window = new I.Buf8(s.wsize))),
-              n >= s.wsize
-                ? (I.arraySet(s.window, t, r - s.wsize, s.wsize, 0),
-                  (s.wnext = 0),
-                  (s.whave = s.wsize))
-                : (n < (i = s.wsize - s.wnext) && (i = n),
-                  I.arraySet(s.window, t, r - n, i, s.wnext),
-                  (n -= i)
-                    ? (I.arraySet(s.window, t, r - n, n, 0),
-                      (s.wnext = n),
-                      (s.whave = s.wsize))
-                    : ((s.wnext += i),
-                      s.wnext === s.wsize && (s.wnext = 0),
-                      s.whave < s.wsize && (s.whave += i))),
-              0
-            );
-          }
-          (r.inflateReset = o),
-            (r.inflateReset2 = h),
-            (r.inflateResetKeep = a),
-            (r.inflateInit = function (e) {
-              return u(e, 15);
-            }),
-            (r.inflateInit2 = u),
-            (r.inflate = function (e, t) {
-              var r,
-                n,
-                i,
-                s,
-                a,
-                o,
-                h,
-                u,
-                l,
-                f,
-                c,
-                d,
-                p,
-                m,
-                _,
-                g,
-                b,
-                v,
-                y,
-                w,
-                k,
-                x,
-                S,
-                z,
-                C = 0,
-                E = new I.Buf8(4),
-                A = [
-                  16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1,
-                  15,
-                ];
-              if (!e || !e.state || !e.output || (!e.input && 0 !== e.avail_in))
-                return U;
-              12 === (r = e.state).mode && (r.mode = 13),
-                (a = e.next_out),
-                (i = e.output),
-                (h = e.avail_out),
-                (s = e.next_in),
-                (n = e.input),
-                (o = e.avail_in),
-                (u = r.hold),
-                (l = r.bits),
-                (f = o),
-                (c = h),
-                (x = N);
-              e: for (;;)
-                switch (r.mode) {
-                  case P:
-                    if (0 === r.wrap) {
-                      r.mode = 13;
-                      break;
-                    }
-                    for (; l < 16; ) {
-                      if (0 === o) break e;
-                      o--, (u += n[s++] << l), (l += 8);
-                    }
-                    if (2 & r.wrap && 35615 === u) {
-                      (E[(r.check = 0)] = 255 & u),
-                        (E[1] = (u >>> 8) & 255),
-                        (r.check = B(r.check, E, 2, 0)),
-                        (l = u = 0),
-                        (r.mode = 2);
-                      break;
-                    }
-                    if (
-                      ((r.flags = 0),
-                      r.head && (r.head.done = !1),
-                      !(1 & r.wrap) || (((255 & u) << 8) + (u >> 8)) % 31)
-                    ) {
-                      (e.msg = "incorrect header check"), (r.mode = 30);
-                      break;
-                    }
-                    if (8 != (15 & u)) {
-                      (e.msg = "unknown compression method"), (r.mode = 30);
-                      break;
-                    }
-                    if (((l -= 4), (k = 8 + (15 & (u >>>= 4))), 0 === r.wbits))
-                      r.wbits = k;
-                    else if (k > r.wbits) {
-                      (e.msg = "invalid window size"), (r.mode = 30);
-                      break;
-                    }
-                    (r.dmax = 1 << k),
-                      (e.adler = r.check = 1),
-                      (r.mode = 512 & u ? 10 : 12),
-                      (l = u = 0);
-                    break;
-                  case 2:
-                    for (; l < 16; ) {
-                      if (0 === o) break e;
-                      o--, (u += n[s++] << l), (l += 8);
-                    }
-                    if (((r.flags = u), 8 != (255 & r.flags))) {
-                      (e.msg = "unknown compression method"), (r.mode = 30);
-                      break;
-                    }
-                    if (57344 & r.flags) {
-                      (e.msg = "unknown header flags set"), (r.mode = 30);
-                      break;
-                    }
-                    r.head && (r.head.text = (u >> 8) & 1),
-                      512 & r.flags &&
-                        ((E[0] = 255 & u),
-                        (E[1] = (u >>> 8) & 255),
-                        (r.check = B(r.check, E, 2, 0))),
-                      (l = u = 0),
-                      (r.mode = 3);
-                  case 3:
-                    for (; l < 32; ) {
-                      if (0 === o) break e;
-                      o--, (u += n[s++] << l), (l += 8);
-                    }
-                    r.head && (r.head.time = u),
-                      512 & r.flags &&
-                        ((E[0] = 255 & u),
-                        (E[1] = (u >>> 8) & 255),
-                        (E[2] = (u >>> 16) & 255),
-                        (E[3] = (u >>> 24) & 255),
-                        (r.check = B(r.check, E, 4, 0))),
-                      (l = u = 0),
-                      (r.mode = 4);
-                  case 4:
-                    for (; l < 16; ) {
-                      if (0 === o) break e;
-                      o--, (u += n[s++] << l), (l += 8);
-                    }
-                    r.head && ((r.head.xflags = 255 & u), (r.head.os = u >> 8)),
-                      512 & r.flags &&
-                        ((E[0] = 255 & u),
-                        (E[1] = (u >>> 8) & 255),
-                        (r.check = B(r.check, E, 2, 0))),
-                      (l = u = 0),
-                      (r.mode = 5);
-                  case 5:
-                    if (1024 & r.flags) {
-                      for (; l < 16; ) {
-                        if (0 === o) break e;
-                        o--, (u += n[s++] << l), (l += 8);
-                      }
-                      (r.length = u),
-                        r.head && (r.head.extra_len = u),
-                        512 & r.flags &&
-                          ((E[0] = 255 & u),
-                          (E[1] = (u >>> 8) & 255),
-                          (r.check = B(r.check, E, 2, 0))),
-                        (l = u = 0);
-                    } else r.head && (r.head.extra = null);
-                    r.mode = 6;
-                  case 6:
-                    if (
-                      1024 & r.flags &&
-                      (o < (d = r.length) && (d = o),
-                      d &&
-                        (r.head &&
-                          ((k = r.head.extra_len - r.length),
-                          r.head.extra ||
-                            (r.head.extra = new Array(r.head.extra_len)),
-                          I.arraySet(r.head.extra, n, s, d, k)),
-                        512 & r.flags && (r.check = B(r.check, n, d, s)),
-                        (o -= d),
-                        (s += d),
-                        (r.length -= d)),
-                      r.length)
-                    )
-                      break e;
-                    (r.length = 0), (r.mode = 7);
-                  case 7:
-                    if (2048 & r.flags) {
-                      if (0 === o) break e;
-                      for (
-                        d = 0;
-                        (k = n[s + d++]),
-                          r.head &&
-                            k &&
-                            r.length < 65536 &&
-                            (r.head.name += String.fromCharCode(k)),
-                          k && d < o;
-
-                      );
-                      if (
-                        (512 & r.flags && (r.check = B(r.check, n, d, s)),
-                        (o -= d),
-                        (s += d),
-                        k)
-                      )
-                        break e;
-                    } else r.head && (r.head.name = null);
-                    (r.length = 0), (r.mode = 8);
-                  case 8:
-                    if (4096 & r.flags) {
-                      if (0 === o) break e;
-                      for (
-                        d = 0;
-                        (k = n[s + d++]),
-                          r.head &&
-                            k &&
-                            r.length < 65536 &&
-                            (r.head.comment += String.fromCharCode(k)),
-                          k && d < o;
-
-                      );
-                      if (
-                        (512 & r.flags && (r.check = B(r.check, n, d, s)),
-                        (o -= d),
-                        (s += d),
-                        k)
-                      )
-                        break e;
-                    } else r.head && (r.head.comment = null);
-                    r.mode = 9;
-                  case 9:
-                    if (512 & r.flags) {
-                      for (; l < 16; ) {
-                        if (0 === o) break e;
-                        o--, (u += n[s++] << l), (l += 8);
-                      }
-                      if (u !== (65535 & r.check)) {
-                        (e.msg = "header crc mismatch"), (r.mode = 30);
-                        break;
-                      }
-                      l = u = 0;
-                    }
-                    r.head &&
-                      ((r.head.hcrc = (r.flags >> 9) & 1), (r.head.done = !0)),
-                      (e.adler = r.check = 0),
-                      (r.mode = 12);
-                    break;
-                  case 10:
-                    for (; l < 32; ) {
-                      if (0 === o) break e;
-                      o--, (u += n[s++] << l), (l += 8);
-                    }
-                    (e.adler = r.check = L(u)), (l = u = 0), (r.mode = 11);
-                  case 11:
-                    if (0 === r.havedict)
-                      return (
-                        (e.next_out = a),
-                        (e.avail_out = h),
-                        (e.next_in = s),
-                        (e.avail_in = o),
-                        (r.hold = u),
-                        (r.bits = l),
-                        2
-                      );
-                    (e.adler = r.check = 1), (r.mode = 12);
-                  case 12:
-                    if (5 === t || 6 === t) break e;
-                  case 13:
-                    if (r.last) {
-                      (u >>>= 7 & l), (l -= 7 & l), (r.mode = 27);
-                      break;
-                    }
-                    for (; l < 3; ) {
-                      if (0 === o) break e;
-                      o--, (u += n[s++] << l), (l += 8);
-                    }
-                    switch (((r.last = 1 & u), (l -= 1), 3 & (u >>>= 1))) {
-                      case 0:
-                        r.mode = 14;
-                        break;
-                      case 1:
-                        if ((j(r), (r.mode = 20), 6 !== t)) break;
-                        (u >>>= 2), (l -= 2);
-                        break e;
-                      case 2:
-                        r.mode = 17;
-                        break;
-                      case 3:
-                        (e.msg = "invalid block type"), (r.mode = 30);
-                    }
-                    (u >>>= 2), (l -= 2);
-                    break;
-                  case 14:
-                    for (u >>>= 7 & l, l -= 7 & l; l < 32; ) {
-                      if (0 === o) break e;
-                      o--, (u += n[s++] << l), (l += 8);
-                    }
-                    if ((65535 & u) != ((u >>> 16) ^ 65535)) {
-                      (e.msg = "invalid stored block lengths"), (r.mode = 30);
-                      break;
-                    }
-                    if (
-                      ((r.length = 65535 & u),
-                      (l = u = 0),
-                      (r.mode = 15),
-                      6 === t)
-                    )
-                      break e;
-                  case 15:
-                    r.mode = 16;
-                  case 16:
-                    if ((d = r.length)) {
-                      if ((o < d && (d = o), h < d && (d = h), 0 === d))
-                        break e;
-                      I.arraySet(i, n, s, d, a),
-                        (o -= d),
-                        (s += d),
-                        (h -= d),
-                        (a += d),
-                        (r.length -= d);
-                      break;
-                    }
-                    r.mode = 12;
-                    break;
-                  case 17:
-                    for (; l < 14; ) {
-                      if (0 === o) break e;
-                      o--, (u += n[s++] << l), (l += 8);
-                    }
-                    if (
-                      ((r.nlen = 257 + (31 & u)),
-                      (u >>>= 5),
-                      (l -= 5),
-                      (r.ndist = 1 + (31 & u)),
-                      (u >>>= 5),
-                      (l -= 5),
-                      (r.ncode = 4 + (15 & u)),
-                      (u >>>= 4),
-                      (l -= 4),
-                      286 < r.nlen || 30 < r.ndist)
-                    ) {
-                      (e.msg = "too many length or distance symbols"),
-                        (r.mode = 30);
-                      break;
-                    }
-                    (r.have = 0), (r.mode = 18);
-                  case 18:
-                    for (; r.have < r.ncode; ) {
-                      for (; l < 3; ) {
-                        if (0 === o) break e;
-                        o--, (u += n[s++] << l), (l += 8);
-                      }
-                      (r.lens[A[r.have++]] = 7 & u), (u >>>= 3), (l -= 3);
-                    }
-                    for (; r.have < 19; ) r.lens[A[r.have++]] = 0;
-                    if (
-                      ((r.lencode = r.lendyn),
-                      (r.lenbits = 7),
-                      (S = { bits: r.lenbits }),
-                      (x = T(0, r.lens, 0, 19, r.lencode, 0, r.work, S)),
-                      (r.lenbits = S.bits),
-                      x)
-                    ) {
-                      (e.msg = "invalid code lengths set"), (r.mode = 30);
-                      break;
-                    }
-                    (r.have = 0), (r.mode = 19);
-                  case 19:
-                    for (; r.have < r.nlen + r.ndist; ) {
-                      for (
-                        ;
-                        (g =
-                          ((C = r.lencode[u & ((1 << r.lenbits) - 1)]) >>> 16) &
-                          255),
-                          (b = 65535 & C),
-                          !((_ = C >>> 24) <= l);
-
-                      ) {
-                        if (0 === o) break e;
-                        o--, (u += n[s++] << l), (l += 8);
-                      }
-                      if (b < 16) (u >>>= _), (l -= _), (r.lens[r.have++] = b);
-                      else {
-                        if (16 === b) {
-                          for (z = _ + 2; l < z; ) {
-                            if (0 === o) break e;
-                            o--, (u += n[s++] << l), (l += 8);
-                          }
-                          if (((u >>>= _), (l -= _), 0 === r.have)) {
-                            (e.msg = "invalid bit length repeat"),
-                              (r.mode = 30);
-                            break;
-                          }
-                          (k = r.lens[r.have - 1]),
-                            (d = 3 + (3 & u)),
-                            (u >>>= 2),
-                            (l -= 2);
-                        } else if (17 === b) {
-                          for (z = _ + 3; l < z; ) {
-                            if (0 === o) break e;
-                            o--, (u += n[s++] << l), (l += 8);
-                          }
-                          (l -= _),
-                            (k = 0),
-                            (d = 3 + (7 & (u >>>= _))),
-                            (u >>>= 3),
-                            (l -= 3);
-                        } else {
-                          for (z = _ + 7; l < z; ) {
-                            if (0 === o) break e;
-                            o--, (u += n[s++] << l), (l += 8);
-                          }
-                          (l -= _),
-                            (k = 0),
-                            (d = 11 + (127 & (u >>>= _))),
-                            (u >>>= 7),
-                            (l -= 7);
-                        }
-                        if (r.have + d > r.nlen + r.ndist) {
-                          (e.msg = "invalid bit length repeat"), (r.mode = 30);
-                          break;
-                        }
-                        for (; d--; ) r.lens[r.have++] = k;
-                      }
-                    }
-                    if (30 === r.mode) break;
-                    if (0 === r.lens[256]) {
-                      (e.msg = "invalid code -- missing end-of-block"),
-                        (r.mode = 30);
-                      break;
-                    }
-                    if (
-                      ((r.lenbits = 9),
-                      (S = { bits: r.lenbits }),
-                      (x = T(D, r.lens, 0, r.nlen, r.lencode, 0, r.work, S)),
-                      (r.lenbits = S.bits),
-                      x)
-                    ) {
-                      (e.msg = "invalid literal/lengths set"), (r.mode = 30);
-                      break;
-                    }
-                    if (
-                      ((r.distbits = 6),
-                      (r.distcode = r.distdyn),
-                      (S = { bits: r.distbits }),
-                      (x = T(
-                        F,
-                        r.lens,
-                        r.nlen,
-                        r.ndist,
-                        r.distcode,
-                        0,
-                        r.work,
-                        S,
-                      )),
-                      (r.distbits = S.bits),
-                      x)
-                    ) {
-                      (e.msg = "invalid distances set"), (r.mode = 30);
-                      break;
-                    }
-                    if (((r.mode = 20), 6 === t)) break e;
-                  case 20:
-                    r.mode = 21;
-                  case 21:
-                    if (6 <= o && 258 <= h) {
-                      (e.next_out = a),
-                        (e.avail_out = h),
-                        (e.next_in = s),
-                        (e.avail_in = o),
-                        (r.hold = u),
-                        (r.bits = l),
-                        R(e, c),
-                        (a = e.next_out),
-                        (i = e.output),
-                        (h = e.avail_out),
-                        (s = e.next_in),
-                        (n = e.input),
-                        (o = e.avail_in),
-                        (u = r.hold),
-                        (l = r.bits),
-                        12 === r.mode && (r.back = -1);
-                      break;
-                    }
-                    for (
-                      r.back = 0;
-                      (g =
-                        ((C = r.lencode[u & ((1 << r.lenbits) - 1)]) >>> 16) &
-                        255),
-                        (b = 65535 & C),
-                        !((_ = C >>> 24) <= l);
-
-                    ) {
-                      if (0 === o) break e;
-                      o--, (u += n[s++] << l), (l += 8);
-                    }
-                    if (g && 0 == (240 & g)) {
-                      for (
-                        v = _, y = g, w = b;
-                        (g =
-                          ((C =
-                            r.lencode[
-                              w + ((u & ((1 << (v + y)) - 1)) >> v)
-                            ]) >>>
-                            16) &
-                          255),
-                          (b = 65535 & C),
-                          !(v + (_ = C >>> 24) <= l);
-
-                      ) {
-                        if (0 === o) break e;
-                        o--, (u += n[s++] << l), (l += 8);
-                      }
-                      (u >>>= v), (l -= v), (r.back += v);
-                    }
-                    if (
-                      ((u >>>= _),
-                      (l -= _),
-                      (r.back += _),
-                      (r.length = b),
-                      0 === g)
-                    ) {
-                      r.mode = 26;
-                      break;
-                    }
-                    if (32 & g) {
-                      (r.back = -1), (r.mode = 12);
-                      break;
-                    }
-                    if (64 & g) {
-                      (e.msg = "invalid literal/length code"), (r.mode = 30);
-                      break;
-                    }
-                    (r.extra = 15 & g), (r.mode = 22);
-                  case 22:
-                    if (r.extra) {
-                      for (z = r.extra; l < z; ) {
-                        if (0 === o) break e;
-                        o--, (u += n[s++] << l), (l += 8);
-                      }
-                      (r.length += u & ((1 << r.extra) - 1)),
-                        (u >>>= r.extra),
-                        (l -= r.extra),
-                        (r.back += r.extra);
-                    }
-                    (r.was = r.length), (r.mode = 23);
-                  case 23:
-                    for (
-                      ;
-                      (g =
-                        ((C = r.distcode[u & ((1 << r.distbits) - 1)]) >>> 16) &
-                        255),
-                        (b = 65535 & C),
-                        !((_ = C >>> 24) <= l);
-
-                    ) {
-                      if (0 === o) break e;
-                      o--, (u += n[s++] << l), (l += 8);
-                    }
-                    if (0 == (240 & g)) {
-                      for (
-                        v = _, y = g, w = b;
-                        (g =
-                          ((C =
-                            r.distcode[
-                              w + ((u & ((1 << (v + y)) - 1)) >> v)
-                            ]) >>>
-                            16) &
-                          255),
-                          (b = 65535 & C),
-                          !(v + (_ = C >>> 24) <= l);
-
-                      ) {
-                        if (0 === o) break e;
-                        o--, (u += n[s++] << l), (l += 8);
-                      }
-                      (u >>>= v), (l -= v), (r.back += v);
-                    }
-                    if (((u >>>= _), (l -= _), (r.back += _), 64 & g)) {
-                      (e.msg = "invalid distance code"), (r.mode = 30);
-                      break;
-                    }
-                    (r.offset = b), (r.extra = 15 & g), (r.mode = 24);
-                  case 24:
-                    if (r.extra) {
-                      for (z = r.extra; l < z; ) {
-                        if (0 === o) break e;
-                        o--, (u += n[s++] << l), (l += 8);
-                      }
-                      (r.offset += u & ((1 << r.extra) - 1)),
-                        (u >>>= r.extra),
-                        (l -= r.extra),
-                        (r.back += r.extra);
-                    }
-                    if (r.offset > r.dmax) {
-                      (e.msg = "invalid distance too far back"), (r.mode = 30);
-                      break;
-                    }
-                    r.mode = 25;
-                  case 25:
-                    if (0 === h) break e;
-                    if (((d = c - h), r.offset > d)) {
-                      if ((d = r.offset - d) > r.whave && r.sane) {
-                        (e.msg = "invalid distance too far back"),
-                          (r.mode = 30);
-                        break;
-                      }
-                      (p =
-                        d > r.wnext
-                          ? ((d -= r.wnext), r.wsize - d)
-                          : r.wnext - d),
-                        d > r.length && (d = r.length),
-                        (m = r.window);
-                    } else (m = i), (p = a - r.offset), (d = r.length);
-                    for (
-                      h < d && (d = h), h -= d, r.length -= d;
-                      (i[a++] = m[p++]), --d;
-
-                    );
-                    0 === r.length && (r.mode = 21);
-                    break;
-                  case 26:
-                    if (0 === h) break e;
-                    (i[a++] = r.length), h--, (r.mode = 21);
-                    break;
-                  case 27:
-                    if (r.wrap) {
-                      for (; l < 32; ) {
-                        if (0 === o) break e;
-                        o--, (u |= n[s++] << l), (l += 8);
-                      }
-                      if (
-                        ((c -= h),
-                        (e.total_out += c),
-                        (r.total += c),
-                        c &&
-                          (e.adler = r.check =
-                            r.flags
-                              ? B(r.check, i, c, a - c)
-                              : O(r.check, i, c, a - c)),
-                        (c = h),
-                        (r.flags ? u : L(u)) !== r.check)
-                      ) {
-                        (e.msg = "incorrect data check"), (r.mode = 30);
-                        break;
-                      }
-                      l = u = 0;
-                    }
-                    r.mode = 28;
-                  case 28:
-                    if (r.wrap && r.flags) {
-                      for (; l < 32; ) {
-                        if (0 === o) break e;
-                        o--, (u += n[s++] << l), (l += 8);
-                      }
-                      if (u !== (4294967295 & r.total)) {
-                        (e.msg = "incorrect length check"), (r.mode = 30);
-                        break;
-                      }
-                      l = u = 0;
-                    }
-                    r.mode = 29;
-                  case 29:
-                    x = 1;
-                    break e;
-                  case 30:
-                    x = -3;
-                    break e;
-                  case 31:
-                    return -4;
-                  case 32:
-                  default:
-                    return U;
-                }
-              return (
-                (e.next_out = a),
-                (e.avail_out = h),
-                (e.next_in = s),
-                (e.avail_in = o),
-                (r.hold = u),
-                (r.bits = l),
-                (r.wsize ||
-                  (c !== e.avail_out &&
-                    r.mode < 30 &&
-                    (r.mode < 27 || 4 !== t))) &&
-                Z(e, e.output, e.next_out, c - e.avail_out)
-                  ? ((r.mode = 31), -4)
-                  : ((f -= e.avail_in),
-                    (c -= e.avail_out),
-                    (e.total_in += f),
-                    (e.total_out += c),
-                    (r.total += c),
-                    r.wrap &&
-                      c &&
-                      (e.adler = r.check =
-                        r.flags
-                          ? B(r.check, i, c, e.next_out - c)
-                          : O(r.check, i, c, e.next_out - c)),
-                    (e.data_type =
-                      r.bits +
-                      (r.last ? 64 : 0) +
-                      (12 === r.mode ? 128 : 0) +
-                      (20 === r.mode || 15 === r.mode ? 256 : 0)),
-                    ((0 == f && 0 === c) || 4 === t) && x === N && (x = -5),
-                    x)
-              );
-            }),
-            (r.inflateEnd = function (e) {
-              if (!e || !e.state) return U;
-              var t = e.state;
-              return t.window && (t.window = null), (e.state = null), N;
-            }),
-            (r.inflateGetHeader = function (e, t) {
-              var r;
-              return e && e.state
-                ? 0 == (2 & (r = e.state).wrap)
-                  ? U
-                  : (((r.head = t).done = !1), N)
-                : U;
-            }),
-            (r.inflateSetDictionary = function (e, t) {
-              var r,
-                n = t.length;
-              return e && e.state
-                ? 0 !== (r = e.state).wrap && 11 !== r.mode
-                  ? U
-                  : 11 === r.mode && O(1, t, n, 0) !== r.check
-                  ? -3
-                  : Z(e, t, n, n)
-                  ? ((r.mode = 31), -4)
-                  : ((r.havedict = 1), N)
-                : U;
-            }),
-            (r.inflateInfo = "pako inflate (from Nodeca project)");
-        },
-        {
-          "../utils/common": 41,
-          "./adler32": 43,
-          "./crc32": 45,
-          "./inffast": 48,
-          "./inftrees": 50,
-        },
-      ],
-      50: [
-        function (e, t, r) {
-          "use strict";
-          var D = e("../utils/common"),
-            F = [
-              3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, 35, 43,
-              51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0,
-            ],
-            N = [
-              16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18,
-              19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 72, 78,
-            ],
-            U = [
-              1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257,
-              385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289,
-              16385, 24577, 0, 0,
-            ],
-            P = [
-              16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22,
-              23, 23, 24, 24, 25, 25, 26, 26, 27, 27, 28, 28, 29, 29, 64, 64,
-            ];
-          t.exports = function (e, t, r, n, i, s, a, o) {
-            var h,
-              u,
-              l,
-              f,
-              c,
-              d,
-              p,
-              m,
-              _,
-              g = o.bits,
-              b = 0,
-              v = 0,
-              y = 0,
-              w = 0,
-              k = 0,
-              x = 0,
-              S = 0,
-              z = 0,
-              C = 0,
-              E = 0,
-              A = null,
-              I = 0,
-              O = new D.Buf16(16),
-              B = new D.Buf16(16),
-              R = null,
-              T = 0;
-            for (b = 0; b <= 15; b++) O[b] = 0;
-            for (v = 0; v < n; v++) O[t[r + v]]++;
-            for (k = g, w = 15; 1 <= w && 0 === O[w]; w--);
-            if ((w < k && (k = w), 0 === w))
-              return (i[s++] = 20971520), (i[s++] = 20971520), (o.bits = 1), 0;
-            for (y = 1; y < w && 0 === O[y]; y++);
-            for (k < y && (k = y), b = z = 1; b <= 15; b++)
-              if (((z <<= 1), (z -= O[b]) < 0)) return -1;
-            if (0 < z && (0 === e || 1 !== w)) return -1;
-            for (B[1] = 0, b = 1; b < 15; b++) B[b + 1] = B[b] + O[b];
-            for (v = 0; v < n; v++) 0 !== t[r + v] && (a[B[t[r + v]]++] = v);
-            if (
-              ((d =
-                0 === e
-                  ? ((A = R = a), 19)
-                  : 1 === e
-                  ? ((A = F), (I -= 257), (R = N), (T -= 257), 256)
-                  : ((A = U), (R = P), -1)),
-              (b = y),
-              (c = s),
-              (S = v = E = 0),
-              (l = -1),
-              (f = (C = 1 << (x = k)) - 1),
-              (1 === e && 852 < C) || (2 === e && 592 < C))
-            )
-              return 1;
-            for (;;) {
-              for (
-                p = b - S,
-                  _ =
-                    a[v] < d
-                      ? ((m = 0), a[v])
-                      : a[v] > d
-                      ? ((m = R[T + a[v]]), A[I + a[v]])
-                      : ((m = 96), 0),
-                  h = 1 << (b - S),
-                  y = u = 1 << x;
-                (i[c + (E >> S) + (u -= h)] = (p << 24) | (m << 16) | _ | 0),
-                  0 !== u;
-
-              );
-              for (h = 1 << (b - 1); E & h; ) h >>= 1;
-              if (
-                (0 !== h ? ((E &= h - 1), (E += h)) : (E = 0), v++, 0 == --O[b])
-              ) {
-                if (b === w) break;
-                b = t[r + a[v]];
-              }
-              if (k < b && (E & f) !== l) {
-                for (
-                  0 === S && (S = k), c += y, z = 1 << (x = b - S);
-                  x + S < w && !((z -= O[x + S]) <= 0);
-
-                )
-                  x++, (z <<= 1);
-                if (
-                  ((C += 1 << x), (1 === e && 852 < C) || (2 === e && 592 < C))
-                )
-                  return 1;
-                i[(l = E & f)] = (k << 24) | (x << 16) | (c - s) | 0;
-              }
-            }
-            return (
-              0 !== E && (i[c + E] = ((b - S) << 24) | (64 << 16) | 0),
-              (o.bits = k),
-              0
-            );
-          };
-        },
-        { "../utils/common": 41 },
-      ],
-      51: [
-        function (e, t, r) {
-          "use strict";
-          t.exports = {
-            2: "need dictionary",
-            1: "stream end",
-            0: "",
-            "-1": "file error",
-            "-2": "stream error",
-            "-3": "data error",
-            "-4": "insufficient memory",
-            "-5": "buffer error",
-            "-6": "incompatible version",
-          };
-        },
-        {},
-      ],
-      52: [
-        function (e, t, r) {
-          "use strict";
-          var i = e("../utils/common"),
-            o = 0,
-            h = 1;
-          function n(e) {
-            for (var t = e.length; 0 <= --t; ) e[t] = 0;
-          }
-          var s = 0,
-            a = 29,
-            u = 256,
-            l = u + 1 + a,
-            f = 30,
-            c = 19,
-            _ = 2 * l + 1,
-            g = 15,
-            d = 16,
-            p = 7,
-            m = 256,
-            b = 16,
-            v = 17,
-            y = 18,
-            w = [
-              0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4,
-              4, 4, 5, 5, 5, 5, 0,
-            ],
-            k = [
-              0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9,
-              10, 10, 11, 11, 12, 12, 13, 13,
-            ],
-            x = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 7],
-            S = [
-              16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15,
-            ],
-            z = new Array(2 * (l + 2));
-          n(z);
-          var C = new Array(2 * f);
-          n(C);
-          var E = new Array(512);
-          n(E);
-          var A = new Array(256);
-          n(A);
-          var I = new Array(a);
-          n(I);
-          var O,
-            B,
-            R,
-            T = new Array(f);
-          function D(e, t, r, n, i) {
-            (this.static_tree = e),
-              (this.extra_bits = t),
-              (this.extra_base = r),
-              (this.elems = n),
-              (this.max_length = i),
-              (this.has_stree = e && e.length);
-          }
-          function F(e, t) {
-            (this.dyn_tree = e), (this.max_code = 0), (this.stat_desc = t);
-          }
-          function N(e) {
-            return e < 256 ? E[e] : E[256 + (e >>> 7)];
-          }
-          function U(e, t) {
-            (e.pending_buf[e.pending++] = 255 & t),
-              (e.pending_buf[e.pending++] = (t >>> 8) & 255);
-          }
-          function P(e, t, r) {
-            e.bi_valid > d - r
-              ? ((e.bi_buf |= (t << e.bi_valid) & 65535),
-                U(e, e.bi_buf),
-                (e.bi_buf = t >> (d - e.bi_valid)),
-                (e.bi_valid += r - d))
-              : ((e.bi_buf |= (t << e.bi_valid) & 65535), (e.bi_valid += r));
-          }
-          function L(e, t, r) {
-            P(e, r[2 * t], r[2 * t + 1]);
-          }
-          function j(e, t) {
-            for (var r = 0; (r |= 1 & e), (e >>>= 1), (r <<= 1), 0 < --t; );
-            return r >>> 1;
-          }
-          function Z(e, t, r) {
-            var n,
-              i,
-              s = new Array(g + 1),
-              a = 0;
-            for (n = 1; n <= g; n++) s[n] = a = (a + r[n - 1]) << 1;
-            for (i = 0; i <= t; i++) {
-              var o = e[2 * i + 1];
-              0 !== o && (e[2 * i] = j(s[o]++, o));
-            }
-          }
-          function W(e) {
-            var t;
-            for (t = 0; t < l; t++) e.dyn_ltree[2 * t] = 0;
-            for (t = 0; t < f; t++) e.dyn_dtree[2 * t] = 0;
-            for (t = 0; t < c; t++) e.bl_tree[2 * t] = 0;
-            (e.dyn_ltree[2 * m] = 1),
-              (e.opt_len = e.static_len = 0),
-              (e.last_lit = e.matches = 0);
-          }
-          function M(e) {
-            8 < e.bi_valid
-              ? U(e, e.bi_buf)
-              : 0 < e.bi_valid && (e.pending_buf[e.pending++] = e.bi_buf),
-              (e.bi_buf = 0),
-              (e.bi_valid = 0);
-          }
-          function H(e, t, r, n) {
-            var i = 2 * t,
-              s = 2 * r;
-            return e[i] < e[s] || (e[i] === e[s] && n[t] <= n[r]);
-          }
-          function G(e, t, r) {
-            for (
-              var n = e.heap[r], i = r << 1;
-              i <= e.heap_len &&
-              (i < e.heap_len && H(t, e.heap[i + 1], e.heap[i], e.depth) && i++,
-              !H(t, n, e.heap[i], e.depth));
-
-            )
-              (e.heap[r] = e.heap[i]), (r = i), (i <<= 1);
-            e.heap[r] = n;
-          }
-          function K(e, t, r) {
-            var n,
-              i,
-              s,
-              a,
-              o = 0;
-            if (0 !== e.last_lit)
-              for (
-                ;
-                (n =
-                  (e.pending_buf[e.d_buf + 2 * o] << 8) |
-                  e.pending_buf[e.d_buf + 2 * o + 1]),
-                  (i = e.pending_buf[e.l_buf + o]),
-                  o++,
-                  0 === n
-                    ? L(e, i, t)
-                    : (L(e, (s = A[i]) + u + 1, t),
-                      0 !== (a = w[s]) && P(e, (i -= I[s]), a),
-                      L(e, (s = N(--n)), r),
-                      0 !== (a = k[s]) && P(e, (n -= T[s]), a)),
-                  o < e.last_lit;
-
-              );
-            L(e, m, t);
-          }
-          function Y(e, t) {
-            var r,
-              n,
-              i,
-              s = t.dyn_tree,
-              a = t.stat_desc.static_tree,
-              o = t.stat_desc.has_stree,
-              h = t.stat_desc.elems,
-              u = -1;
-            for (e.heap_len = 0, e.heap_max = _, r = 0; r < h; r++)
-              0 !== s[2 * r]
-                ? ((e.heap[++e.heap_len] = u = r), (e.depth[r] = 0))
-                : (s[2 * r + 1] = 0);
-            for (; e.heap_len < 2; )
-              (s[2 * (i = e.heap[++e.heap_len] = u < 2 ? ++u : 0)] = 1),
-                (e.depth[i] = 0),
-                e.opt_len--,
-                o && (e.static_len -= a[2 * i + 1]);
-            for (t.max_code = u, r = e.heap_len >> 1; 1 <= r; r--) G(e, s, r);
-            for (
-              i = h;
-              (r = e.heap[1]),
-                (e.heap[1] = e.heap[e.heap_len--]),
-                G(e, s, 1),
-                (n = e.heap[1]),
-                (e.heap[--e.heap_max] = r),
-                (e.heap[--e.heap_max] = n),
-                (s[2 * i] = s[2 * r] + s[2 * n]),
-                (e.depth[i] =
-                  (e.depth[r] >= e.depth[n] ? e.depth[r] : e.depth[n]) + 1),
-                (s[2 * r + 1] = s[2 * n + 1] = i),
-                (e.heap[1] = i++),
-                G(e, s, 1),
-                2 <= e.heap_len;
-
-            );
-            (e.heap[--e.heap_max] = e.heap[1]),
-              (function (e, t) {
-                var r,
-                  n,
-                  i,
-                  s,
-                  a,
-                  o,
-                  h = t.dyn_tree,
-                  u = t.max_code,
-                  l = t.stat_desc.static_tree,
-                  f = t.stat_desc.has_stree,
-                  c = t.stat_desc.extra_bits,
-                  d = t.stat_desc.extra_base,
-                  p = t.stat_desc.max_length,
-                  m = 0;
-                for (s = 0; s <= g; s++) e.bl_count[s] = 0;
-                for (
-                  h[2 * e.heap[e.heap_max] + 1] = 0, r = e.heap_max + 1;
-                  r < _;
-                  r++
-                )
-                  p < (s = h[2 * h[2 * (n = e.heap[r]) + 1] + 1] + 1) &&
-                    ((s = p), m++),
-                    (h[2 * n + 1] = s),
-                    u < n ||
-                      (e.bl_count[s]++,
-                      (a = 0),
-                      d <= n && (a = c[n - d]),
-                      (o = h[2 * n]),
-                      (e.opt_len += o * (s + a)),
-                      f && (e.static_len += o * (l[2 * n + 1] + a)));
-                if (0 !== m) {
-                  do {
-                    for (s = p - 1; 0 === e.bl_count[s]; ) s--;
-                    e.bl_count[s]--,
-                      (e.bl_count[s + 1] += 2),
-                      e.bl_count[p]--,
-                      (m -= 2);
-                  } while (0 < m);
-                  for (s = p; 0 !== s; s--)
-                    for (n = e.bl_count[s]; 0 !== n; )
-                      u < (i = e.heap[--r]) ||
-                        (h[2 * i + 1] !== s &&
-                          ((e.opt_len += (s - h[2 * i + 1]) * h[2 * i]),
-                          (h[2 * i + 1] = s)),
-                        n--);
-                }
-              })(e, t),
-              Z(s, u, e.bl_count);
-          }
-          function X(e, t, r) {
-            var n,
-              i,
-              s = -1,
-              a = t[1],
-              o = 0,
-              h = 7,
-              u = 4;
-            for (
-              0 === a && ((h = 138), (u = 3)),
-                t[2 * (r + 1) + 1] = 65535,
-                n = 0;
-              n <= r;
-              n++
-            )
-              (i = a),
-                (a = t[2 * (n + 1) + 1]),
-                (++o < h && i === a) ||
-                  (o < u
-                    ? (e.bl_tree[2 * i] += o)
-                    : 0 !== i
-                    ? (i !== s && e.bl_tree[2 * i]++, e.bl_tree[2 * b]++)
-                    : o <= 10
-                    ? e.bl_tree[2 * v]++
-                    : e.bl_tree[2 * y]++,
-                  (s = i),
-                  (u =
-                    (o = 0) === a
-                      ? ((h = 138), 3)
-                      : i === a
-                      ? ((h = 6), 3)
-                      : ((h = 7), 4)));
-          }
-          function V(e, t, r) {
-            var n,
-              i,
-              s = -1,
-              a = t[1],
-              o = 0,
-              h = 7,
-              u = 4;
-            for (0 === a && ((h = 138), (u = 3)), n = 0; n <= r; n++)
-              if (((i = a), (a = t[2 * (n + 1) + 1]), !(++o < h && i === a))) {
-                if (o < u) for (; L(e, i, e.bl_tree), 0 != --o; );
-                else
-                  0 !== i
-                    ? (i !== s && (L(e, i, e.bl_tree), o--),
-                      L(e, b, e.bl_tree),
-                      P(e, o - 3, 2))
-                    : o <= 10
-                    ? (L(e, v, e.bl_tree), P(e, o - 3, 3))
-                    : (L(e, y, e.bl_tree), P(e, o - 11, 7));
-                (s = i),
-                  (u =
-                    (o = 0) === a
-                      ? ((h = 138), 3)
-                      : i === a
-                      ? ((h = 6), 3)
-                      : ((h = 7), 4));
-              }
-          }
-          n(T);
-          var q = !1;
-          function J(e, t, r, n) {
-            P(e, (s << 1) + (n ? 1 : 0), 3),
-              (function (e, t, r, n) {
-                M(e),
-                  n && (U(e, r), U(e, ~r)),
-                  i.arraySet(e.pending_buf, e.window, t, r, e.pending),
-                  (e.pending += r);
-              })(e, t, r, !0);
-          }
-          (r._tr_init = function (e) {
-            q ||
-              ((function () {
-                var e,
-                  t,
-                  r,
-                  n,
-                  i,
-                  s = new Array(g + 1);
-                for (n = r = 0; n < a - 1; n++)
-                  for (I[n] = r, e = 0; e < 1 << w[n]; e++) A[r++] = n;
-                for (A[r - 1] = n, n = i = 0; n < 16; n++)
-                  for (T[n] = i, e = 0; e < 1 << k[n]; e++) E[i++] = n;
-                for (i >>= 7; n < f; n++)
-                  for (T[n] = i << 7, e = 0; e < 1 << (k[n] - 7); e++)
-                    E[256 + i++] = n;
-                for (t = 0; t <= g; t++) s[t] = 0;
-                for (e = 0; e <= 143; ) (z[2 * e + 1] = 8), e++, s[8]++;
-                for (; e <= 255; ) (z[2 * e + 1] = 9), e++, s[9]++;
-                for (; e <= 279; ) (z[2 * e + 1] = 7), e++, s[7]++;
-                for (; e <= 287; ) (z[2 * e + 1] = 8), e++, s[8]++;
-                for (Z(z, l + 1, s), e = 0; e < f; e++)
-                  (C[2 * e + 1] = 5), (C[2 * e] = j(e, 5));
-                (O = new D(z, w, u + 1, l, g)),
-                  (B = new D(C, k, 0, f, g)),
-                  (R = new D(new Array(0), x, 0, c, p));
-              })(),
-              (q = !0)),
-              (e.l_desc = new F(e.dyn_ltree, O)),
-              (e.d_desc = new F(e.dyn_dtree, B)),
-              (e.bl_desc = new F(e.bl_tree, R)),
-              (e.bi_buf = 0),
-              (e.bi_valid = 0),
-              W(e);
-          }),
-            (r._tr_stored_block = J),
-            (r._tr_flush_block = function (e, t, r, n) {
-              var i,
-                s,
-                a = 0;
-              0 < e.level
-                ? (2 === e.strm.data_type &&
-                    (e.strm.data_type = (function (e) {
-                      var t,
-                        r = 4093624447;
-                      for (t = 0; t <= 31; t++, r >>>= 1)
-                        if (1 & r && 0 !== e.dyn_ltree[2 * t]) return o;
-                      if (
-                        0 !== e.dyn_ltree[18] ||
-                        0 !== e.dyn_ltree[20] ||
-                        0 !== e.dyn_ltree[26]
-                      )
-                        return h;
-                      for (t = 32; t < u; t++)
-                        if (0 !== e.dyn_ltree[2 * t]) return h;
-                      return o;
-                    })(e)),
-                  Y(e, e.l_desc),
-                  Y(e, e.d_desc),
-                  (a = (function (e) {
-                    var t;
-                    for (
-                      X(e, e.dyn_ltree, e.l_desc.max_code),
-                        X(e, e.dyn_dtree, e.d_desc.max_code),
-                        Y(e, e.bl_desc),
-                        t = c - 1;
-                      3 <= t && 0 === e.bl_tree[2 * S[t] + 1];
-                      t--
-                    );
-                    return (e.opt_len += 3 * (t + 1) + 5 + 5 + 4), t;
-                  })(e)),
-                  (i = (e.opt_len + 3 + 7) >>> 3),
-                  (s = (e.static_len + 3 + 7) >>> 3) <= i && (i = s))
-                : (i = s = r + 5),
-                r + 4 <= i && -1 !== t
-                  ? J(e, t, r, n)
-                  : 4 === e.strategy || s === i
-                  ? (P(e, 2 + (n ? 1 : 0), 3), K(e, z, C))
-                  : (P(e, 4 + (n ? 1 : 0), 3),
-                    (function (e, t, r, n) {
-                      var i;
-                      for (
-                        P(e, t - 257, 5), P(e, r - 1, 5), P(e, n - 4, 4), i = 0;
-                        i < n;
-                        i++
-                      )
-                        P(e, e.bl_tree[2 * S[i] + 1], 3);
-                      V(e, e.dyn_ltree, t - 1), V(e, e.dyn_dtree, r - 1);
-                    })(e, e.l_desc.max_code + 1, e.d_desc.max_code + 1, a + 1),
-                    K(e, e.dyn_ltree, e.dyn_dtree)),
-                W(e),
-                n && M(e);
-            }),
-            (r._tr_tally = function (e, t, r) {
-              return (
-                (e.pending_buf[e.d_buf + 2 * e.last_lit] = (t >>> 8) & 255),
-                (e.pending_buf[e.d_buf + 2 * e.last_lit + 1] = 255 & t),
-                (e.pending_buf[e.l_buf + e.last_lit] = 255 & r),
-                e.last_lit++,
-                0 === t
-                  ? e.dyn_ltree[2 * r]++
-                  : (e.matches++,
-                    t--,
-                    e.dyn_ltree[2 * (A[r] + u + 1)]++,
-                    e.dyn_dtree[2 * N(t)]++),
-                e.last_lit === e.lit_bufsize - 1
-              );
-            }),
-            (r._tr_align = function (e) {
-              P(e, 2, 3),
-                L(e, m, z),
-                (function (e) {
-                  16 === e.bi_valid
-                    ? (U(e, e.bi_buf), (e.bi_buf = 0), (e.bi_valid = 0))
-                    : 8 <= e.bi_valid &&
-                      ((e.pending_buf[e.pending++] = 255 & e.bi_buf),
-                      (e.bi_buf >>= 8),
-                      (e.bi_valid -= 8));
-                })(e);
-            });
-        },
-        { "../utils/common": 41 },
-      ],
-      53: [
-        function (e, t, r) {
-          "use strict";
-          t.exports = function () {
-            (this.input = null),
-              (this.next_in = 0),
-              (this.avail_in = 0),
-              (this.total_in = 0),
-              (this.output = null),
-              (this.next_out = 0),
-              (this.avail_out = 0),
-              (this.total_out = 0),
-              (this.msg = ""),
-              (this.state = null),
-              (this.data_type = 2),
-              (this.adler = 0);
-          };
-        },
-        {},
-      ],
-      54: [
-        function (e, t, r) {
-          (function (e) {
-            !(function (r, n) {
-              "use strict";
-              if (!r.setImmediate) {
-                var i,
-                  s,
-                  t,
-                  a,
-                  o = 1,
-                  h = {},
-                  u = !1,
-                  l = r.document,
-                  e = Object.getPrototypeOf && Object.getPrototypeOf(r);
-                (e = e && e.setTimeout ? e : r),
-                  (i =
-                    "[object process]" === {}.toString.call(r.process)
-                      ? function (e) {
-                          process.nextTick(function () {
-                            c(e);
-                          });
-                        }
-                      : (function () {
-                          if (r.postMessage && !r.importScripts) {
-                            var e = !0,
-                              t = r.onmessage;
-                            return (
-                              (r.onmessage = function () {
-                                e = !1;
-                              }),
-                              r.postMessage("", "*"),
-                              (r.onmessage = t),
-                              e
-                            );
-                          }
-                        })()
-                      ? ((a = "setImmediate$" + Math.random() + "$"),
-                        r.addEventListener
-                          ? r.addEventListener("message", d, !1)
-                          : r.attachEvent("onmessage", d),
-                        function (e) {
-                          r.postMessage(a + e, "*");
-                        })
-                      : r.MessageChannel
-                      ? (((t = new MessageChannel()).port1.onmessage =
-                          function (e) {
-                            c(e.data);
-                          }),
-                        function (e) {
-                          t.port2.postMessage(e);
-                        })
-                      : l && "onreadystatechange" in l.createElement("script")
-                      ? ((s = l.documentElement),
-                        function (e) {
-                          var t = l.createElement("script");
-                          (t.onreadystatechange = function () {
-                            c(e),
-                              (t.onreadystatechange = null),
-                              s.removeChild(t),
-                              (t = null);
-                          }),
-                            s.appendChild(t);
-                        })
-                      : function (e) {
-                          setTimeout(c, 0, e);
-                        }),
-                  (e.setImmediate = function (e) {
-                    "function" != typeof e && (e = new Function("" + e));
-                    for (
-                      var t = new Array(arguments.length - 1), r = 0;
-                      r < t.length;
-                      r++
-                    )
-                      t[r] = arguments[r + 1];
-                    var n = { callback: e, args: t };
-                    return (h[o] = n), i(o), o++;
-                  }),
-                  (e.clearImmediate = f);
-              }
-              function f(e) {
-                delete h[e];
-              }
-              function c(e) {
-                if (u) setTimeout(c, 0, e);
-                else {
-                  var t = h[e];
-                  if (t) {
-                    u = !0;
-                    try {
-                      !(function (e) {
-                        var t = e.callback,
-                          r = e.args;
-                        switch (r.length) {
-                          case 0:
-                            t();
-                            break;
-                          case 1:
-                            t(r[0]);
-                            break;
-                          case 2:
-                            t(r[0], r[1]);
-                            break;
-                          case 3:
-                            t(r[0], r[1], r[2]);
-                            break;
-                          default:
-                            t.apply(n, r);
-                        }
-                      })(t);
-                    } finally {
-                      f(e), (u = !1);
-                    }
-                  }
-                }
-              }
-              function d(e) {
-                e.source === r &&
-                  "string" == typeof e.data &&
-                  0 === e.data.indexOf(a) &&
-                  c(+e.data.slice(a.length));
-              }
-            })("undefined" == typeof self ? (void 0 === e ? this : e) : self);
-          }).call(
-            this,
-            "undefined" != typeof global
-              ? global
-              : "undefined" != typeof self
-              ? self
-              : "undefined" != typeof window
-              ? window
-              : {},
-          );
-        },
-        {},
-      ],
-    },
-    {},
-    [10],
-  )(10);
-});