Events/NightOfScientists/20/GOLEM, termojaderná fúze - Noc vědců_files/eventDetail.js

/******/ (function(modules) { // webpackBootstrap
/******/ 	// install a JSONP callback for chunk loading
/******/ 	function webpackJsonpCallback(data) {
/******/ 		var chunkIds = data[0];
/******/ 		var moreModules = data[1];
/******/ 		var executeModules = data[2];
/******/
/******/ 		// add "moreModules" to the modules object,
/******/ 		// then flag all "chunkIds" as loaded and fire callback
/******/ 		var moduleId, chunkId, i = 0, resolves = [];
/******/ 		for(;i < chunkIds.length; i++) {
/******/ 			chunkId = chunkIds[i];
/******/ 			if(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {
/******/ 				resolves.push(installedChunks[chunkId][0]);
/******/ 			}
/******/ 			installedChunks[chunkId] = 0;
/******/ 		}
/******/ 		for(moduleId in moreModules) {
/******/ 			if(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {
/******/ 				modules[moduleId] = moreModules[moduleId];
/******/ 			}
/******/ 		}
/******/ 		if(parentJsonpFunction) parentJsonpFunction(data);
/******/
/******/ 		while(resolves.length) {
/******/ 			resolves.shift()();
/******/ 		}
/******/
/******/ 		// add entry modules from loaded chunk to deferred list
/******/ 		deferredModules.push.apply(deferredModules, executeModules || []);
/******/
/******/ 		// run deferred modules when all chunks ready
/******/ 		return checkDeferredModules();
/******/ 	};
/******/ 	function checkDeferredModules() {
/******/ 		var result;
/******/ 		for(var i = 0; i < deferredModules.length; i++) {
/******/ 			var deferredModule = deferredModules[i];
/******/ 			var fulfilled = true;
/******/ 			for(var j = 1; j < deferredModule.length; j++) {
/******/ 				var depId = deferredModule[j];
/******/ 				if(installedChunks[depId] !== 0) fulfilled = false;
/******/ 			}
/******/ 			if(fulfilled) {
/******/ 				deferredModules.splice(i--, 1);
/******/ 				result = __webpack_require__(__webpack_require__.s = deferredModule[0]);
/******/ 			}
/******/ 		}
/******/
/******/ 		return result;
/******/ 	}
/******/
/******/ 	// The module cache
/******/ 	var installedModules = {};
/******/
/******/ 	// object to store loaded and loading chunks
/******/ 	// undefined = chunk not loaded, null = chunk preloaded/prefetched
/******/ 	// Promise = chunk loading, 0 = chunk loaded
/******/ 	var installedChunks = {
/******/ 		13: 0
/******/ 	};
/******/
/******/ 	var deferredModules = [];
/******/
/******/ 	// The require function
/******/ 	function __webpack_require__(moduleId) {
/******/
/******/ 		// Check if module is in cache
/******/ 		if(installedModules[moduleId]) {
/******/ 			return installedModules[moduleId].exports;
/******/ 		}
/******/ 		// Create a new module (and put it into the cache)
/******/ 		var module = installedModules[moduleId] = {
/******/ 			i: moduleId,
/******/ 			l: false,
/******/ 			exports: {}
/******/ 		};
/******/
/******/ 		// Execute the module function
/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ 		// Flag the module as loaded
/******/ 		module.l = true;
/******/
/******/ 		// Return the exports of the module
/******/ 		return module.exports;
/******/ 	}
/******/
/******/
/******/ 	// expose the modules object (__webpack_modules__)
/******/ 	__webpack_require__.m = modules;
/******/
/******/ 	// expose the module cache
/******/ 	__webpack_require__.c = installedModules;
/******/
/******/ 	// define getter function for harmony exports
/******/ 	__webpack_require__.d = function(exports, name, getter) {
/******/ 		if(!__webpack_require__.o(exports, name)) {
/******/ 			Object.defineProperty(exports, name, { enumerable: true, get: getter });
/******/ 		}
/******/ 	};
/******/
/******/ 	// define __esModule on exports
/******/ 	__webpack_require__.r = function(exports) {
/******/ 		if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ 			Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ 		}
/******/ 		Object.defineProperty(exports, '__esModule', { value: true });
/******/ 	};
/******/
/******/ 	// create a fake namespace object
/******/ 	// mode & 1: value is a module id, require it
/******/ 	// mode & 2: merge all properties of value into the ns
/******/ 	// mode & 4: return value when already ns object
/******/ 	// mode & 8|1: behave like require
/******/ 	__webpack_require__.t = function(value, mode) {
/******/ 		if(mode & 1) value = __webpack_require__(value);
/******/ 		if(mode & 8) return value;
/******/ 		if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
/******/ 		var ns = Object.create(null);
/******/ 		__webpack_require__.r(ns);
/******/ 		Object.defineProperty(ns, 'default', { enumerable: true, value: value });
/******/ 		if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
/******/ 		return ns;
/******/ 	};
/******/
/******/ 	// getDefaultExport function for compatibility with non-harmony modules
/******/ 	__webpack_require__.n = function(module) {
/******/ 		var getter = module && module.__esModule ?
/******/ 			function getDefault() { return module['default']; } :
/******/ 			function getModuleExports() { return module; };
/******/ 		__webpack_require__.d(getter, 'a', getter);
/******/ 		return getter;
/******/ 	};
/******/
/******/ 	// Object.prototype.hasOwnProperty.call
/******/ 	__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
/******/
/******/ 	// __webpack_public_path__
/******/ 	__webpack_require__.p = "";
/******/
/******/ 	var jsonpArray = window["webpackJsonp"] = window["webpackJsonp"] || [];
/******/ 	var oldJsonpFunction = jsonpArray.push.bind(jsonpArray);
/******/ 	jsonpArray.push = webpackJsonpCallback;
/******/ 	jsonpArray = jsonpArray.slice();
/******/ 	for(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);
/******/ 	var parentJsonpFunction = oldJsonpFunction;
/******/
/******/
/******/ 	// add entry module to deferred list
/******/ 	deferredModules.push([136,0]);
/******/ 	// run deferred modules when ready
/******/ 	return checkDeferredModules();
/******/ })
/************************************************************************/
/******/ ({

/***/ 0:
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
// ESM COMPAT FLAG
__webpack_require__.r(__webpack_exports__);

// EXPORTS
__webpack_require__.d(__webpack_exports__, "default", function() { return /* binding */ addStylesClient; });

// CONCATENATED MODULE: ./node_modules/vue-style-loader/lib/listToStyles.js
/**
 * Translates the list format produced by css-loader into something
 * easier to manipulate.
 */
function listToStyles(parentId, list) {
  var styles = [];
  var newStyles = {};

  for (var i = 0; i < list.length; i++) {
    var item = list[i];
    var id = item[0];
    var css = item[1];
    var media = item[2];
    var sourceMap = item[3];
    var part = {
      id: parentId + ':' + i,
      css: css,
      media: media,
      sourceMap: sourceMap
    };

    if (!newStyles[id]) {
      styles.push(newStyles[id] = {
        id: id,
        parts: [part]
      });
    } else {
      newStyles[id].parts.push(part);
    }
  }

  return styles;
}
// CONCATENATED MODULE: ./node_modules/vue-style-loader/lib/addStylesClient.js
/*
  MIT License http://www.opensource.org/licenses/mit-license.php
  Author Tobias Koppers @sokra
  Modified by Evan You @yyx990803
*/



var hasDocument = typeof document !== 'undefined'

if (typeof DEBUG !== 'undefined' && DEBUG) {
  if (!hasDocument) {
    throw new Error(
    'vue-style-loader cannot be used in a non-browser environment. ' +
    "Use { target: 'node' } in your Webpack config to indicate a server-rendering environment."
  ) }
}

/*
type StyleObject = {
  id: number;
  parts: Array<StyleObjectPart>
}

type StyleObjectPart = {
  css: string;
  media: string;
  sourceMap: ?string
}
*/

var stylesInDom = {/*
  [id: number]: {
    id: number,
    refs: number,
    parts: Array<(obj?: StyleObjectPart) => void>
  }
*/}

var head = hasDocument && (document.head || document.getElementsByTagName('head')[0])
var singletonElement = null
var singletonCounter = 0
var isProduction = false
var noop = function () {}
var options = null
var ssrIdKey = 'data-vue-ssr-id'

// Force single-tag solution on IE6-9, which has a hard limit on the # of <style>
// tags it will allow on a page
var isOldIE = typeof navigator !== 'undefined' && /msie [6-9]\b/.test(navigator.userAgent.toLowerCase())

function addStylesClient (parentId, list, _isProduction, _options) {
  isProduction = _isProduction

  options = _options || {}

  var styles = listToStyles(parentId, list)
  addStylesToDom(styles)

  return function update (newList) {
    var mayRemove = []
    for (var i = 0; i < styles.length; i++) {
      var item = styles[i]
      var domStyle = stylesInDom[item.id]
      domStyle.refs--
      mayRemove.push(domStyle)
    }
    if (newList) {
      styles = listToStyles(parentId, newList)
      addStylesToDom(styles)
    } else {
      styles = []
    }
    for (var i = 0; i < mayRemove.length; i++) {
      var domStyle = mayRemove[i]
      if (domStyle.refs === 0) {
        for (var j = 0; j < domStyle.parts.length; j++) {
          domStyle.parts[j]()
        }
        delete stylesInDom[domStyle.id]
      }
    }
  }
}

function addStylesToDom (styles /* Array<StyleObject> */) {
  for (var i = 0; i < styles.length; i++) {
    var item = styles[i]
    var domStyle = stylesInDom[item.id]
    if (domStyle) {
      domStyle.refs++
      for (var j = 0; j < domStyle.parts.length; j++) {
        domStyle.parts[j](item.parts[j])
      }
      for (; j < item.parts.length; j++) {
        domStyle.parts.push(addStyle(item.parts[j]))
      }
      if (domStyle.parts.length > item.parts.length) {
        domStyle.parts.length = item.parts.length
      }
    } else {
      var parts = []
      for (var j = 0; j < item.parts.length; j++) {
        parts.push(addStyle(item.parts[j]))
      }
      stylesInDom[item.id] = { id: item.id, refs: 1, parts: parts }
    }
  }
}

function createStyleElement () {
  var styleElement = document.createElement('style')
  styleElement.type = 'text/css'
  head.appendChild(styleElement)
  return styleElement
}

function addStyle (obj /* StyleObjectPart */) {
  var update, remove
  var styleElement = document.querySelector('style[' + ssrIdKey + '~="' + obj.id + '"]')

  if (styleElement) {
    if (isProduction) {
      // has SSR styles and in production mode.
      // simply do nothing.
      return noop
    } else {
      // has SSR styles but in dev mode.
      // for some reason Chrome can't handle source map in server-rendered
      // style tags - source maps in <style> only works if the style tag is
      // created and inserted dynamically. So we remove the server rendered
      // styles and inject new ones.
      styleElement.parentNode.removeChild(styleElement)
    }
  }

  if (isOldIE) {
    // use singleton mode for IE9.
    var styleIndex = singletonCounter++
    styleElement = singletonElement || (singletonElement = createStyleElement())
    update = applyToSingletonTag.bind(null, styleElement, styleIndex, false)
    remove = applyToSingletonTag.bind(null, styleElement, styleIndex, true)
  } else {
    // use multi-style-tag mode in all other cases
    styleElement = createStyleElement()
    update = applyToTag.bind(null, styleElement)
    remove = function () {
      styleElement.parentNode.removeChild(styleElement)
    }
  }

  update(obj)

  return function updateStyle (newObj /* StyleObjectPart */) {
    if (newObj) {
      if (newObj.css === obj.css &&
          newObj.media === obj.media &&
          newObj.sourceMap === obj.sourceMap) {
        return
      }
      update(obj = newObj)
    } else {
      remove()
    }
  }
}

var replaceText = (function () {
  var textStore = []

  return function (index, replacement) {
    textStore[index] = replacement
    return textStore.filter(Boolean).join('\n')
  }
})()

function applyToSingletonTag (styleElement, index, remove, obj) {
  var css = remove ? '' : obj.css

  if (styleElement.styleSheet) {
    styleElement.styleSheet.cssText = replaceText(index, css)
  } else {
    var cssNode = document.createTextNode(css)
    var childNodes = styleElement.childNodes
    if (childNodes[index]) styleElement.removeChild(childNodes[index])
    if (childNodes.length) {
      styleElement.insertBefore(cssNode, childNodes[index])
    } else {
      styleElement.appendChild(cssNode)
    }
  }
}

function applyToTag (styleElement, obj) {
  var css = obj.css
  var media = obj.media
  var sourceMap = obj.sourceMap

  if (media) {
    styleElement.setAttribute('media', media)
  }
  if (options.ssrId) {
    styleElement.setAttribute(ssrIdKey, obj.id)
  }

  if (sourceMap) {
    // https://developer.chrome.com/devtools/docs/javascript-debugging
    // this makes source maps inside style tags work properly in Chrome
    css += '\n/*# sourceURL=' + sourceMap.sources[0] + ' */'
    // http://stackoverflow.com/a/26603875
    css += '\n/*# sourceMappingURL=data:application/json;base64,' + btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))) + ' */'
  }

  if (styleElement.styleSheet) {
    styleElement.styleSheet.cssText = css
  } else {
    while (styleElement.firstChild) {
      styleElement.removeChild(styleElement.firstChild)
    }
    styleElement.appendChild(document.createTextNode(css))
  }
}


/***/ }),

/***/ 10:
/***/ (function(module, exports) {

// shim for using process in browser
var process = module.exports = {}; // cached from whatever global is present so that test runners that stub it
// don't break things.  But we need to wrap it in a try catch in case it is
// wrapped in strict mode code which doesn't define any globals.  It's inside a
// function because try/catches deoptimize in certain engines.

var cachedSetTimeout;
var cachedClearTimeout;

function defaultSetTimout() {
  throw new Error('setTimeout has not been defined');
}

function defaultClearTimeout() {
  throw new Error('clearTimeout has not been defined');
}

(function () {
  try {
    if (typeof setTimeout === 'function') {
      cachedSetTimeout = setTimeout;
    } else {
      cachedSetTimeout = defaultSetTimout;
    }
  } catch (e) {
    cachedSetTimeout = defaultSetTimout;
  }

  try {
    if (typeof clearTimeout === 'function') {
      cachedClearTimeout = clearTimeout;
    } else {
      cachedClearTimeout = defaultClearTimeout;
    }
  } catch (e) {
    cachedClearTimeout = defaultClearTimeout;
  }
})();

function runTimeout(fun) {
  if (cachedSetTimeout === setTimeout) {
    //normal enviroments in sane situations
    return setTimeout(fun, 0);
  } // if setTimeout wasn't available but was latter defined


  if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
    cachedSetTimeout = setTimeout;
    return setTimeout(fun, 0);
  }

  try {
    // when when somebody has screwed with setTimeout but no I.E. maddness
    return cachedSetTimeout(fun, 0);
  } catch (e) {
    try {
      // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
      return cachedSetTimeout.call(null, fun, 0);
    } catch (e) {
      // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error
      return cachedSetTimeout.call(this, fun, 0);
    }
  }
}

function runClearTimeout(marker) {
  if (cachedClearTimeout === clearTimeout) {
    //normal enviroments in sane situations
    return clearTimeout(marker);
  } // if clearTimeout wasn't available but was latter defined


  if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
    cachedClearTimeout = clearTimeout;
    return clearTimeout(marker);
  }

  try {
    // when when somebody has screwed with setTimeout but no I.E. maddness
    return cachedClearTimeout(marker);
  } catch (e) {
    try {
      // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally
      return cachedClearTimeout.call(null, marker);
    } catch (e) {
      // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.
      // Some versions of I.E. have different rules for clearTimeout vs setTimeout
      return cachedClearTimeout.call(this, marker);
    }
  }
}

var queue = [];
var draining = false;
var currentQueue;
var queueIndex = -1;

function cleanUpNextTick() {
  if (!draining || !currentQueue) {
    return;
  }

  draining = false;

  if (currentQueue.length) {
    queue = currentQueue.concat(queue);
  } else {
    queueIndex = -1;
  }

  if (queue.length) {
    drainQueue();
  }
}

function drainQueue() {
  if (draining) {
    return;
  }

  var timeout = runTimeout(cleanUpNextTick);
  draining = true;
  var len = queue.length;

  while (len) {
    currentQueue = queue;
    queue = [];

    while (++queueIndex < len) {
      if (currentQueue) {
        currentQueue[queueIndex].run();
      }
    }

    queueIndex = -1;
    len = queue.length;
  }

  currentQueue = null;
  draining = false;
  runClearTimeout(timeout);
}

process.nextTick = function (fun) {
  var args = new Array(arguments.length - 1);

  if (arguments.length > 1) {
    for (var i = 1; i < arguments.length; i++) {
      args[i - 1] = arguments[i];
    }
  }

  queue.push(new Item(fun, args));

  if (queue.length === 1 && !draining) {
    runTimeout(drainQueue);
  }
}; // v8 likes predictible objects


function Item(fun, array) {
  this.fun = fun;
  this.array = array;
}

Item.prototype.run = function () {
  this.fun.apply(null, this.array);
};

process.title = 'browser';
process.browser = true;
process.env = {};
process.argv = [];
process.version = ''; // empty string to avoid regexp issues

process.versions = {};

function noop() {}

process.on = noop;
process.addListener = noop;
process.once = noop;
process.off = noop;
process.removeListener = noop;
process.removeAllListeners = noop;
process.emit = noop;
process.prependListener = noop;
process.prependOnceListener = noop;

process.listeners = function (name) {
  return [];
};

process.binding = function (name) {
  throw new Error('process.binding is not supported');
};

process.cwd = function () {
  return '/';
};

process.chdir = function (dir) {
  throw new Error('process.chdir is not supported');
};

process.umask = function () {
  return 0;
};

/***/ }),

/***/ 136:
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
    if (k2 === undefined) k2 = k;
    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (function(o, m, k, k2) {
    if (k2 === undefined) k2 = k;
    o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
    Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
    o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
    if (mod && mod.__esModule) return mod;
    var result = {};
    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
    __setModuleDefault(result, mod);
    return result;
};
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
    return new (P || (P = Promise))(function (resolve, reject) {
        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
        step((generator = generator.apply(thisArg, _arguments || [])).next());
    });
};
var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
__webpack_require__(8);
__webpack_require__(137);
const jquery_1 = __importDefault(__webpack_require__(5));
__webpack_require__(139);
__webpack_require__(140);
const splide_1 = __importDefault(__webpack_require__(142));
const PDFJS = __importStar(__webpack_require__(143));
const fancybox_script_1 = __webpack_require__(39);
let pdfDocument;
let totalPages;
let currentPage;
function loadPdfPage(pageNumber) {
    return __awaiter(this, void 0, void 0, function* () {
        currentPage = pageNumber;
        const page = yield pdfDocument.getPage(currentPage);
        const canvas = jquery_1.default("#pdf")[0];
        const context = canvas.getContext("2d");
        const viewport = page.getViewport({ scale: 1 });
        canvas.width = viewport.width;
        canvas.height = viewport.height;
        const renderContext = {
            canvasContext: context,
            viewport: viewport
        };
        yield page.render(renderContext);
    });
}
function loadPdfDocument(url) {
    (() => __awaiter(this, void 0, void 0, function* () {
        PDFJS.GlobalWorkerOptions.workerSrc = "/lib/pdf/pdf.worker.js";
        pdfDocument = yield PDFJS.getDocument(url).promise;
        totalPages = pdfDocument.numPages;
        yield loadPdfPage(1);
        refreshControls();
    }))();
}
function refreshControls() {
    const previous = jquery_1.default("#pdf-previous");
    if (currentPage > 1) {
        previous.css("background-image", "/assets/img/pdf-previous.png");
    }
    else {
        previous.css("background-image", "/assets/img/pdf-previous-disabled.png");
    }
    const next = jquery_1.default("#pdf-next");
    if (totalPages > currentPage) {
        next.css("background-image", "/assets/img/pdf-next.png");
    }
    else {
        next.css("background-image", "/assets/img/pdf-next-disabled.png");
    }
    const state = jquery_1.default("#pdf-state");
    state.text(`Stránka ${currentPage} z ${totalPages}`);
}
function initPdf() {
    if (!jquery_1.default("#pdf").length)
        return;
    const canvas = jquery_1.default("#pdf");
    if (canvas.length) {
        const url = canvas.data("pdf-url");
        loadPdfDocument(url);
    }
    const previous = jquery_1.default("#pdf-previous");
    previous.on("click", (e) => {
        if (currentPage > 1) {
            loadPdfPage(currentPage - 1);
            refreshControls();
        }
        else {
            console.log("No previous page");
        }
    });
    const next = jquery_1.default("#pdf-next");
    next.on("click", (e) => {
        if (totalPages > currentPage) {
            loadPdfPage(currentPage + 1);
            refreshControls();
        }
        else {
            console.log("No next page");
        }
    });
}
function initGallery() {
    if (!jquery_1.default("#images").length)
        return;
    const images = jquery_1.default("#images");
    if (images.length) {
        const slider = new splide_1.default("#slider", {
            type: "fade",
            fixedHeight: "250px",
            pagination: true,
            arrows: true,
            cover: true
        }).mount();
        const secondarySlider = new splide_1.default("#thumbnails", {
            i18n: {
                prev: "Previous slide",
                next: "Next slide",
                first: "Go to first slide",
                last: "Go to last slide",
                slideX: "Go to slide %s",
                pageX: "Go to page %s",
                play: "Start autoplay",
                pause: "Pause autoplay"
            },
            rewind: true,
            fixedWidth: 100,
            fixedHeight: 64,
            isNavigation: true,
            gap: 10,
            focus: "center",
            pagination: false,
            arrows: false,
            cover: true,
            breakpoints: {
                "600": {
                    fixedWidth: 66,
                    fixedHeight: 40
                }
            }
        }).mount();
        slider.sync(secondarySlider).mount();
    }
}
function initHyvorTalk() {
    const pageDataElem = jquery_1.default("#page-data");
    const lang = pageDataElem.data("lang");
    let hyvorLang = "cs";
    if (lang === "en") {
        hyvorLang = "en-us";
    }
    const hyvorElem = jquery_1.default("#hyvor-talk-view");
    const url = hyvorElem.data("url");
    const id = hyvorElem.data("page-id");
    jquery_1.default("<script>")
        .attr("type", "text/javascript")
        .append("var HYVOR_TALK_WEBSITE = 2335;")
        .append(`var HYVOR_TALK_CONFIG = { url: "${url}", id: "${id}", language: "${hyvorLang}"};`)
        .appendTo("body");
    jquery_1.default("<script>")
        .attr("async", "")
        .attr("type", "text/javascript")
        .attr("src", "//talk.hyvor.com/web-api/embed")
        .appendTo("body");
}
jquery_1.default(() => {
    fancybox_script_1.initFancybox("photos");
    fancybox_script_1.initFancybox("video");
    initPdf();
    initGallery();
    // initHyvorTalk();
});


/***/ }),

/***/ 137:
/***/ (function(module, exports, __webpack_require__) {

// style-loader: Adds some css to the DOM by adding a <style> tag

// load the styles
var content = __webpack_require__(138);
if(typeof content === 'string') content = [[module.i, content, '']];
if(content.locals) module.exports = content.locals;
// add the styles to the DOM
var add = __webpack_require__(0).default
var update = add("6dbd4d1e", content, true, {});

/***/ }),

/***/ 138:
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
// extracted by mini-css-extract-plugin


/***/ }),

/***/ 139:
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
// extracted by mini-css-extract-plugin


/***/ }),

/***/ 140:
/***/ (function(module, exports, __webpack_require__) {

// style-loader: Adds some css to the DOM by adding a <style> tag

// load the styles
var content = __webpack_require__(141);
if(typeof content === 'string') content = [[module.i, content, '']];
if(content.locals) module.exports = content.locals;
// add the styles to the DOM
var add = __webpack_require__(0).default
var update = add("3aa44b49", content, true, {});

/***/ }),

/***/ 141:
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
// extracted by mini-css-extract-plugin


/***/ }),

/***/ 142:
/***/ (function(module, exports, __webpack_require__) {

/*!
 * Splide.js
 * Version  : 2.4.14
 * License  : MIT
 * Copyright: 2020 Naotoshi Fujita
 */
(function webpackUniversalModuleDefinition(root, factory) {
  if (true) module.exports = factory();else {}
})(window, function () {
  return (
    /******/
    function (modules) {
      // webpackBootstrap

      /******/
      // The module cache

      /******/
      var installedModules = {};
      /******/

      /******/
      // The require function

      /******/

      function __webpack_require__(moduleId) {
        /******/

        /******/
        // Check if module is in cache

        /******/
        if (installedModules[moduleId]) {
          /******/
          return installedModules[moduleId].exports;
          /******/
        }
        /******/
        // Create a new module (and put it into the cache)

        /******/


        var module = installedModules[moduleId] = {
          /******/
          i: moduleId,

          /******/
          l: false,

          /******/
          exports: {}
          /******/

        };
        /******/

        /******/
        // Execute the module function

        /******/

        modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
        /******/

        /******/
        // Flag the module as loaded

        /******/

        module.l = true;
        /******/

        /******/
        // Return the exports of the module

        /******/

        return module.exports;
        /******/
      }
      /******/

      /******/

      /******/
      // expose the modules object (__webpack_modules__)

      /******/


      __webpack_require__.m = modules;
      /******/

      /******/
      // expose the module cache

      /******/

      __webpack_require__.c = installedModules;
      /******/

      /******/
      // define getter function for harmony exports

      /******/

      __webpack_require__.d = function (exports, name, getter) {
        /******/
        if (!__webpack_require__.o(exports, name)) {
          /******/
          Object.defineProperty(exports, name, {
            enumerable: true,
            get: getter
          });
          /******/
        }
        /******/

      };
      /******/

      /******/
      // define __esModule on exports

      /******/


      __webpack_require__.r = function (exports) {
        /******/
        if (typeof Symbol !== 'undefined' && Symbol.toStringTag) {
          /******/
          Object.defineProperty(exports, Symbol.toStringTag, {
            value: 'Module'
          });
          /******/
        }
        /******/


        Object.defineProperty(exports, '__esModule', {
          value: true
        });
        /******/
      };
      /******/

      /******/
      // create a fake namespace object

      /******/
      // mode & 1: value is a module id, require it

      /******/
      // mode & 2: merge all properties of value into the ns

      /******/
      // mode & 4: return value when already ns object

      /******/
      // mode & 8|1: behave like require

      /******/


      __webpack_require__.t = function (value, mode) {
        /******/
        if (mode & 1) value = __webpack_require__(value);
        /******/

        if (mode & 8) return value;
        /******/

        if (mode & 4 && typeof value === 'object' && value && value.__esModule) return value;
        /******/

        var ns = Object.create(null);
        /******/

        __webpack_require__.r(ns);
        /******/


        Object.defineProperty(ns, 'default', {
          enumerable: true,
          value: value
        });
        /******/

        if (mode & 2 && typeof value != 'string') for (var key in value) __webpack_require__.d(ns, key, function (key) {
          return value[key];
        }.bind(null, key));
        /******/

        return ns;
        /******/
      };
      /******/

      /******/
      // getDefaultExport function for compatibility with non-harmony modules

      /******/


      __webpack_require__.n = function (module) {
        /******/
        var getter = module && module.__esModule ?
        /******/
        function getDefault() {
          return module['default'];
        } :
        /******/
        function getModuleExports() {
          return module;
        };
        /******/

        __webpack_require__.d(getter, 'a', getter);
        /******/


        return getter;
        /******/
      };
      /******/

      /******/
      // Object.prototype.hasOwnProperty.call

      /******/


      __webpack_require__.o = function (object, property) {
        return Object.prototype.hasOwnProperty.call(object, property);
      };
      /******/

      /******/
      // __webpack_public_path__

      /******/


      __webpack_require__.p = "";
      /******/

      /******/

      /******/
      // Load entry module and return exports

      /******/

      return __webpack_require__(__webpack_require__.s = 0);
      /******/
    }(
    /************************************************************************/

    /******/
    [
    /* 0 */

    /***/
    function (module, __webpack_exports__, __webpack_require__) {
      "use strict"; // ESM COMPAT FLAG

      __webpack_require__.r(__webpack_exports__); // EXPORTS


      __webpack_require__.d(__webpack_exports__, "default", function () {
        return (
          /* binding */
          module_Splide
        );
      }); // NAMESPACE OBJECT: ./src/js/constants/states.js


      var states_namespaceObject = {};

      __webpack_require__.r(states_namespaceObject);

      __webpack_require__.d(states_namespaceObject, "CREATED", function () {
        return CREATED;
      });

      __webpack_require__.d(states_namespaceObject, "MOUNTED", function () {
        return MOUNTED;
      });

      __webpack_require__.d(states_namespaceObject, "IDLE", function () {
        return IDLE;
      });

      __webpack_require__.d(states_namespaceObject, "MOVING", function () {
        return MOVING;
      });

      __webpack_require__.d(states_namespaceObject, "DESTROYED", function () {
        return DESTROYED;
      }); // CONCATENATED MODULE: ./src/js/core/event.js

      /**
       * The function for providing an Event object simply managing events.
       *
       * @author    Naotoshi Fujita
       * @copyright Naotoshi Fujita. All rights reserved.
       */

      /**
       * The function for providing an Event object simply managing events.
       */

      /* harmony default export */


      var core_event = function () {
        /**
         * Store all event data.
         *
         * @type {Array}
         */
        var data = [];
        var Event = {
          /**
           * Subscribe the given event(s).
           *
           * @param {string}   events  - An event name. Use space to separate multiple events.
           *                             Also, namespace is accepted by dot, such as 'resize.{namespace}'.
           * @param {function} handler - A callback function.
           * @param {Element}  elm     - Optional. Native event will be listened to when this arg is provided.
           * @param {Object}   options - Optional. Options for addEventListener.
           */
          on: function on(events, handler, elm, options) {
            if (elm === void 0) {
              elm = null;
            }

            if (options === void 0) {
              options = {};
            }

            events.split(' ').forEach(function (event) {
              if (elm) {
                elm.addEventListener(event, handler, options);
              }

              data.push({
                event: event,
                handler: handler,
                elm: elm,
                options: options
              });
            });
          },

          /**
           * Unsubscribe the given event(s).
           *
           * @param {string}  events - A event name or names split by space.
           * @param {Element} elm    - Optional. removeEventListener() will be called when this arg is provided.
           */
          off: function off(events, elm) {
            if (elm === void 0) {
              elm = null;
            }

            events.split(' ').forEach(function (event) {
              data = data.filter(function (item) {
                if (item && item.event === event && item.elm === elm) {
                  unsubscribe(item);
                  return false;
                }

                return true;
              });
            });
          },

          /**
           * Emit an event.
           * This method is only for custom events.
           *
           * @param {string}  event - An event name.
           * @param {*}       args  - Any number of arguments passed to handlers.
           */
          emit: function emit(event) {
            for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
              args[_key - 1] = arguments[_key];
            }

            data.forEach(function (item) {
              if (!item.elm && item.event.split('.')[0] === event) {
                item.handler.apply(item, args);
              }
            });
          },

          /**
           * Clear event data.
           */
          destroy: function destroy() {
            data.forEach(unsubscribe);
            data = [];
          }
        };
        /**
         * Remove the registered event listener.
         *
         * @param {Object} item - An object containing event data.
         */

        function unsubscribe(item) {
          if (item.elm) {
            item.elm.removeEventListener(item.event, item.handler, item.options);
          }
        }

        return Event;
      }; // CONCATENATED MODULE: ./src/js/core/state.js

      /**
       * The function providing a super simple state system.
       *
       * @author    Naotoshi Fujita
       * @copyright Naotoshi Fujita. All rights reserved.
       */

      /**
       * The function providing a super simple state system.
       *
       * @param {string|number} initialState - Provide the initial state value.
       */

      /* harmony default export */


      var state = function (initialState) {
        /**
         * Store the current state.
         *
         * @type {string|number}
         */
        var curr = initialState;
        return {
          /**
           * Change state.
           *
           * @param {string|number} state - A new state.
           */
          set: function set(state) {
            curr = state;
          },

          /**
           * Verify if the current state is given one or not.
           *
           * @param {string|number} state - A state name to be verified.
           *
           * @return {boolean} - True if the current state is the given one.
           */
          is: function is(state) {
            return state === curr;
          }
        };
      }; // CONCATENATED MODULE: ./src/js/utils/object.js


      function _extends() {
        _extends = Object.assign || function (target) {
          for (var i = 1; i < arguments.length; i++) {
            var source = arguments[i];

            for (var key in source) {
              if (Object.prototype.hasOwnProperty.call(source, key)) {
                target[key] = source[key];
              }
            }
          }

          return target;
        };

        return _extends.apply(this, arguments);
      }
      /**
       * Some utility functions related with Object, supporting IE.
       *
       * @author    Naotoshi Fujita
       * @copyright Naotoshi Fujita. All rights reserved.
       */


      var keys = Object.keys;
      /**
       * Iterate an object like Array.forEach.
       * IE doesn't support forEach of HTMLCollection.
       *
       * @param {Object}    obj       - An object.
       * @param {function}  callback  - A function handling each value. Arguments are value, property and index.
       */

      function each(obj, callback) {
        keys(obj).some(function (key, index) {
          return callback(obj[key], key, index);
        });
      }
      /**
       * Return values of the given object as an array.
       * IE doesn't support Object.values.
       *
       * @param {Object} obj - An object.
       *
       * @return {Array} - An array containing all values of the given object.
       */


      function values(obj) {
        return keys(obj).map(function (key) {
          return obj[key];
        });
      }
      /**
       * Check if the given subject is object or not.
       *
       * @param {*} subject - A subject to be verified.
       *
       * @return {boolean} - True if object, false otherwise.
       */


      function isObject(subject) {
        return typeof subject === 'object';
      }
      /**
       * Merge two objects deeply.
       *
       * @param {Object} to   - An object where "from" is merged.
       * @param {Object} from - An object merged to "to".
       *
       * @return {Object} - A merged object.
       */


      function merge(_ref, from) {
        var to = _extends({}, _ref);

        each(from, function (value, key) {
          if (isObject(value)) {
            if (!isObject(to[key])) {
              to[key] = {};
            }

            to[key] = merge(to[key], value);
          } else {
            to[key] = value;
          }
        });
        return to;
      }
      /**
       * Assign all properties "from" to "to" object.
       *
       * @param {Object} to   - An object where properties are assigned.
       * @param {Object} from - An object whose properties are assigned to "to".
       *
       * @return {Object} - An assigned object.
       */


      function object_assign(to, from) {
        keys(from).forEach(function (key) {
          if (!to[key]) {
            Object.defineProperty(to, key, Object.getOwnPropertyDescriptor(from, key));
          }
        });
        return to;
      } // CONCATENATED MODULE: ./src/js/utils/utils.js

      /**
       * A package of some miscellaneous utility functions.
       *
       * @author    Naotoshi Fujita
       * @copyright Naotoshi Fujita. All rights reserved.
       */

      /**
       * Convert the given value to array.
       *
       * @param {*} value - Any value.
       *
       * @return {*[]} - Array containing the given value.
       */


      function toArray(value) {
        return Array.isArray(value) ? value : [value];
      }
      /**
       * Check if the given value is between min and max.
       * Min will be returned when the value is less than min or max will do when greater than max.
       *
       * @param {number} value - A number to be checked.
       * @param {number} m1    - Minimum or maximum number.
       * @param {number} m2    - Maximum or minimum number.
       *
       * @return {number} - A value itself, min or max.
       */


      function between(value, m1, m2) {
        return Math.min(Math.max(value, m1 > m2 ? m2 : m1), m1 > m2 ? m1 : m2);
      }
      /**
       * The sprintf method with minimum functionality.
       *
       * @param {string}       format       - The string format.
       * @param {string|Array} replacements - Replacements accepting multiple arguments.
       *
       * @returns {string} - Converted string.
       */


      function sprintf(format, replacements) {
        var i = 0;
        return format.replace(/%s/g, function () {
          return toArray(replacements)[i++];
        });
      }
      /**
       * Append px unit to the given subject if necessary.
       *
       * @param {number|string} value - A value that may not include an unit.
       *
       * @return {string} - If the value is string, return itself.
       *                    If number, do value + "px". An empty string, otherwise.
       */


      function unit(value) {
        var type = typeof value;

        if (type === 'number' && value > 0) {
          return parseFloat(value) + 'px';
        }

        return type === 'string' ? value : '';
      }
      /**
       * Pad start with 0.
       *
       * @param {number} number - A number to be filled with 0.
       *
       * @return {string|number} - Padded number.
       */


      function pad(number) {
        return number < 10 ? '0' + number : number;
      }
      /**
       * Convert the given value to pixel.
       *
       * @param {Element}       root  - Root element where a dummy div is appended.
       * @param {string|number} value - CSS value to be converted, such as 10rem.
       *
       * @return {number} - Pixel.
       */


      function toPixel(root, value) {
        if (typeof value === 'string') {
          var div = create('div', {});
          applyStyle(div, {
            position: 'absolute',
            width: value
          });
          append(root, div);
          value = div.clientWidth;
          dom_remove(div);
        }

        return +value || 0;
      } // CONCATENATED MODULE: ./src/js/utils/dom.js

      /**
       * Some utility functions related with DOM.
       *
       * @author    Naotoshi Fujita
       * @copyright Naotoshi Fujita. All rights reserved.
       */

      /**
       * Find the first element matching the given selector.
       * Be aware that all selectors after a space are ignored.
       *
       * @param {Element|Node}  elm       - An ancestor element.
       * @param {string}        selector  - DOMString.
       *
       * @return {Element|null} - A found element or null.
       */


      function find(elm, selector) {
        return elm ? elm.querySelector(selector.split(' ')[0]) : null;
      }
      /**
       * Find a first child having the given tag or class name.
       *
       * @param {Element} parent         - A parent element.
       * @param {string}  tagOrClassName - A tag or class name.
       *
       * @return {Element|undefined} - A found element on success or undefined on failure.
       */


      function child(parent, tagOrClassName) {
        return children(parent, tagOrClassName)[0];
      }
      /**
       * Return chile elements that matches the provided tag or class name.
       *
       * @param {Element} parent         - A parent element.
       * @param {string}  tagOrClassName - A tag or class name.
       *
       * @return {Element[]} - Found elements.
       */


      function children(parent, tagOrClassName) {
        if (parent) {
          return values(parent.children).filter(function (child) {
            return hasClass(child, tagOrClassName.split(' ')[0]) || child.tagName === tagOrClassName;
          });
        }

        return [];
      }
      /**
       * Create an element with some optional attributes.
       *
       * @param {string} tag   - A tag name.
       * @param {Object} attrs - An object any attribute pairs of name and value.
       *
       * @return {Element} - A created element.
       */


      function create(tag, attrs) {
        var elm = document.createElement(tag);
        each(attrs, function (value, key) {
          return setAttribute(elm, key, value);
        });
        return elm;
      }
      /**
       * Convert HTML string to DOM node.
       *
       * @param {string} html - HTML string.
       *
       * @return {Node} - A created node.
       */


      function domify(html) {
        var div = create('div', {});
        div.innerHTML = html;
        return div.firstChild;
      }
      /**
       * Remove a given element from a DOM tree.
       *
       * @param {Element|Element[]} elms - Element(s) to be removed.
       */


      function dom_remove(elms) {
        toArray(elms).forEach(function (elm) {
          if (elm) {
            var parent = elm.parentElement;
            parent && parent.removeChild(elm);
          }
        });
      }
      /**
       * Append a child to a given element.
       *
       * @param {Element} parent - A parent element.
       * @param {Element} child  - An element to be appended.
       */


      function append(parent, child) {
        if (parent) {
          parent.appendChild(child);
        }
      }
      /**
       * Insert an element before the reference element.
       *
       * @param {Element|Node} ref - A reference element.
       * @param {Element}      elm - An element to be inserted.
       */


      function before(elm, ref) {
        if (elm && ref) {
          var parent = ref.parentElement;
          parent && parent.insertBefore(elm, ref);
        }
      }
      /**
       * Apply styles to the given element.
       *
       * @param {Element} elm     - An element where styles are applied.
       * @param {Object}  styles  - Object containing styles.
       */


      function applyStyle(elm, styles) {
        if (elm) {
          each(styles, function (value, prop) {
            if (value !== null) {
              elm.style[prop] = value;
            }
          });
        }
      }
      /**
       * Add or remove classes to/from the element.
       * This function is for internal usage.
       *
       * @param {Element}         elm     - An element where classes are added.
       * @param {string|string[]} classes - Class names being added.
       * @param {boolean}         remove  - Whether to remove or add classes.
       */


      function addOrRemoveClasses(elm, classes, remove) {
        if (elm) {
          toArray(classes).forEach(function (name) {
            if (name) {
              elm.classList[remove ? 'remove' : 'add'](name);
            }
          });
        }
      }
      /**
       * Add classes to the element.
       *
       * @param {Element}          elm     - An element where classes are added.
       * @param {string|string[]}  classes - Class names being added.
       */


      function addClass(elm, classes) {
        addOrRemoveClasses(elm, classes, false);
      }
      /**
       * Remove a class from the element.
       *
       * @param {Element}         elm     - An element where classes are removed.
       * @param {string|string[]} classes - A class name being removed.
       */


      function removeClass(elm, classes) {
        addOrRemoveClasses(elm, classes, true);
      }
      /**
       * Verify if the provided element has the class or not.
       *
       * @param {Element} elm       - An element.
       * @param {string}  className - A class name.
       *
       * @return {boolean} - True if the element has the class or false if not.
       */


      function hasClass(elm, className) {
        return !!elm && elm.classList.contains(className);
      }
      /**
       * Set attribute to the given element.
       *
       * @param {Element}                 elm   - An element where an attribute is assigned.
       * @param {string}                  name  - Attribute name.
       * @param {string|number|boolean}   value - Attribute value.
       */


      function setAttribute(elm, name, value) {
        if (elm) {
          elm.setAttribute(name, value);
        }
      }
      /**
       * Get attribute from the given element.
       *
       * @param {Element} elm  - An element where an attribute is assigned.
       * @param {string}  name - Attribute name.
       *
       * @return {string} - The value of the given attribute if available. An empty string if not.
       */


      function getAttribute(elm, name) {
        return elm ? elm.getAttribute(name) : '';
      }
      /**
       * Remove attribute from the given element.
       *
       * @param {Element|Element[]} elms  - An element where an attribute is removed.
       * @param {string|string[]}      names - Attribute name.
       */


      function removeAttribute(elms, names) {
        toArray(names).forEach(function (name) {
          toArray(elms).forEach(function (elm) {
            return elm && elm.removeAttribute(name);
          });
        });
      }
      /**
       * Return the Rect object of the provided object.
       *
       * @param {Element} elm - An element.
       *
       * @return {ClientRect|DOMRect} - A rect object.
       */


      function getRect(elm) {
        return elm.getBoundingClientRect();
      }
      /**
       * Trigger the given callback after all images contained by the element are loaded.
       *
       * @param {Element}  elm      - Element that may contain images.
       * @param {Function} callback - Callback function fired right after all images are loaded.
       */


      function dom_loaded(elm, callback) {
        var images = elm.querySelectorAll('img');
        var length = images.length;

        if (length) {
          var count = 0;
          each(images, function (img) {
            img.onload = img.onerror = function () {
              if (++count === length) {
                callback();
              }
            };
          });
        } else {
          // Trigger the callback immediately if there is no image.
          callback();
        }
      } // CONCATENATED MODULE: ./src/js/constants/types.js

      /**
       * Export slider types.
       *
       * @author    Naotoshi Fujita
       * @copyright Naotoshi Fujita. All rights reserved.
       */

      /**
       * Normal slider.
       *
       * @type {string}
       */


      var SLIDE = 'slide';
      /**
       * Loop after the last slide and before the first one.
       *
       * @type {string}
       */

      var LOOP = 'loop';
      /**
       * The track doesn't move.
       *
       * @type {string}
       */

      var FADE = 'fade'; // CONCATENATED MODULE: ./src/js/transitions/slide/index.js

      /**
       * The component for general slide effect transition.
       *
       * @author    Naotoshi Fujita
       * @copyright Naotoshi Fujita. All rights reserved.
       */

      /**
       * The component for general slide effect transition.
       *
       * @param {Splide} Splide     - A Splide instance.
       * @param {Object} Components - An object containing components.
       *
       * @return {Object} - The component object.
       */

      /* harmony default export */

      var transitions_slide = function (Splide, Components) {
        /**
         * Hold the list element.
         *
         * @type {Element}
         */
        var list;
        /**
         * Hold the onEnd callback function.
         *
         * @type {function}
         */

        var endCallback;
        return {
          /**
           * Called when the component is mounted.
           */
          mount: function mount() {
            list = Components.Elements.list;
            Splide.on('transitionend', function (e) {
              if (e.target === list && endCallback) {
                endCallback();
              }
            }, list);
          },

          /**
           * Start transition.
           *
           * @param {number}   destIndex - Destination slide index that might be clone's.
           * @param {number}   newIndex  - New index.
           * @param {number}   prevIndex - Previous index.
           * @param {Object}   coord     - Destination coordinates.
           * @param {function} done      - Callback function must be invoked when transition is completed.
           */
          start: function start(destIndex, newIndex, prevIndex, coord, done) {
            var options = Splide.options;
            var edgeIndex = Components.Controller.edgeIndex;
            var speed = options.speed;
            endCallback = done;

            if (Splide.is(SLIDE)) {
              if (prevIndex === 0 && newIndex >= edgeIndex || prevIndex >= edgeIndex && newIndex === 0) {
                speed = options.rewindSpeed || speed;
              }
            }

            applyStyle(list, {
              transition: "transform " + speed + "ms " + options.easing,
              transform: "translate(" + coord.x + "px," + coord.y + "px)"
            });
          }
        };
      }; // CONCATENATED MODULE: ./src/js/transitions/fade/index.js

      /**
       * The component for fade transition.
       *
       * @author    Naotoshi Fujita
       * @copyright Naotoshi Fujita. All rights reserved.
       */

      /**
       * The component for fade transition.
       *
       * @param {Splide} Splide     - A Splide instance.
       * @param {Object} Components - An object containing components.
       *
       * @return {Object} - The component object.
       */

      /* harmony default export */


      var fade = function (Splide, Components) {
        var Fade = {
          /**
           * Called when the component is mounted.
           * Apply transition style to the first slide.
           */
          mount: function mount() {
            apply(Splide.index);
          },

          /**
           * Start transition.
           *
           * @param {number}    destIndex - Destination slide index that might be clone's.
           * @param {number}    newIndex  - New index.
           * @param {number}    prevIndex - Previous index.
           * @param {Object}    coord     - Destination coordinates.
           * @param {function}  done      - Callback function must be invoked when transition is completed.
           */
          start: function start(destIndex, newIndex, prevIndex, coord, done) {
            var track = Components.Elements.track;
            applyStyle(track, {
              height: unit(track.clientHeight)
            });
            apply(newIndex);
            setTimeout(function () {
              done();
              applyStyle(track, {
                height: ''
              });
            });
          }
        };
        /**
         * Apply transition style to the slide specified by the given index.
         *
         * @param {number} index - A slide index.
         */

        function apply(index) {
          var options = Splide.options;
          applyStyle(Components.Elements.slides[index], {
            transition: "opacity " + options.speed + "ms " + options.easing
          });
        }

        return Fade;
      }; // CONCATENATED MODULE: ./src/js/transitions/index.js

      /**
       * Export transition components.
       *
       * @author    Naotoshi Fujita
       * @copyright Naotoshi Fujita. All rights reserved.
       */
      // CONCATENATED MODULE: ./src/js/core/composer.js

      /**
       * Provide a function for composing components.
       *
       * @author    Naotoshi Fujita
       * @copyright Naotoshi Fujita. All rights reserved.
       */

      /**
       * Compose components.
       *
       * @param {Splide}   Splide     - Splide instance.
       * @param {Object}   Components - Additional components.
       * @param {function} Transition - Change component for transition.
       *
       * @return {Object} - An object containing all components.
       */


      function compose(Splide, Components, Transition) {
        var components = {};
        each(Components, function (Component, name) {
          components[name] = Component(Splide, components, name.toLowerCase());
        });

        if (!Transition) {
          Transition = Splide.is(FADE) ? fade : transitions_slide;
        }

        components.Transition = Transition(Splide, components);
        return components;
      } // CONCATENATED MODULE: ./src/js/utils/error.js

      /**
       * Utility functions for outputting logs.
       *
       * @author    Naotoshi Fujita
       * @copyright Naotoshi Fujita. All rights reserved.
       */

      /**
       * Prefix of an error massage.
       *
       * @type {string}
       */


      var MESSAGE_PREFIX = '[SPLIDE]';
      /**
       * Display an error message on the browser console.
       *
       * @param {string} message - An error message.
       */

      function error_error(message) {
        console.error(MESSAGE_PREFIX + " " + message);
      }
      /**
       * Check existence of the given object and throw an error if it doesn't.
       *
       * @throws {Error}
       *
       * @param {*}      subject - A subject to be confirmed.
       * @param {string} message - An error message.
       */


      function exist(subject, message) {
        if (!subject) {
          throw new Error(message);
        }
      } // CONCATENATED MODULE: ./src/js/constants/classes.js

      /**
       * Export class names.
       *
       * @author    Naotoshi Fujita
       * @copyright Naotoshi Fujita. All rights reserved.
       */

      /**
       * A root class name.
       *
       * @type {string}
       */


      var ROOT = 'splide';
      /**
       * The definition table of all classes for elements.
       * They might be modified by options.
       *
       * @type {Object}
       */

      var ELEMENT_CLASSES = {
        root: ROOT,
        slider: ROOT + "__slider",
        track: ROOT + "__track",
        list: ROOT + "__list",
        slide: ROOT + "__slide",
        container: ROOT + "__slide__container",
        arrows: ROOT + "__arrows",
        arrow: ROOT + "__arrow",
        prev: ROOT + "__arrow--prev",
        next: ROOT + "__arrow--next",
        pagination: ROOT + "__pagination",
        page: ROOT + "__pagination__page",
        clone: ROOT + "__slide--clone",
        progress: ROOT + "__progress",
        bar: ROOT + "__progress__bar",
        autoplay: ROOT + "__autoplay",
        play: ROOT + "__play",
        pause: ROOT + "__pause",
        spinner: ROOT + "__spinner",
        sr: ROOT + "__sr"
      };
      /**
       * Definitions of status classes.
       *
       * @type {Object}
       */

      var STATUS_CLASSES = {
        active: 'is-active',
        visible: 'is-visible',
        loading: 'is-loading'
      }; // CONCATENATED MODULE: ./src/js/constants/i18n.js

      /**
       * Export i18n texts as object.
       *
       * @author    Naotoshi Fujita
       * @copyright Naotoshi Fujita. All rights reserved.
       */

      /**
       * Texts for i18n.
       *
       * @type {Object}
       */

      var I18N = {
        prev: 'Previous slide',
        next: 'Next slide',
        first: 'Go to first slide',
        last: 'Go to last slide',
        slideX: 'Go to slide %s',
        pageX: 'Go to page %s',
        play: 'Start autoplay',
        pause: 'Pause autoplay'
      }; // CONCATENATED MODULE: ./src/js/constants/defaults.js

      /**
       * Export default options.
       *
       * @author    Naotoshi Fujita
       * @copyright Naotoshi Fujita. All rights reserved.
       */

      var DEFAULTS = {
        /**
         * Determine a slider type.
         * - 'slide': Regular slider.
         * - 'loop' : Carousel slider.
         * - 'fade' : Change slides with fade transition. perPage, drag options are ignored.
         *
         * @type {string}
         */
        type: 'slide',

        /**
         * Whether to rewind a slider before the first slide or after the last one.
         * In "loop" mode, this option is ignored.
         *
         * @type {boolean}
         */
        rewind: false,

        /**
         * Transition speed in milliseconds.
         *
         * @type {number}
         */
        speed: 400,

        /**
         * Transition speed on rewind in milliseconds.
         *
         * @type {number}
         */
        rewindSpeed: 0,

        /**
         * Whether to prevent any actions while a slider is transitioning.
         * If false, navigation, drag and swipe work while the slider is running.
         * Even so, it will be forced to wait for transition in some cases in the loop mode to shift a slider.
         *
         * @type {boolean}
         */
        waitForTransition: true,

        /**
         * Define slider max width.
         *
         * @type {number}
         */
        width: 0,

        /**
         * Define slider height.
         *
         * @type {number}
         */
        height: 0,

        /**
         * Fix width of slides. CSS format is allowed such as 10em, 80% or 80vw.
         * perPage number will be ignored when this option is falsy.
         *
         * @type {number|string}
         */
        fixedWidth: 0,

        /**
         * Fix height of slides. CSS format is allowed such as 10em, 80vh but % unit is not accepted.
         * heightRatio option will be ignored when this option is falsy.
         *
         * @type {number|string}
         */
        fixedHeight: 0,

        /**
         * Determine height of slides by ratio to a slider width.
         * This will be ignored when the fixedHeight is provided.
         *
         * @type {number}
         */
        heightRatio: 0,

        /**
         * If true, slide width will be determined by the element width itself.
         * - perPage/perMove should be 1.
         *
         * @type {boolean}
         */
        autoWidth: false,

        /**
         * If true, slide height will be determined by the element width itself.
         * - perPage/perMove should be 1.
         *
         * @type {boolean}
         */
        autoHeight: false,

        /**
         * Determine how many slides should be displayed per page.
         *
         * @type {number}
         */
        perPage: 1,

        /**
         * Determine how many slides should be moved when a slider goes to next or perv.
         *
         * @type {number}
         */
        perMove: 0,

        /**
         * Determine manually how many clones should be generated on the left and right side.
         * The total number of clones will be twice of this number.
         *
         * @type {number}
         */
        clones: 0,

        /**
         * Start index.
         *
         * @type {number}
         */
        start: 0,

        /**
         * Determine which slide should be focused if there are multiple slides in a page.
         * A string "center" is acceptable for centering slides.
         *
         * @type {boolean|number|string}
         */
        focus: false,

        /**
         * Gap between slides. CSS format is allowed such as 1em.
         *
         * @type {number|string}
         */
        gap: 0,

        /**
         * Set padding-left/right in horizontal mode or padding-top/bottom in vertical one.
         * Give a single value to set a same size for both sides or
         * do an object for different sizes.
         * Also, CSS format is allowed such as 1em.
         *
         * @example
         * - 10: Number
         * - '1em': CSS format.
         * - { left: 0, right: 20 }: Object for different sizes in horizontal mode.
         * - { top: 0, bottom: 20 }: Object for different sizes in vertical mode.
         *
         * @type {number|string|Object}
         */
        padding: 0,

        /**
         * Whether to append arrows.
         *
         * @type {boolean}
         */
        arrows: true,

        /**
         * Change the arrow SVG path like 'm7.61 0.807-2.12...'.
         *
         * @type {string}
         */
        arrowPath: '',

        /**
         * Whether to append pagination(indicator dots) or not.
         *
         * @type {boolean}
         */
        pagination: true,

        /**
         * Activate autoplay.
         *
         * @type {boolean}
         */
        autoplay: false,

        /**
         * Autoplay interval in milliseconds.
         *
         * @type {number}
         */
        interval: 5000,

        /**
         * Whether to stop autoplay when a slider is hovered.
         *
         * @type {boolean}
         */
        pauseOnHover: true,

        /**
         * Whether to stop autoplay when a slider elements are focused.
         * True is recommended for accessibility.
         *
         * @type {boolean}
         */
        pauseOnFocus: true,

        /**
         * Whether to reset progress of the autoplay timer when resumed.
         *
         * @type {boolean}
         */
        resetProgress: true,

        /**
         * Loading images lazily.
         * Image src must be provided by a data-splide-lazy attribute.
         *
         * - false: Do nothing.
         * - 'nearby': Only images around an active slide will be loaded.
         * - 'sequential': All images will be sequentially loaded.
         *
         * @type {boolean|string}
         */
        lazyLoad: false,

        /**
         * This option works only when a lazyLoad option is "nearby".
         * Determine how many pages(not slides) around an active slide should be loaded beforehand.
         *
         * @type {number}
         */
        preloadPages: 1,

        /**
         * Easing for CSS transition. For example, linear, ease or cubic-bezier().
         *
         * @type {string}
         */
        easing: 'cubic-bezier(.42,.65,.27,.99)',

        /**
         * Whether to enable keyboard shortcuts
         * - true or 'global': Listen to keydown event of the document.
         * - 'focused': Listen to the keydown event of the slider root element. tabindex="0" will be added to the element.
         * - false: Disable keyboard shortcuts.
         *
         * @type {boolean|string}
         */
        keyboard: 'global',

        /**
         * Whether to allow mouse drag and touch swipe.
         *
         * @type {boolean}
         */
        drag: true,

        /**
         * The angle threshold for drag.
         * The slider starts moving only when the drag angle is less than this threshold.
         *
         * @type {number}
         */
        dragAngleThreshold: 30,

        /**
         * Distance threshold for determining if the action is "flick" or "swipe".
         * When a drag distance is over this value, the action will be treated as "swipe", not "flick".
         *
         * @type {number}
         */
        swipeDistanceThreshold: 150,

        /**
         * Velocity threshold for determining if the action is "flick" or "swipe".
         * Around 0.5 is recommended.
         *
         * @type {number}
         */
        flickVelocityThreshold: .6,

        /**
         * Determine power of flick. The larger number this is, the farther a slider runs by flick.
         * Around 500 is recommended.
         *
         * @type {number}
         */
        flickPower: 600,

        /**
         * Limit a number of pages to move by flick.
         *
         * @type {number}
         */
        flickMaxPages: 1,

        /**
         * Slider direction.
         * - 'ltr': Left to right.
         * - 'rtl': Right to left.
         * - 'ttb': Top to bottom.
         *
         * @type {string}
         */
        direction: 'ltr',

        /**
         * Set img src to background-image of its parent element.
         * Images with various sizes can be displayed as same dimension without cropping work.
         * fixedHeight or heightRatio is required.
         *
         * @type {boolean}
         */
        cover: false,

        /**
         * Whether to enable accessibility(aria and screen reader texts) or not.
         *
         * @type {boolean}
         */
        accessibility: true,

        /**
         * Whether to add tabindex="0" to visible slides or not.
         *
         * @type {boolean}
         */
        slideFocus: true,

        /**
         * Determine if a slider is navigation for another.
         * Use "sync" API to synchronize two sliders.
         *
         * @type {boolean}
         */
        isNavigation: false,

        /**
         * Whether to trim spaces before the fist slide or after the last one when "focus" is not 0.
         *
         * @type {boolean}
         */
        trimSpace: true,

        /**
         * The "is-active" class is added after transition as default.
         * If true, it will be added before move.
         *
         * @type {boolean}
         */
        updateOnMove: false,

        /**
         * Throttle duration in milliseconds for the resize event.
         *
         * @type {number}
         */
        throttle: 100,

        /**
         * Whether to destroy a slider or not.
         *
         * @type {boolean}
         */
        destroy: false,

        /**
         * Options for specific breakpoints.
         *
         * @example
         * {
         *   1000: {
         *     perPage: 3,
         *     gap: 20
         *   },
         *   600: {
         *     perPage: 1,
         *     gap: 5,
         *   }
         * }
         *
         * @type {boolean|Object}
         */
        breakpoints: false,

        /**
         * Collection of class names.
         *
         * @see ./classes.js
         *
         * @type {Object}
         */
        classes: ELEMENT_CLASSES,

        /**
         * Collection of i18n texts.
         *
         * @see ./i18n.js
         *
         * @type {Object}
         */
        i18n: I18N
      }; // CONCATENATED MODULE: ./src/js/constants/states.js

      /**
       * Export state constants.
       *
       * @author    Naotoshi Fujita
       * @copyright Naotoshi Fujita. All rights reserved.
       */

      /**
       * Splide has been just created.
       *
       * @type {number}
       */

      var CREATED = 1;
      /**
       * All components have been mounted and initialized.
       *
       * @type {number}
       */

      var MOUNTED = 2;
      /**
       * Splide is ready for transition.
       *
       * @type {number}
       */

      var IDLE = 3;
      /**
       * Splide is moving.
       *
       * @type {number}
       */

      var MOVING = 4;
      /**
       * Splide is moving.
       *
       * @type {number}
       */

      var DESTROYED = 5; // CONCATENATED MODULE: ./src/js/splide.js

      function _defineProperties(target, props) {
        for (var i = 0; i < props.length; i++) {
          var descriptor = props[i];
          descriptor.enumerable = descriptor.enumerable || false;
          descriptor.configurable = true;
          if ("value" in descriptor) descriptor.writable = true;
          Object.defineProperty(target, descriptor.key, descriptor);
        }
      }

      function _createClass(Constructor, protoProps, staticProps) {
        if (protoProps) _defineProperties(Constructor.prototype, protoProps);
        if (staticProps) _defineProperties(Constructor, staticProps);
        return Constructor;
      }
      /**
       * The main class for applying Splide to an element.
       *
       * @author    Naotoshi Fujita
       * @copyright Naotoshi Fujita. All rights reserved.
       */

      /**
       * The main class for applying Splide to an element,
       * providing some APIs to control the behavior.
       */


      var splide_Splide = /*#__PURE__*/function () {
        /**
         * Splide constructor.
         *
         * @throws {Error} When the given root element or selector is invalid.
         *
         * @param {Element|string}  root       - A selector for a root element or an element itself.
         * @param {Object}          options    - Optional. Options to change default behaviour.
         * @param {Object}          Components - Optional. Components.
         */
        function Splide(root, options, Components) {
          if (options === void 0) {
            options = {};
          }

          if (Components === void 0) {
            Components = {};
          }

          this.root = root instanceof Element ? root : document.querySelector(root);
          exist(this.root, 'An invalid element/selector was given.');
          this.Components = null;
          this.Event = core_event();
          this.State = state(CREATED);
          this.STATES = states_namespaceObject;
          this._o = merge(DEFAULTS, options);
          this._i = 0;
          this._c = Components;
          this._e = {}; // Extensions

          this._t = null; // Transition
        }
        /**
         * Compose and mount components.
         *
         * @param {Object}   Extensions - Optional. Additional components.
         * @param {function} Transition - Optional. Set a custom transition component.
         *
         * @return {Splide|undefined} - This instance or undefined if an exception occurred.
         */


        var _proto = Splide.prototype;

        _proto.mount = function mount(Extensions, Transition) {
          var _this = this;

          if (Extensions === void 0) {
            Extensions = this._e;
          }

          if (Transition === void 0) {
            Transition = this._t;
          } // Reset the state.


          this.State.set(CREATED);
          this._e = Extensions;
          this._t = Transition;
          this.Components = compose(this, merge(this._c, Extensions), Transition);

          try {
            each(this.Components, function (component, key) {
              var required = component.required;

              if (required === undefined || required) {
                component.mount && component.mount();
              } else {
                delete _this.Components[key];
              }
            });
          } catch (e) {
            error_error(e.message);
            return;
          }

          var State = this.State;
          State.set(MOUNTED);
          each(this.Components, function (component) {
            component.mounted && component.mounted();
          });
          this.emit('mounted');
          State.set(IDLE);
          this.emit('ready');
          applyStyle(this.root, {
            visibility: 'visible'
          });
          this.on('move drag', function () {
            return State.set(MOVING);
          }).on('moved dragged', function () {
            return State.set(IDLE);
          });
          return this;
        }
        /**
         * Set sync target.
         *
         * @param {Splide} splide - A Splide instance.
         *
         * @return {Splide} - This instance.
         */
        ;

        _proto.sync = function sync(splide) {
          this.sibling = splide;
          return this;
        }
        /**
         * Register callback fired on the given event(s).
         *
         * @param {string}   events  - An event name. Use space to separate multiple events.
         *                             Also, namespace is accepted by dot, such as 'resize.{namespace}'.
         * @param {function} handler - A callback function.
         * @param {Element}  elm     - Optional. Native event will be listened to when this arg is provided.
         * @param {Object}   options - Optional. Options for addEventListener.
         *
         * @return {Splide} - This instance.
         */
        ;

        _proto.on = function on(events, handler, elm, options) {
          if (elm === void 0) {
            elm = null;
          }

          if (options === void 0) {
            options = {};
          }

          this.Event.on(events, handler, elm, options);
          return this;
        }
        /**
         * Unsubscribe the given event.
         *
         * @param {string}  events - A event name.
         * @param {Element} elm    - Optional. removeEventListener() will be called when this arg is provided.
         *
         * @return {Splide} - This instance.
         */
        ;

        _proto.off = function off(events, elm) {
          if (elm === void 0) {
            elm = null;
          }

          this.Event.off(events, elm);
          return this;
        }
        /**
         * Emit an event.
         *
         * @param {string} event - An event name.
         * @param {*}      args  - Any number of arguments passed to handlers.
         */
        ;

        _proto.emit = function emit(event) {
          var _this$Event;

          for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
            args[_key - 1] = arguments[_key];
          }

          (_this$Event = this.Event).emit.apply(_this$Event, [event].concat(args));

          return this;
        }
        /**
         * Go to the slide specified by the given control.
         *
         * @param {string|number} control - A control pattern.
         * @param {boolean}       wait    - Optional. Whether to wait for transition.
         */
        ;

        _proto.go = function go(control, wait) {
          if (wait === void 0) {
            wait = this.options.waitForTransition;
          }

          if (this.State.is(IDLE) || this.State.is(MOVING) && !wait) {
            this.Components.Controller.go(control, false);
          }

          return this;
        }
        /**
         * Verify whether the slider type is the given one or not.
         *
         * @param {string} type - A slider type.
         *
         * @return {boolean} - True if the slider type is the provided type or false if not.
         */
        ;

        _proto.is = function is(type) {
          return type === this._o.type;
        }
        /**
         * Insert a slide.
         *
         * @param {Element|string} slide - A slide element to be added.
         * @param {number}         index - A slide will be added at the position.
         */
        ;

        _proto.add = function add(slide, index) {
          if (index === void 0) {
            index = -1;
          }

          this.Components.Elements.add(slide, index, this.refresh.bind(this));
          return this;
        }
        /**
         * Remove the slide designated by the index.
         *
         * @param {number} index - A slide index.
         */
        ;

        _proto.remove = function remove(index) {
          this.Components.Elements.remove(index);
          this.refresh();
          return this;
        }
        /**
         * Destroy all Slide objects and clones and recreate them again.
         */
        ;

        _proto.refresh = function refresh() {
          this.emit('refresh').emit('resize');
          return this;
        }
        /**
         * Destroy the Splide.
         * "Completely" boolean is mainly for breakpoints.
         *
         * @param {boolean} completely - Destroy completely.
         */
        ;

        _proto.destroy = function destroy(completely) {
          var _this2 = this;

          if (completely === void 0) {
            completely = true;
          } // Postpone destroy because it should be done after mount.


          if (this.State.is(CREATED)) {
            this.on('ready', function () {
              return _this2.destroy(completely);
            });
            return;
          }

          values(this.Components).reverse().forEach(function (component) {
            component.destroy && component.destroy(completely);
          });
          this.emit('destroy', completely); // Destroy all event handlers, including ones for native events.

          this.Event.destroy();
          this.State.set(DESTROYED);
          return this;
        }
        /**
         * Return the current slide index.
         *
         * @return {number} - The current slide index.
         // */
        ;

        _createClass(Splide, [{
          key: "index",
          get: function get() {
            return this._i;
          }
          /**
           * Set the current slide index.
           *
           * @param {number|string} index - A new index.
           */
          ,
          set: function set(index) {
            this._i = parseInt(index);
          }
          /**
           * Return length of slides.
           * This is an alias of Elements.length.
           *
           * @return {number} - A number of slides.
           */

        }, {
          key: "length",
          get: function get() {
            return this.Components.Elements.length;
          }
          /**
           * Return options.
           *
           * @return {Object} - Options object.
           */

        }, {
          key: "options",
          get: function get() {
            return this._o;
          }
          /**
           * Set options with merging the given object to the current one.
           *
           * @param {Object} options - New options.
           */
          ,
          set: function set(options) {
            var created = this.State.is(CREATED);

            if (!created) {
              this.emit('update');
            }

            this._o = merge(this._o, options);

            if (!created) {
              this.emit('updated', this._o);
            }
          }
          /**
           * Return the class list.
           * This is an alias of Splide.options.classList.
           *
           * @return {Object} - An object containing all class list.
           */

        }, {
          key: "classes",
          get: function get() {
            return this._o.classes;
          }
          /**
           * Return the i18n strings.
           * This is an alias of Splide.options.i18n.
           *
           * @return {Object} - An object containing all i18n strings.
           */

        }, {
          key: "i18n",
          get: function get() {
            return this._o.i18n;
          }
        }]);

        return Splide;
      }(); // CONCATENATED MODULE: ./src/js/components/options/index.js

      /**
       * The component for initializing options.
       *
       * @author    Naotoshi Fujita
       * @copyright Naotoshi Fujita. All rights reserved.
       */

      /**
       * The component for initializing options.
       *
       * @param {Splide} Splide - A Splide instance.
       *
       * @return {Object} - The component object.
       */

      /* harmony default export */


      var components_options = function (Splide) {
        /**
         * Retrieve options from the data attribute.
         * Note that IE10 doesn't support dataset property.
         *
         * @type {string}
         */
        var options = getAttribute(Splide.root, 'data-splide');

        if (options) {
          try {
            Splide.options = JSON.parse(options);
          } catch (e) {
            error_error(e.message);
          }
        }

        return {
          /**
           * Called when the component is mounted.
           */
          mount: function mount() {
            if (Splide.State.is(CREATED)) {
              Splide.index = Splide.options.start;
            }
          }
        };
      }; // CONCATENATED MODULE: ./src/js/constants/directions.js

      /**
       * Export layout modes.
       *
       * @author    Naotoshi Fujita
       * @copyright Naotoshi Fujita. All rights reserved.
       */

      /**
       * Enumerate slides from left to right.
       *
       * @type {string}
       */


      var LTR = 'ltr';
      /**
       * Enumerate slides from right to left.
       *
       * @type {string}
       */

      var RTL = 'rtl';
      /**
       * Enumerate slides in a col.
       *
       * @type {string}
       */

      var TTB = 'ttb'; // CONCATENATED MODULE: ./src/js/components/elements/slide.js

      /**
       * The sub component for handling each slide.
       *
       * @author    Naotoshi Fujita
       * @copyright Naotoshi Fujita. All rights reserved.
       */

      /**
       * Events for restoring original styles.
       *
       * @type {string}
       */

      var STYLE_RESTORE_EVENTS = 'update.slide';
      /**
       * The sub component for handling each slide.
       *
       * @param {Splide}  Splide    - A Splide instance.
       * @param {number}  index     - An unique slide index.
       * @param {number}  realIndex - Clones should pass a real slide index.
       * @param {Element} slide     - A slide element.
       *
       * @return {Object} - The sub component object.
       */

      /* harmony default export */

      var elements_slide = function (Splide, index, realIndex, slide) {
        /**
         * Whether to update "is-active" class before or after transition.
         *
         * @type {boolean}
         */
        var updateOnMove = Splide.options.updateOnMove;
        /**
         * Events when the slide status is updated.
         * Append a namespace to remove listeners later.
         *
         * @type {string}
         */

        var STATUS_UPDATE_EVENTS = 'ready.slide updated.slide resize.slide moved.slide' + (updateOnMove ? ' move.slide' : '');
        /**
         * Slide sub component object.
         *
         * @type {Object}
         */

        var Slide = {
          /**
           * Slide element.
           *
           * @type {Element}
           */
          slide: slide,

          /**
           * Slide index.
           *
           * @type {number}
           */
          index: index,

          /**
           * Real index for clones.
           *
           * @type {number}
           */
          realIndex: realIndex,

          /**
           * Container element if available.
           *
           * @type {Element|undefined}
           */
          container: child(slide, Splide.classes.container),

          /**
           * Whether this is a cloned slide or not.
           *
           * @type {boolean}
           */
          isClone: realIndex > -1,

          /**
           * Called when the component is mounted.
           */
          mount: function mount() {
            var _this = this;

            if (!this.isClone) {
              slide.id = Splide.root.id + "-slide" + pad(index + 1);
            }

            Splide.on(STATUS_UPDATE_EVENTS, function () {
              return _this.update();
            }).on(STYLE_RESTORE_EVENTS, restoreStyles).on('click', function () {
              return Splide.emit('click', _this);
            }, slide);
            /*
             * Add "is-active" class to a clone element temporarily
             * and it will be removed on "moved" event.
             */

            if (updateOnMove) {
              Splide.on('move.slide', function (newIndex) {
                if (newIndex === realIndex) {
                  _update(true, false);
                }
              });
            } // Make sure the slide is shown.


            applyStyle(slide, {
              display: ''
            }); // Hold the original styles.

            this.styles = getAttribute(slide, 'style') || '';
          },

          /**
           * Destroy.
           */
          destroy: function destroy() {
            Splide.off(STATUS_UPDATE_EVENTS).off(STYLE_RESTORE_EVENTS).off('click', slide);
            removeClass(slide, values(STATUS_CLASSES));
            restoreStyles();
            removeAttribute(this.container, 'style');
          },

          /**
           * Update active and visible status.
           */
          update: function update() {
            _update(this.isActive(), false);

            _update(this.isVisible(), true);
          },

          /**
           * Check whether this slide is active or not.
           *
           * @return {boolean} - True if the slide is active or false if not.
           */
          isActive: function isActive() {
            return Splide.index === index;
          },

          /**
           * Check whether this slide is visible in the viewport or not.
           *
           * @return {boolean} - True if the slide is visible or false if not.
           */
          isVisible: function isVisible() {
            var active = this.isActive();

            if (Splide.is(FADE) || active) {
              return active;
            }

            var trackRect = getRect(Splide.Components.Elements.track);
            var slideRect = getRect(slide);

            if (Splide.options.direction === TTB) {
              return trackRect.top <= slideRect.top && slideRect.bottom <= trackRect.bottom;
            }

            return trackRect.left <= slideRect.left && slideRect.right <= trackRect.right;
          },

          /**
           * Calculate how far this slide is from another slide and
           * return true if the distance is within the given number.
           *
           * @param {number} from   - Index of a target slide.
           * @param {number} within - True if the slide is within this number.
           *
           * @return {boolean} - True if the slide is within the number or false otherwise.
           */
          isWithin: function isWithin(from, within) {
            var diff = Math.abs(from - index);

            if (!Splide.is(SLIDE) && !this.isClone) {
              diff = Math.min(diff, Splide.length - diff);
            }

            return diff < within;
          }
        };
        /**
         * Update classes for activity or visibility.
         *
         * @param {boolean} active        - Is active/visible or not.
         * @param {boolean} forVisibility - Toggle classes for activity or visibility.
         */

        function _update(active, forVisibility) {
          var type = forVisibility ? 'visible' : 'active';
          var className = STATUS_CLASSES[type];

          if (active) {
            addClass(slide, className);
            Splide.emit("" + type, Slide);
          } else {
            if (hasClass(slide, className)) {
              removeClass(slide, className);
              Splide.emit("" + (forVisibility ? 'hidden' : 'inactive'), Slide);
            }
          }
        }
        /**
         * Restore the original styles.
         */


        function restoreStyles() {
          setAttribute(slide, 'style', Slide.styles);
        }

        return Slide;
      }; // CONCATENATED MODULE: ./src/js/components/elements/index.js

      /**
       * The component for main elements.
       *
       * @author    Naotoshi Fujita
       * @copyright Naotoshi Fujita. All rights reserved.
       */

      /**
       * The property name for UID stored in a window object.
       *
       * @type {string}
       */


      var UID_NAME = 'uid';
      /**
       * The component for main elements.
       *
       * @param {Splide} Splide     - A Splide instance.
       * @param {Object} Components - An object containing components.
       *
       * @return {Object} - The component object.
       */

      /* harmony default export */

      var components_elements = function (Splide, Components) {
        /**
         * Hold the root element.
         *
         * @type {Element}
         */
        var root = Splide.root;
        /**
         * Hold the class list.
         *
         * @type {Object}
         */

        var classes = Splide.classes;
        /**
         * Store Slide objects.
         *
         * @type {Array}
         */

        var Slides = [];
        /*
         * Assign unique ID to the root element if it doesn't have the one.
         * Note that IE doesn't support padStart() to fill the uid by 0.
         */

        if (!root.id) {
          window.splide = window.splide || {};
          var uid = window.splide[UID_NAME] || 0;
          window.splide[UID_NAME] = ++uid;
          root.id = "splide" + pad(uid);
        }
        /**
         * Elements component object.
         *
         * @type {Object}
         */


        var Elements = {
          /**
           * Called when the component is mounted.
           * Collect main elements and store them as member properties.
           */
          mount: function mount() {
            var _this = this;

            this.init();
            Splide.on('refresh', function () {
              _this.destroy();

              _this.init();
            }).on('updated', function () {
              removeClass(root, getClasses());
              addClass(root, getClasses());
            });
          },

          /**
           * Destroy.
           */
          destroy: function destroy() {
            Slides.forEach(function (Slide) {
              Slide.destroy();
            });
            Slides = [];
            removeClass(root, getClasses());
          },

          /**
           * Initialization.
           */
          init: function init() {
            var _this2 = this;

            collect();
            addClass(root, getClasses());
            this.slides.forEach(function (slide, index) {
              _this2.register(slide, index, -1);
            });
          },

          /**
           * Register a slide to create a Slide object and handle its behavior.
           *
           * @param {Element} slide     - A slide element.
           * @param {number}  index     - A unique index. This can be negative.
           * @param {number}  realIndex - A real index for clones. Set -1 for real slides.
           */
          register: function register(slide, index, realIndex) {
            var SlideObject = elements_slide(Splide, index, realIndex, slide);
            SlideObject.mount();
            Slides.push(SlideObject);
          },

          /**
           * Return the Slide object designated by the index.
           * Note that "find" is not supported by IE.
           *
           * @return {Object|undefined} - A Slide object if available. Undefined if not.
           */
          getSlide: function getSlide(index) {
            return Slides.filter(function (Slide) {
              return Slide.index === index;
            })[0];
          },

          /**
           * Return all Slide objects.
           *
           * @param {boolean} includeClones - Whether to include cloned slides or not.
           *
           * @return {Object[]} - Slide objects.
           */
          getSlides: function getSlides(includeClones) {
            return includeClones ? Slides : Slides.filter(function (Slide) {
              return !Slide.isClone;
            });
          },

          /**
           * Return Slide objects belonging to the given page.
           *
           * @param {number} page - A page number.
           *
           * @return {Object[]} - An array containing Slide objects.
           */
          getSlidesByPage: function getSlidesByPage(page) {
            var idx = Components.Controller.toIndex(page);
            var options = Splide.options;
            var max = options.focus !== false ? 1 : options.perPage;
            return Slides.filter(function (_ref) {
              var index = _ref.index;
              return idx <= index && index < idx + max;
            });
          },

          /**
           * Insert a slide to a slider.
           * Need to refresh Splide after adding a slide.
           *
           * @param {Node|string} slide    - A slide element to be added.
           * @param {number}      index    - A slide will be added at the position.
           * @param {Function}    callback - Called right after the slide is added to the DOM tree.
           */
          add: function add(slide, index, callback) {
            if (typeof slide === 'string') {
              slide = domify(slide);
            }

            if (slide instanceof Element) {
              var ref = this.slides[index]; // This will be removed in mount() of a Slide component.

              applyStyle(slide, {
                display: 'none'
              });

              if (ref) {
                before(slide, ref);
                this.slides.splice(index, 0, slide);
              } else {
                append(this.list, slide);
                this.slides.push(slide);
              }

              dom_loaded(slide, function () {
                callback && callback(slide);
              });
            }
          },

          /**
           * Remove a slide from a slider.
           * Need to refresh Splide after removing a slide.
           *
           * @param index - Slide index.
           */
          remove: function remove(index) {
            dom_remove(this.slides.splice(index, 1)[0]);
          },

          /**
           * Trigger the provided callback for each Slide object.
           *
           * @param {Function} callback - A callback function. The first argument will be the Slide object.
           */
          each: function each(callback) {
            Slides.forEach(callback);
          },

          /**
           * Return slides length without clones.
           *
           * @return {number} - Slide length.
           */
          get length() {
            return this.slides.length;
          },

          /**
           * Return "SlideObjects" length including clones.
           *
           * @return {number} - Slide length including clones.
           */
          get total() {
            return Slides.length;
          }

        };
        /**
         * Collect elements.
         */

        function collect() {
          Elements.slider = child(root, classes.slider);
          Elements.track = find(root, "." + classes.track);
          Elements.list = child(Elements.track, classes.list);
          exist(Elements.track && Elements.list, 'Track or list was not found.');
          Elements.slides = children(Elements.list, classes.slide);
          var arrows = findParts(classes.arrows);
          Elements.arrows = {
            prev: find(arrows, "." + classes.prev),
            next: find(arrows, "." + classes.next)
          };
          var autoplay = findParts(classes.autoplay);
          Elements.bar = find(findParts(classes.progress), "." + classes.bar);
          Elements.play = find(autoplay, "." + classes.play);
          Elements.pause = find(autoplay, "." + classes.pause);
          Elements.track.id = Elements.track.id || root.id + "-track";
          Elements.list.id = Elements.list.id || root.id + "-list";
        }
        /**
         * Return class names for the root element.
         */


        function getClasses() {
          var rootClass = classes.root;
          var options = Splide.options;
          return [rootClass + "--" + options.type, rootClass + "--" + options.direction, options.drag ? rootClass + "--draggable" : '', options.isNavigation ? rootClass + "--nav" : '', STATUS_CLASSES.active];
        }
        /**
         * Find parts only from children of the root or track.
         *
         * @return {Element} - A found element or undefined.
         */


        function findParts(className) {
          return child(root, className) || child(Elements.slider, className);
        }

        return Elements;
      }; // CONCATENATED MODULE: ./src/js/components/controller/index.js

      /**
       * The component for controlling the track.
       *
       * @author    Naotoshi Fujita
       * @copyright Naotoshi Fujita. All rights reserved.
       */


      var floor = Math.floor;
      /**
       * The component for controlling the track.
       *
       * @param {Splide} Splide     - A Splide instance.
       * @param {Object} Components - An object containing components.
       *
       * @return {Object} - The component object.
       */

      /* harmony default export */

      var controller = function (Splide, Components) {
        /**
         * Store current options.
         *
         * @type {Object}
         */
        var options;
        /**
         * True if the slide is LOOP mode.
         *
         * @type {boolean}
         */

        var isLoop;
        /**
         * Controller component object.
         *
         * @type {Object}
         */

        var Controller = {
          /**
           * Called when the component is mounted.
           */
          mount: function mount() {
            options = Splide.options;
            isLoop = Splide.is(LOOP);
            bind();
          },

          /**
           * Make track run by the given control.
           * - "+{i}" : Increment the slide index by i.
           * - "-{i}" : Decrement the slide index by i.
           * - "{i}"  : Go to the slide whose index is i.
           * - ">"    : Go to next page.
           * - "<"    : Go to prev page.
           * - ">{i}" : Go to page i.
           *
           * @param {string|number} control  - A control pattern.
           * @param {boolean}       silently - Go to the destination without event emission.
           */
          go: function go(control, silently) {
            var destIndex = this.trim(this.parse(control));
            Components.Track.go(destIndex, this.rewind(destIndex), silently);
          },

          /**
           * Parse the given control and return the destination index for the track.
           *
           * @param {string} control - A control target pattern.
           *
           * @return {number} - A parsed target.
           */
          parse: function parse(control) {
            var index = Splide.index;
            var matches = String(control).match(/([+\-<>]+)(\d+)?/);
            var indicator = matches ? matches[1] : '';
            var number = matches ? parseInt(matches[2]) : 0;

            switch (indicator) {
              case '+':
                index += number || 1;
                break;

              case '-':
                index -= number || 1;
                break;

              case '>':
              case '<':
                index = parsePage(number, index, indicator === '<');
                break;

              default:
                index = parseInt(control);
            }

            return index;
          },

          /**
           * Compute index from the given page number.
           *
           * @param {number} page - Page number.
           *
           * @return {number} - A computed page number.
           */
          toIndex: function toIndex(page) {
            if (hasFocus()) {
              return page;
            }

            var length = Splide.length;
            var perPage = options.perPage;
            var index = page * perPage;
            index = index - (this.pageLength * perPage - length) * floor(index / length); // Adjustment for the last page.

            if (length - perPage <= index && index < length) {
              index = length - perPage;
            }

            return index;
          },

          /**
           * Compute page number from the given slide index.
           *
           * @param {number} index - Slide index.
           *
           * @return {number} - A computed page number.
           */
          toPage: function toPage(index) {
            if (hasFocus()) {
              return index;
            }

            var length = Splide.length;
            var perPage = options.perPage; // Make the last "perPage" number of slides belong to the last page.

            if (length - perPage <= index && index < length) {
              return floor((length - 1) / perPage);
            }

            return floor(index / perPage);
          },

          /**
           * Trim the given index according to the current mode.
           * Index being returned could be less than 0 or greater than the length in Loop mode.
           *
           * @param {number} index - An index being trimmed.
           *
           * @return {number} - A trimmed index.
           */
          trim: function trim(index) {
            if (!isLoop) {
              index = options.rewind ? this.rewind(index) : between(index, 0, this.edgeIndex);
            }

            return index;
          },

          /**
           * Rewind the given index if it's out of range.
           *
           * @param {number} index - An index.
           *
           * @return {number} - A rewound index.
           */
          rewind: function rewind(index) {
            var edge = this.edgeIndex;

            if (isLoop) {
              while (index > edge) {
                index -= edge + 1;
              }

              while (index < 0) {
                index += edge + 1;
              }
            } else {
              if (index > edge) {
                index = 0;
              } else if (index < 0) {
                index = edge;
              }
            }

            return index;
          },

          /**
           * Check if the direction is "rtl" or not.
           *
           * @return {boolean} - True if "rtl" or false if not.
           */
          isRtl: function isRtl() {
            return options.direction === RTL;
          },

          /**
           * Return the page length.
           *
           * @return {number} - Max page number.
           */
          get pageLength() {
            var length = Splide.length;
            return hasFocus() ? length : Math.ceil(length / options.perPage);
          },

          /**
           * Return the edge index.
           *
           * @return {number} - Edge index.
           */
          get edgeIndex() {
            var length = Splide.length;

            if (!length) {
              return 0;
            }

            if (hasFocus() || options.isNavigation || isLoop) {
              return length - 1;
            }

            return length - options.perPage;
          },

          /**
           * Return the index of the previous slide.
           *
           * @return {number} - The index of the previous slide if available. -1 otherwise.
           */
          get prevIndex() {
            var prev = Splide.index - 1;

            if (isLoop || options.rewind) {
              prev = this.rewind(prev);
            }

            return prev > -1 ? prev : -1;
          },

          /**
           * Return the index of the next slide.
           *
           * @return {number} - The index of the next slide if available. -1 otherwise.
           */
          get nextIndex() {
            var next = Splide.index + 1;

            if (isLoop || options.rewind) {
              next = this.rewind(next);
            }

            return Splide.index < next && next <= this.edgeIndex || next === 0 ? next : -1;
          }

        };
        /**
         * Listen to some events.
         */

        function bind() {
          Splide.on('move', function (newIndex) {
            Splide.index = newIndex;
          }).on('updated refresh', function (newOptions) {
            options = newOptions || options;
            Splide.index = between(Splide.index, 0, Controller.edgeIndex);
          });
        }
        /**
         * Verify if the focus option is available or not.
         *
         * @return {boolean} - True if a slider has the focus option.
         */


        function hasFocus() {
          return options.focus !== false;
        }
        /**
         * Return the next or previous page index computed by the page number and current index.
         *
         * @param {number}  number - Specify the page number.
         * @param {number}  index  - Current index.
         * @param {boolean} prev   - Prev or next.
         *
         * @return {number} - Slide index.
         */


        function parsePage(number, index, prev) {
          if (number > -1) {
            return Controller.toIndex(number);
          }

          var perMove = options.perMove;
          var sign = prev ? -1 : 1;

          if (perMove) {
            return index + perMove * sign;
          }

          return Controller.toIndex(Controller.toPage(index) + sign);
        }

        return Controller;
      }; // CONCATENATED MODULE: ./src/js/components/track/index.js

      /**
       * The component for moving list in the track.
       *
       * @author    Naotoshi Fujita
       * @copyright Naotoshi Fujita. All rights reserved.
       */


      var abs = Math.abs;
      /**
       * The component for moving list in the track.
       *
       * @param {Splide} Splide     - A Splide instance.
       * @param {Object} Components - An object containing components.
       *
       * @return {Object} - The component object.
       */

      /* harmony default export */

      var components_track = function (Splide, Components) {
        /**
         * Hold the Layout component.
         *
         * @type {Object}
         */
        var Layout;
        /**
         * Hold the Layout component.
         *
         * @type {Object}
         */

        var Elements;
        /**
         * Store the list element.
         *
         * @type {Element}
         */

        var list;
        /**
         * Whether the current direction is vertical or not.
         *
         * @type {boolean}
         */

        var isVertical = Splide.options.direction === TTB;
        /**
         * Whether the slider type is FADE or not.
         *
         * @type {boolean}
         */

        var isFade = Splide.is(FADE);
        /**
         * Whether the slider direction is RTL or not.
         *
         * @type {boolean}
         */

        var isRTL = Splide.options.direction === RTL;
        /**
         * This will be true while transitioning from the last index to the first one.
         *
         * @type {boolean}
         */

        var isLoopPending = false;
        /**
         * Sign for the direction. Only RTL mode uses the positive sign.
         *
         * @type {number}
         */

        var sign = isRTL ? 1 : -1;
        /**
         * Track component object.
         *
         * @type {Object}
         */

        var Track = {
          /**
           * Make public the sign defined locally.
           *
           * @type {number}
           */
          sign: sign,

          /**
           * Called when the component is mounted.
           */
          mount: function mount() {
            Elements = Components.Elements;
            Layout = Components.Layout;
            list = Elements.list;
          },

          /**
           * Called after the component is mounted.
           * The resize event must be registered after the Layout's one is done.
           */
          mounted: function mounted() {
            var _this = this;

            if (!isFade) {
              this.jump(0);
              Splide.on('mounted resize updated', function () {
                _this.jump(Splide.index);
              });
            }
          },

          /**
           * Go to the given destination index.
           * After arriving there, the track is jump to the new index without animation, mainly for loop mode.
           *
           * @param {number}  destIndex - A destination index.
           *                              This can be negative or greater than slides length for reaching clones.
           * @param {number}  newIndex  - An actual new index. They are always same in Slide and Rewind mode.
           * @param {boolean} silently  - If true, suppress emitting events.
           */
          go: function go(destIndex, newIndex, silently) {
            var newPosition = getTrimmedPosition(destIndex);
            var prevIndex = Splide.index; // Prevent any actions while transitioning from the last index to the first one for jump.

            if (Splide.State.is(MOVING) && isLoopPending) {
              return;
            }

            isLoopPending = destIndex !== newIndex;

            if (!silently) {
              Splide.emit('move', newIndex, prevIndex, destIndex);
            }

            if (Math.abs(newPosition - this.position) >= 1 || isFade) {
              Components.Transition.start(destIndex, newIndex, prevIndex, this.toCoord(newPosition), function () {
                onTransitionEnd(destIndex, newIndex, prevIndex, silently);
              });
            } else {
              if (destIndex !== prevIndex && Splide.options.trimSpace === 'move') {
                Components.Controller.go(destIndex + destIndex - prevIndex, silently);
              } else {
                onTransitionEnd(destIndex, newIndex, prevIndex, silently);
              }
            }
          },

          /**
           * Move the track to the specified index.
           *
           * @param {number} index - A destination index where the track jumps.
           */
          jump: function jump(index) {
            this.translate(getTrimmedPosition(index));
          },

          /**
           * Set the list position by CSS translate property.
           *
           * @param {number} position - A new position value.
           */
          translate: function translate(position) {
            applyStyle(list, {
              transform: "translate" + (isVertical ? 'Y' : 'X') + "(" + position + "px)"
            });
          },

          /**
           * Cancel the transition and set the list position.
           * Also, loop the slider if necessary.
           */
          cancel: function cancel() {
            if (Splide.is(LOOP)) {
              this.shift();
            } else {
              // Ensure the current position.
              this.translate(this.position);
            }

            applyStyle(list, {
              transition: ''
            });
          },

          /**
           * Shift the slider if it exceeds borders on the edge.
           */
          shift: function shift() {
            var position = abs(this.position);
            var left = abs(this.toPosition(0));
            var right = abs(this.toPosition(Splide.length));
            var innerSize = right - left;

            if (position < left) {
              position += innerSize;
            } else if (position > right) {
              position -= innerSize;
            }

            this.translate(sign * position);
          },

          /**
           * Trim redundant spaces on the left or right edge if necessary.
           *
           * @param {number} position - Position value to be trimmed.
           *
           * @return {number} - Trimmed position.
           */
          trim: function trim(position) {
            if (!Splide.options.trimSpace || Splide.is(LOOP)) {
              return position;
            }

            var edge = sign * (Layout.totalSize() - Layout.size - Layout.gap);
            return between(position, edge, 0);
          },

          /**
           * Calculate the closest slide index from the given position.
           *
           * @param {number} position - A position converted to an slide index.
           *
           * @return {number} - The closest slide index.
           */
          toIndex: function toIndex(position) {
            var _this2 = this;

            var index = 0;
            var minDistance = Infinity;
            Elements.getSlides(true).forEach(function (Slide) {
              var slideIndex = Slide.index;
              var distance = abs(_this2.toPosition(slideIndex) - position);

              if (distance < minDistance) {
                minDistance = distance;
                index = slideIndex;
              }
            });
            return index;
          },

          /**
           * Return coordinates object by the given position.
           *
           * @param {number} position - A position value.
           *
           * @return {Object} - A coordinates object.
           */
          toCoord: function toCoord(position) {
            return {
              x: isVertical ? 0 : position,
              y: isVertical ? position : 0
            };
          },

          /**
           * Calculate the track position by a slide index.
           *
           * @param {number} index - Slide index.
           *
           * @return {Object} - Calculated position.
           */
          toPosition: function toPosition(index) {
            var position = Layout.totalSize(index) - Layout.slideSize(index) - Layout.gap;
            return sign * (position + this.offset(index));
          },

          /**
           * Return the current offset value, considering direction.
           *
           * @return {number} - Offset amount.
           */
          offset: function offset(index) {
            var focus = Splide.options.focus;
            var slideSize = Layout.slideSize(index);

            if (focus === 'center') {
              return -(Layout.size - slideSize) / 2;
            }

            return -(parseInt(focus) || 0) * (slideSize + Layout.gap);
          },

          /**
           * Return the current position.
           * This returns the correct position even while transitioning by CSS.
           *
           * @return {number} - Current position.
           */
          get position() {
            var prop = isVertical ? 'top' : isRTL ? 'right' : 'left';
            return getRect(list)[prop] - (getRect(Elements.track)[prop] - Layout.padding[prop] * sign);
          }

        };
        /**
         * Called whenever slides arrive at a destination.
         *
         * @param {number}  destIndex - A destination index.
         * @param {number}  newIndex  - A new index.
         * @param {number}  prevIndex - A previous index.
         * @param {boolean} silently  - If true, suppress emitting events.
         */

        function onTransitionEnd(destIndex, newIndex, prevIndex, silently) {
          applyStyle(list, {
            transition: ''
          });
          isLoopPending = false;

          if (!isFade) {
            Track.jump(newIndex);
          }

          if (!silently) {
            Splide.emit('moved', newIndex, prevIndex, destIndex);
          }
        }
        /**
         * Convert index to the trimmed position.
         *
         * @return {number} - Trimmed position.
         */


        function getTrimmedPosition(index) {
          return Track.trim(Track.toPosition(index));
        }

        return Track;
      }; // CONCATENATED MODULE: ./src/js/components/clones/index.js

      /**
       * The component for cloning some slides for "loop" mode of the track.
       *
       * @author    Naotoshi Fujita
       * @copyright Naotoshi Fujita. All rights reserved.
       */

      /**
       * The component for cloning some slides for "loop" mode of the track.
       *
       * @param {Splide} Splide     - A Splide instance.
       * @param {Object} Components - An object containing components.
       *
       * @return {Object} - The component object.
       */

      /* harmony default export */


      var components_clones = function (Splide, Components) {
        /**
         * Store information of all clones.
         *
         * @type {Array}
         */
        var clones = [];
        /**
         * Store the current clone count on one side.
         *
         * @type {number}
         */

        var cloneCount = 0;
        /**
         * Keep Elements component.
         *
         * @type {Object}
         */

        var Elements = Components.Elements;
        /**
         * Clones component object.
         *
         * @type {Object}
         */

        var Clones = {
          /**
           * Called when the component is mounted.
           */
          mount: function mount() {
            var _this = this;

            if (Splide.is(LOOP)) {
              init();
              Splide.on('refresh', init).on('resize', function () {
                if (cloneCount !== getCloneCount()) {
                  // Destroy before refresh not to collect clones by the Elements component.
                  _this.destroy();

                  Splide.refresh();
                }
              });
            }
          },

          /**
           * Destroy.
           */
          destroy: function destroy() {
            dom_remove(clones);
            clones = [];
          },

          /**
           * Return all clones.
           *
           * @return {Element[]} - Cloned elements.
           */
          get clones() {
            return clones;
          },

          /**
           * Return clone length.
           *
           * @return {number} - A length of clones.
           */
          get length() {
            return clones.length;
          }

        };
        /**
         * Initialization.
         */

        function init() {
          Clones.destroy();
          cloneCount = getCloneCount();
          generateClones(cloneCount);
        }
        /**
         * Generate and append/prepend clones.
         *
         * @param {number} count - The half number of clones.
         */


        function generateClones(count) {
          var length = Elements.length,
              register = Elements.register;

          if (length) {
            var slides = Elements.slides;

            while (slides.length < count) {
              slides = slides.concat(slides);
            } // Clones after the last element.


            slides.slice(0, count).forEach(function (elm, index) {
              var clone = cloneDeeply(elm);
              append(Elements.list, clone);
              clones.push(clone);
              register(clone, index + length, index % length);
            }); // Clones before the first element.

            slides.slice(-count).forEach(function (elm, index) {
              var clone = cloneDeeply(elm);
              before(clone, slides[0]);
              clones.push(clone);
              register(clone, index - count, (length + index - count % length) % length);
            });
          }
        }
        /**
         * Return half count of clones to be generated.
         * Clone count is determined by:
         * - "clones" value in the options.
         * - Number of slides that can be placed in a view in "fixed" mode.
         * - Max pages a flick action can move.
         * - Whether the slide length is enough for perPage.
         *
         * @return {number} - Count for clones.
         */


        function getCloneCount() {
          var options = Splide.options;

          if (options.clones) {
            return options.clones;
          } // Use the slide length in autoWidth mode because the number cannot be calculated.


          var baseCount = options.autoWidth || options.autoHeight ? Elements.length : options.perPage;
          var dimension = options.direction === TTB ? 'Height' : 'Width';
          var fixedSize = toPixel(Splide.root, options["fixed" + dimension]);

          if (fixedSize) {
            // Roughly calculate the count. This needs not to be strict.
            baseCount = Math.ceil(Elements.track["client" + dimension] / fixedSize);
          }

          return baseCount * (options.drag ? options.flickMaxPages + 1 : 1);
        }
        /**
         * Clone deeply the given element.
         *
         * @param {Element} elm - An element being duplicated.
         *
         * @return {Node} - A cloned node(element).
         */


        function cloneDeeply(elm) {
          var clone = elm.cloneNode(true);
          addClass(clone, Splide.classes.clone); // ID should not be duplicated.

          removeAttribute(clone, 'id');
          return clone;
        }

        return Clones;
      }; // CONCATENATED MODULE: ./src/js/components/layout/directions/horizontal.js

      /**
       * The resolver component for horizontal layout.
       *
       * @author    Naotoshi Fujita
       * @copyright Naotoshi Fujita. All rights reserved.
       */

      /**
       * The resolver component for horizontal layout.
       *
       * @param {Splide} Splide     - A Splide instance.
       * @param {Object} Components - An object containing components.
       *
       * @return {Object} - The resolver object.
       */

      /* harmony default export */


      var horizontal = function (Splide, Components) {
        /**
         * Keep the Elements component.
         *
         * @type {string}
         */
        var Elements = Components.Elements;
        /**
         * Keep the root element.
         *
         * @type {Element}
         */

        var root = Splide.root;
        /**
         * Keep the track element.
         *
         * @type {Element}
         */

        var track;
        /**
         * Keep the latest options.
         *
         * @type {Element}
         */

        var options = Splide.options;
        return {
          /**
           * Margin property name.
           *
           * @type {string}
           */
          margin: 'margin' + (options.direction === RTL ? 'Left' : 'Right'),

          /**
           * Always 0 because the height will be determined by inner contents.
           *
           * @type {number}
           */
          height: 0,

          /**
           * Initialization.
           */
          init: function init() {
            this.resize();
          },

          /**
           * Resize gap and padding.
           * This must be called on init.
           */
          resize: function resize() {
            options = Splide.options;
            track = Elements.track;
            this.gap = toPixel(root, options.gap);
            var padding = options.padding;
            var left = toPixel(root, padding.left || padding);
            var right = toPixel(root, padding.right || padding);
            this.padding = {
              left: left,
              right: right
            };
            applyStyle(track, {
              paddingLeft: unit(left),
              paddingRight: unit(right)
            });
          },

          /**
           * Return total width from the left of the list to the right of the slide specified by the provided index.
           *
           * @param {number} index - Optional. A slide index. If undefined, total width of the slider will be returned.
           *
           * @return {number} - Total width to the right side of the specified slide, or 0 for an invalid index.
           */
          totalWidth: function totalWidth(index) {
            if (index === void 0) {
              index = Splide.length - 1;
            }

            var Slide = Elements.getSlide(index);
            var width = 0;

            if (Slide) {
              var slideRect = getRect(Slide.slide);
              var listRect = getRect(Elements.list);

              if (options.direction === RTL) {
                width = listRect.right - slideRect.left;
              } else {
                width = slideRect.right - listRect.left;
              }

              width += this.gap;
            }

            return width;
          },

          /**
           * Return the slide width in px.
           *
           * @param {number} index - Slide index.
           *
           * @return {number} - The slide width.
           */
          slideWidth: function slideWidth(index) {
            if (options.autoWidth) {
              var Slide = Elements.getSlide(index);
              return Slide ? Slide.slide.offsetWidth : 0;
            }

            var width = options.fixedWidth || (this.width + this.gap) / options.perPage - this.gap;
            return toPixel(root, width);
          },

          /**
           * Return the slide height in px.
           *
           * @return {number} - The slide height.
           */
          slideHeight: function slideHeight() {
            var height = options.height || options.fixedHeight || this.width * options.heightRatio;
            return toPixel(root, height);
          },

          /**
           * Return slider width without padding.
           *
           * @return {number} - Current slider width.
           */
          get width() {
            return track.clientWidth - this.padding.left - this.padding.right;
          }

        };
      }; // CONCATENATED MODULE: ./src/js/components/layout/directions/vertical.js

      /**
       * The resolver component for vertical layout.
       *
       * @author    Naotoshi Fujita
       * @copyright Naotoshi Fujita. All rights reserved.
       */

      /**
       * The resolver component for vertical layout.
       *
       * @param {Splide} Splide     - A Splide instance.
       * @param {Object} Components - An object containing components.
       *
       * @return {Object} - The resolver object.
       */

      /* harmony default export */


      var vertical = function (Splide, Components) {
        /**
         * Keep the Elements component.
         *
         * @type {string}
         */
        var Elements = Components.Elements;
        /**
         * Keep the root element.
         *
         * @type {Element}
         */

        var root = Splide.root;
        /**
         * Keep the track element.
         *
         * @type {Element}
         */

        var track;
        /**
         * Keep the latest options.
         *
         * @type {Element}
         */

        var options;
        return {
          /**
           * Margin property name.
           *
           * @type {string}
           */
          margin: 'marginBottom',

          /**
           * Initialization.
           */
          init: function init() {
            this.resize();
          },

          /**
           * Resize gap and padding.
           * This must be called on init.
           */
          resize: function resize() {
            options = Splide.options;
            track = Elements.track;
            this.gap = toPixel(root, options.gap);
            var padding = options.padding;
            var top = toPixel(root, padding.top || padding);
            var bottom = toPixel(root, padding.bottom || padding);
            this.padding = {
              top: top,
              bottom: bottom
            };
            applyStyle(track, {
              paddingTop: unit(top),
              paddingBottom: unit(bottom)
            });
          },

          /**
           * Return total height from the top of the list to the bottom of the slide specified by the provided index.
           *
           * @param {number} index - Optional. A slide index. If undefined, total height of the slider will be returned.
           *
           * @return {number} - Total height to the bottom of the specified slide, or 0 for an invalid index.
           */
          totalHeight: function totalHeight(index) {
            if (index === void 0) {
              index = Splide.length - 1;
            }

            var Slide = Elements.getSlide(index);

            if (Slide) {
              return getRect(Slide.slide).bottom - getRect(Elements.list).top + this.gap;
            }

            return 0;
          },

          /**
           * Return the slide width in px.
           *
           * @return {number} - The slide width.
           */
          slideWidth: function slideWidth() {
            return toPixel(root, options.fixedWidth || this.width);
          },

          /**
           * Return the slide height in px.
           *
           * @param {number} index - Slide index.
           *
           * @return {number} - The slide height.
           */
          slideHeight: function slideHeight(index) {
            if (options.autoHeight) {
              var Slide = Elements.getSlide(index);
              return Slide ? Slide.slide.offsetHeight : 0;
            }

            var height = options.fixedHeight || (this.height + this.gap) / options.perPage - this.gap;
            return toPixel(root, height);
          },

          /**
           * Return slider width without padding.
           *
           * @return {number} - Current slider width.
           */
          get width() {
            return track.clientWidth;
          },

          /**
           * Return slide height without padding.
           *
           * @return {number} - Slider height.
           */
          get height() {
            var height = options.height || this.width * options.heightRatio;
            exist(height, '"height" or "heightRatio" is missing.');
            return toPixel(root, height) - this.padding.top - this.padding.bottom;
          }

        };
      }; // CONCATENATED MODULE: ./src/js/utils/time.js

      /**
       * A package of utility functions related with time.
       *
       * @author    Naotoshi Fujita
       * @copyright Naotoshi Fujita. All rights reserved.
       */

      /**
       * Simple throttle function that controls how often the given function is executed.
       *
       * @param {function} func - A function to be throttled.
       * @param {number}   wait - Time in millisecond for interval of execution.
       *
       * @return {Function} - A debounced function.
       */


      function throttle(func, wait) {
        var timeout; // Declare function by the "function" keyword to prevent "this" from being inherited.

        return function () {
          if (!timeout) {
            timeout = setTimeout(function () {
              func();
              timeout = null;
            }, wait);
          }
        };
      }
      /**
       * Custom setInterval function that provides progress rate as callback.
       *
       * @param {function} callback - A callback function fired every time the interval time passes.
       * @param {number}   interval - Interval duration in milliseconds.
       * @param {function} progress - A callback function fired whenever the progress goes.
       *
       * @return {Object} - An object containing play() and pause() functions.
       */


      function createInterval(callback, interval, progress) {
        var _window = window,
            requestAnimationFrame = _window.requestAnimationFrame;
        var start,
            elapse,
            rate,
            _pause = true;

        var step = function step(timestamp) {
          if (!_pause) {
            if (!start) {
              start = timestamp;

              if (rate && rate < 1) {
                start -= rate * interval;
              }
            }

            elapse = timestamp - start;
            rate = elapse / interval;

            if (elapse >= interval) {
              start = 0;
              rate = 1;
              callback();
            }

            if (progress) {
              progress(rate);
            }

            requestAnimationFrame(step);
          }
        };

        return {
          pause: function pause() {
            _pause = true;
            start = 0;
          },
          play: function play(reset) {
            start = 0;

            if (_pause) {
              _pause = false;

              if (reset) {
                rate = 0;
              }

              requestAnimationFrame(step);
            }
          }
        };
      } // CONCATENATED MODULE: ./src/js/components/layout/index.js

      /**
       * The component for handing slide layouts and their sizes.
       *
       * @author    Naotoshi Fujita
       * @copyright Naotoshi Fujita. All rights reserved.
       */

      /**
       * The component for handing slide layouts and their sizes.
       *
       * @param {Splide} Splide     - A Splide instance.
       * @param {Object} Components - An object containing components.
       *
       * @return {Object} - The component object.
       */

      /* harmony default export */


      var layout = function (Splide, Components) {
        /**
         * Keep the Elements component.
         *
         * @type {string}
         */
        var Elements = Components.Elements;
        /**
         * Whether the slider is vertical or not.
         *
         * @type {boolean}
         */

        var isVertical = Splide.options.direction === TTB;
        /**
         * Layout component object.
         *
         * @type {Object}
         */

        var Layout = object_assign({
          /**
           * Called when the component is mounted.
           */
          mount: function mount() {
            bind();
            init(); // The word "size" means width for a horizontal slider and height for a vertical slider.

            this.totalSize = isVertical ? this.totalHeight : this.totalWidth;
            this.slideSize = isVertical ? this.slideHeight : this.slideWidth;
          },

          /**
           * Destroy the component.
           */
          destroy: function destroy() {
            removeAttribute([Elements.list, Elements.track], 'style');
          },

          /**
           * Return the slider height on the vertical mode or width on the horizontal mode.
           *
           * @return {number}
           */
          get size() {
            return isVertical ? this.height : this.width;
          }

        }, isVertical ? vertical(Splide, Components) : horizontal(Splide, Components));
        /**
         * Init slider styles according to options.
         */

        function init() {
          Layout.init();
          applyStyle(Splide.root, {
            maxWidth: unit(Splide.options.width)
          });
          Elements.each(function (Slide) {
            Slide.slide.style[Layout.margin] = unit(Layout.gap);
          });
          resize();
        }
        /**
         * Listen the resize native event with throttle.
         * Initialize when the component is mounted or options are updated.
         */


        function bind() {
          Splide.on('resize load', throttle(function () {
            Splide.emit('resize');
          }, Splide.options.throttle), window).on('resize', resize).on('updated refresh', init);
        }
        /**
         * Resize the track and slide elements.
         */


        function resize() {
          var options = Splide.options;
          Layout.resize();
          applyStyle(Elements.track, {
            height: unit(Layout.height)
          });
          var slideHeight = options.autoHeight ? null : unit(Layout.slideHeight());
          Elements.each(function (Slide) {
            applyStyle(Slide.container, {
              height: slideHeight
            });
            applyStyle(Slide.slide, {
              width: options.autoWidth ? null : unit(Layout.slideWidth(Slide.index)),
              height: Slide.container ? null : slideHeight
            });
          });
        }

        return Layout;
      }; // CONCATENATED MODULE: ./src/js/components/drag/index.js

      /**
       * The component for supporting mouse drag and swipe.
       *
       * @author    Naotoshi Fujita
       * @copyright Naotoshi Fujita. All rights reserved.
       */


      var drag_abs = Math.abs;
      /**
       * If the absolute velocity is greater thant this value,
       * a slider always goes to a different slide after drag, not allowed to stay on a current slide.
       */

      var MIN_VELOCITY = 0.1;
      /**
       * Adjust how much the track can be pulled on the first or last page.
       * The larger number this is, the farther the track moves.
       * This should be around 5 - 9.
       *
       * @type {number}
       */

      var FRICTION_REDUCER = 7;
      /**
       * The component supporting mouse drag and swipe.
       *
       * @param {Splide} Splide     - A Splide instance.
       * @param {Object} Components - An object containing components.
       *
       * @return {Object} - The component object.
       */

      /* harmony default export */

      var drag = function (Splide, Components) {
        /**
         * Store the Move component.
         *
         * @type {Object}
         */
        var Track = Components.Track;
        /**
         * Store the Controller component.
         *
         * @type {Object}
         */

        var Controller = Components.Controller;
        /**
         * Coordinate of the track on starting drag.
         *
         * @type {Object}
         */

        var startCoord;
        /**
         * Analyzed info on starting drag.
         *
         * @type {Object|null}
         */

        var startInfo;
        /**
         * Analyzed info being updated while dragging/swiping.
         *
         * @type {Object}
         */

        var currentInfo;
        /**
         * Determine whether slides are being dragged or not.
         *
         * @type {boolean}
         */

        var isDragging;
        /**
         * Whether the slider direction is vertical or not.
         *
         * @type {boolean}
         */

        var isVertical = Splide.options.direction === TTB;
        /**
         * Axis for the direction.
         *
         * @type {string}
         */

        var axis = isVertical ? 'y' : 'x';
        /**
         * Drag component object.
         *
         * @type {Object}
         */

        var Drag = {
          /**
           * Whether dragging is disabled or not.
           *
           * @type {boolean}
           */
          disabled: false,

          /**
           * Called when the component is mounted.
           */
          mount: function mount() {
            var _this = this;

            var Elements = Components.Elements;
            var track = Elements.track;
            Splide.on('touchstart mousedown', start, track).on('touchmove mousemove', move, track, {
              passive: false
            }).on('touchend touchcancel mouseleave mouseup dragend', end, track).on('mounted refresh', function () {
              // Prevent dragging an image or anchor itself.
              each(Elements.list.querySelectorAll('img, a'), function (elm) {
                Splide.off('dragstart', elm).on('dragstart', function (e) {
                  e.preventDefault();
                }, elm, {
                  passive: false
                });
              });
            }).on('mounted updated', function () {
              _this.disabled = !Splide.options.drag;
            });
          }
        };
        /**
         * Called when the track starts to be dragged.
         *
         * @param {TouchEvent|MouseEvent} e - TouchEvent or MouseEvent object.
         */

        function start(e) {
          if (!Drag.disabled && !isDragging) {
            // These prams are used to evaluate whether the slider should start moving.
            init(e);
          }
        }
        /**
         * Initialize parameters.
         *
         * @param {TouchEvent|MouseEvent} e - TouchEvent or MouseEvent object.
         */


        function init(e) {
          startCoord = Track.toCoord(Track.position);
          startInfo = analyze(e, {});
          currentInfo = startInfo;
        }
        /**
         * Called while the track being dragged.
         *
         * @param {TouchEvent|MouseEvent} e - TouchEvent or MouseEvent object.
         */


        function move(e) {
          if (startInfo) {
            currentInfo = analyze(e, startInfo);

            if (isDragging) {
              if (e.cancelable) {
                e.preventDefault();
              }

              if (!Splide.is(FADE)) {
                var position = startCoord[axis] + currentInfo.offset[axis];
                Track.translate(resist(position));
              }
            } else {
              if (shouldMove(currentInfo)) {
                Splide.emit('drag', startInfo);
                isDragging = true;
                Track.cancel(); // These params are actual drag data.

                init(e);
              }
            }
          }
        }
        /**
         * Determine whether to start moving the track or not by drag angle.
         *
         * @param {Object} info - An information object.
         *
         * @return {boolean} - True if the track should be moved or false if not.
         */


        function shouldMove(_ref) {
          var offset = _ref.offset;

          if (Splide.State.is(MOVING) && Splide.options.waitForTransition) {
            return false;
          }

          var angle = Math.atan(drag_abs(offset.y) / drag_abs(offset.x)) * 180 / Math.PI;

          if (isVertical) {
            angle = 90 - angle;
          }

          return angle < Splide.options.dragAngleThreshold;
        }
        /**
         * Resist dragging the track on the first/last page because there is no more.
         *
         * @param {number} position - A position being applied to the track.
         *
         * @return {Object} - Adjusted position.
         */


        function resist(position) {
          if (Splide.is(SLIDE)) {
            var sign = Track.sign;

            var _start = sign * Track.trim(Track.toPosition(0));

            var _end = sign * Track.trim(Track.toPosition(Controller.edgeIndex));

            position *= sign;

            if (position < _start) {
              position = _start - FRICTION_REDUCER * Math.log(_start - position);
            } else if (position > _end) {
              position = _end + FRICTION_REDUCER * Math.log(position - _end);
            }

            position *= sign;
          }

          return position;
        }
        /**
         * Called when dragging ends.
         */


        function end() {
          startInfo = null;

          if (isDragging) {
            Splide.emit('dragged', currentInfo);
            go(currentInfo);
            isDragging = false;
          }
        }
        /**
         * Go to the slide determined by the analyzed data.
         *
         * @param {Object} info - An info object.
         */


        function go(info) {
          var velocity = info.velocity[axis];
          var absV = drag_abs(velocity);

          if (absV > 0) {
            var options = Splide.options;
            var index = Splide.index;
            var sign = velocity < 0 ? -1 : 1;
            var destIndex = index;

            if (!Splide.is(FADE)) {
              var destination = Track.position;

              if (absV > options.flickVelocityThreshold && drag_abs(info.offset[axis]) < options.swipeDistanceThreshold) {
                destination += sign * Math.min(absV * options.flickPower, Components.Layout.size * (options.flickMaxPages || 1));
              }

              destIndex = Track.toIndex(destination);
            }
            /*
             * Do not allow the track to go to a previous position if there is enough velocity.
             * Always use the adjacent index for the fade mode.
             */


            if (destIndex === index && absV > MIN_VELOCITY) {
              destIndex = index + sign * Track.sign;
            }

            if (Splide.is(SLIDE)) {
              destIndex = between(destIndex, 0, Controller.edgeIndex);
            }

            Controller.go(destIndex, options.isNavigation);
          }
        }
        /**
         * Analyze the given event object and return important information for handling swipe behavior.
         *
         * @param {Event}   e          - Touch or Mouse event object.
         * @param {Object}  startInfo  - Information analyzed on start for calculating difference from the current one.
         *
         * @return {Object} - An object containing analyzed information, such as offset, velocity, etc.
         */


        function analyze(e, startInfo) {
          var timeStamp = e.timeStamp,
              touches = e.touches;

          var _ref2 = touches ? touches[0] : e,
              clientX = _ref2.clientX,
              clientY = _ref2.clientY;

          var _ref3 = startInfo.to || {},
              _ref3$x = _ref3.x,
              fromX = _ref3$x === void 0 ? clientX : _ref3$x,
              _ref3$y = _ref3.y,
              fromY = _ref3$y === void 0 ? clientY : _ref3$y;

          var startTime = startInfo.time || 0;
          var offset = {
            x: clientX - fromX,
            y: clientY - fromY
          };
          var duration = timeStamp - startTime;
          var velocity = {
            x: offset.x / duration,
            y: offset.y / duration
          };
          return {
            to: {
              x: clientX,
              y: clientY
            },
            offset: offset,
            time: timeStamp,
            velocity: velocity
          };
        }

        return Drag;
      }; // CONCATENATED MODULE: ./src/js/components/click/index.js

      /**
       * The component for handling a click event.
       *
       * @author    Naotoshi Fujita
       * @copyright Naotoshi Fujita. All rights reserved.
       */

      /**
       * The component for handling a click event.
       * Click should be disabled during drag/swipe.
       *
       * @param {Splide} Splide     - A Splide instance.
       * @param {Object} Components - An object containing components.
       *
       * @return {Object} - The component object.
       */

      /* harmony default export */


      var click = function (Splide, Components) {
        /**
         * Whether click is disabled or not.
         *
         * @type {boolean}
         */
        var disabled = false;
        /**
         * Click component object.
         *
         * @type {Object}
         */

        var Click = {
          /**
           * Mount only when the drag is activated and the slide type is not "fade".
           *
           * @type {boolean}
           */
          required: Splide.options.drag,

          /**
           * Called when the component is mounted.
           */
          mount: function mount() {
            Splide.on('click', onClick, Components.Elements.track, {
              capture: true
            }).on('drag', function () {
              disabled = true;
            }).on('moved', function () {
              disabled = false;
            });
          }
        };
        /**
         * Called when a track element is clicked.
         *
         * @param {Event} e - A click event.
         */

        function onClick(e) {
          if (disabled) {
            e.preventDefault();
            e.stopPropagation();
            e.stopImmediatePropagation();
          }
        }

        return Click;
      }; // CONCATENATED MODULE: ./src/js/components/autoplay/index.js

      /**
       * The component for playing slides automatically.
       *
       * @author    Naotoshi Fujita
       * @copyright Naotoshi Fujita. All rights reserved.
       */

      /**
       * Set of pause flags.
       */


      var PAUSE_FLAGS = {
        HOVER: 1,
        FOCUS: 2,
        MANUAL: 3
      };
      /**
       * The component for playing slides automatically.
       *
       * @param {Splide} Splide     - A Splide instance.
       * @param {Object} Components - An object containing components.
       * @param {string} name       - A component name as a lowercase string.
       *
       * @return {Object} - The component object.
       */

      /* harmony default export */

      var components_autoplay = function (Splide, Components, name) {
        /**
         * Store pause flags.
         *
         * @type {Array}
         */
        var flags = [];
        /**
         * Store an interval object.
         *
         * @type {Object};
         */

        var interval;
        /**
         * Keep the Elements component.
         *
         * @type {string}
         */

        var Elements = Components.Elements;
        /**
         * Autoplay component object.
         *
         * @type {Object}
         */

        var Autoplay = {
          /**
           * Required only when the autoplay option is true.
           *
           * @type {boolean}
           */
          required: Splide.options.autoplay,

          /**
           * Called when the component is mounted.
           * Note that autoplay starts only if there are slides over perPage number.
           */
          mount: function mount() {
            var options = Splide.options;

            if (Elements.slides.length > options.perPage) {
              interval = createInterval(function () {
                Splide.go('>');
              }, options.interval, function (rate) {
                Splide.emit(name + ":playing", rate);

                if (Elements.bar) {
                  applyStyle(Elements.bar, {
                    width: rate * 100 + "%"
                  });
                }
              });
              bind();
              this.play();
            }
          },

          /**
           * Start autoplay.
           *
           * @param {number} flag - A pause flag to be removed.
           */
          play: function play(flag) {
            if (flag === void 0) {
              flag = 0;
            }

            flags = flags.filter(function (f) {
              return f !== flag;
            });

            if (!flags.length) {
              Splide.emit(name + ":play");
              interval.play(Splide.options.resetProgress);
            }
          },

          /**
           * Pause autoplay.
           * Note that Array.includes is not supported by IE.
           *
           * @param {number} flag - A pause flag to be added.
           */
          pause: function pause(flag) {
            if (flag === void 0) {
              flag = 0;
            }

            interval.pause();

            if (flags.indexOf(flag) === -1) {
              flags.push(flag);
            }

            if (flags.length === 1) {
              Splide.emit(name + ":pause");
            }
          }
        };
        /**
         * Listen some events.
         */

        function bind() {
          var options = Splide.options;
          var sibling = Splide.sibling;
          var elms = [Splide.root, sibling ? sibling.root : null];

          if (options.pauseOnHover) {
            switchOn(elms, 'mouseleave', PAUSE_FLAGS.HOVER, true);
            switchOn(elms, 'mouseenter', PAUSE_FLAGS.HOVER, false);
          }

          if (options.pauseOnFocus) {
            switchOn(elms, 'focusout', PAUSE_FLAGS.FOCUS, true);
            switchOn(elms, 'focusin', PAUSE_FLAGS.FOCUS, false);
          }

          if (Elements.play) {
            Splide.on('click', function () {
              // Need to be removed a focus flag at first.
              Autoplay.play(PAUSE_FLAGS.FOCUS);
              Autoplay.play(PAUSE_FLAGS.MANUAL);
            }, Elements.play);
          }

          if (Elements.pause) {
            switchOn([Elements.pause], 'click', PAUSE_FLAGS.MANUAL, false);
          }

          Splide.on('move refresh', function () {
            Autoplay.play();
          }) // Rewind the timer.
          .on('destroy', function () {
            Autoplay.pause();
          });
        }
        /**
         * Play or pause on the given event.
         *
         * @param {Element[]} elms  - Elements.
         * @param {string}    event - An event name or names.
         * @param {number}    flag  - A pause flag defined on the top.
         * @param {boolean}   play  - Determine whether to play or pause.
         */


        function switchOn(elms, event, flag, play) {
          elms.forEach(function (elm) {
            Splide.on(event, function () {
              Autoplay[play ? 'play' : 'pause'](flag);
            }, elm);
          });
        }

        return Autoplay;
      }; // CONCATENATED MODULE: ./src/js/components/cover/index.js

      /**
       * The component for change an img element to background image of its wrapper.
       *
       * @author    Naotoshi Fujita
       * @copyright Naotoshi Fujita. All rights reserved.
       */

      /**
       * The component for change an img element to background image of its wrapper.
       *
       * @param {Splide} Splide     - A Splide instance.
       * @param {Object} Components - An object containing components.
       *
       * @return {Object} - The component object.
       */

      /* harmony default export */


      var components_cover = function (Splide, Components) {
        /**
         * Hold options.
         *
         * @type {Object}
         */
        var options = Splide.options;
        /**
         * Cover component object.
         *
         * @type {Object}
         */

        var Cover = {
          /**
           * Required only when "cover" option is true.
           *
           * @type {boolean}
           */
          required: options.cover,

          /**
           * Called when the component is mounted.
           */
          mount: function mount() {
            Splide.on('lazyload:loaded', function (img) {
              cover(img, false);
            });
            Splide.on('mounted updated refresh', function () {
              return apply(false);
            });
          },

          /**
           * Destroy.
           */
          destroy: function destroy() {
            apply(true);
          }
        };
        /**
         * Apply "cover" to all slides.
         *
         * @param {boolean} uncover - If true, "cover" will be clear.
         */

        function apply(uncover) {
          Components.Elements.each(function (Slide) {
            var img = child(Slide.slide, 'IMG') || child(Slide.container, 'IMG');

            if (img && img.src) {
              cover(img, uncover);
            }
          });
        }
        /**
         * Set background image of the parent element, using source of the given image element.
         *
         * @param {Element} img     - An image element.
         * @param {boolean} uncover - Reset "cover".
         */


        function cover(img, uncover) {
          applyStyle(img.parentElement, {
            background: uncover ? '' : "center/cover no-repeat url(\"" + img.src + "\")"
          });
          applyStyle(img, {
            display: uncover ? '' : 'none'
          });
        }

        return Cover;
      }; // CONCATENATED MODULE: ./src/js/components/arrows/path.js

      /**
       * Export vector path for an arrow.
       *
       * @author    Naotoshi Fujita
       * @copyright Naotoshi Fujita. All rights reserved.
       */

      /**
       * Namespace definition for SVG element.
       *
       * @type {string}
       */


      var XML_NAME_SPACE = 'http://www.w3.org/2000/svg';
      /**
       * The arrow vector path.
       *
       * @type {number}
       */

      var PATH = 'm15.5 0.932-4.3 4.38 14.5 14.6-14.5 14.5 4.3 4.4 14.6-14.6 4.4-4.3-4.4-4.4-14.6-14.6z';
      /**
       * SVG width and height.
       *
       * @type {number}
       */

      var SIZE = 40; // CONCATENATED MODULE: ./src/js/components/arrows/index.js

      /**
       * The component for appending prev/next arrows.
       *
       * @author    Naotoshi Fujita
       * @copyright Naotoshi Fujita. All rights reserved.
       */

      /**
       * The component for appending prev/next arrows.
       *
       * @param {Splide} Splide     - A Splide instance.
       * @param {Object} Components - An object containing components.
       * @param {string} name       - A component name as a lowercase string.
       *
       * @return {Object} - The component object.
       */

      /* harmony default export */

      var components_arrows = function (Splide, Components, name) {
        /**
         * Previous arrow element.
         *
         * @type {Element|undefined}
         */
        var prev;
        /**
         * Next arrow element.
         *
         * @type {Element|undefined}
         */

        var next;
        /**
         * Store the class list.
         *
         * @type {Object}
         */

        var classes = Splide.classes;
        /**
         * Hold the root element.
         *
         * @type {Element}
         */

        var root = Splide.root;
        /**
         * Whether arrows are created programmatically or not.
         *
         * @type {boolean}
         */

        var created;
        /**
         * Hold the Elements component.
         *
         * @type {Object}
         */

        var Elements = Components.Elements;
        /**
         * Arrows component object.
         *
         * @type {Object}
         */

        var Arrows = {
          /**
           * Required when the arrows option is true.
           *
           * @type {boolean}
           */
          required: Splide.options.arrows,

          /**
           * Called when the component is mounted.
           */
          mount: function mount() {
            // Attempt to get arrows from HTML source.
            prev = Elements.arrows.prev;
            next = Elements.arrows.next; // If arrows were not found in HTML, let's generate them.

            if ((!prev || !next) && Splide.options.arrows) {
              prev = createArrow(true);
              next = createArrow(false);
              created = true;
              appendArrows();
            }

            if (prev && next) {
              bind();
            }

            this.arrows = {
              prev: prev,
              next: next
            };
          },

          /**
           * Called after all components are mounted.
           */
          mounted: function mounted() {
            Splide.emit(name + ":mounted", prev, next);
          },

          /**
           * Destroy.
           */
          destroy: function destroy() {
            removeAttribute([prev, next], 'disabled');

            if (created) {
              dom_remove(prev.parentElement);
            }
          }
        };
        /**
         * Listen to native and custom events.
         */

        function bind() {
          Splide.on('click', function () {
            Splide.go('<');
          }, prev).on('click', function () {
            Splide.go('>');
          }, next).on('mounted move updated refresh', updateDisabled);
        }
        /**
         * Update a disabled attribute.
         */


        function updateDisabled() {
          var _Components$Controlle = Components.Controller,
              prevIndex = _Components$Controlle.prevIndex,
              nextIndex = _Components$Controlle.nextIndex;
          var isEnough = Splide.length > Splide.options.perPage || Splide.is(LOOP);
          prev.disabled = prevIndex < 0 || !isEnough;
          next.disabled = nextIndex < 0 || !isEnough;
          Splide.emit(name + ":updated", prev, next, prevIndex, nextIndex);
        }
        /**
         * Create a wrapper element and append arrows.
         */


        function appendArrows() {
          var wrapper = create('div', {
            "class": classes.arrows
          });
          append(wrapper, prev);
          append(wrapper, next);
          var slider = Elements.slider;
          var parent = Splide.options.arrows === 'slider' && slider ? slider : root;
          before(wrapper, parent.firstElementChild);
        }
        /**
         * Create an arrow element.
         *
         * @param {boolean} prev - Determine to create a prev arrow or next arrow.
         *
         * @return {Element} - A created arrow element.
         */


        function createArrow(prev) {
          var arrow = "<button class=\"" + classes.arrow + " " + (prev ? classes.prev : classes.next) + "\" type=\"button\">" + ("<svg xmlns=\"" + XML_NAME_SPACE + "\"\tviewBox=\"0 0 " + SIZE + " " + SIZE + "\"\twidth=\"" + SIZE + "\"\theight=\"" + SIZE + "\">") + ("<path d=\"" + (Splide.options.arrowPath || PATH) + "\" />");
          return domify(arrow);
        }

        return Arrows;
      }; // CONCATENATED MODULE: ./src/js/components/pagination/index.js

      /**
       * The component for handling pagination
       *
       * @author    Naotoshi Fujita
       * @copyright Naotoshi Fujita. All rights reserved.
       */

      /**
       * The event name for updating some attributes of pagination nodes.
       *
       * @type {string}
       */


      var ATTRIBUTES_UPDATE_EVENT = 'move.page';
      /**
       * The event name for recreating pagination.
       *
       * @type {string}
       */

      var UPDATE_EVENT = 'updated.page refresh.page';
      /**
       * The component for handling pagination
       *
       * @param {Splide} Splide     - A Splide instance.
       * @param {Object} Components - An object containing components.
       * @param {string} name       - A component name as a lowercase string.
       *
       * @return {Object} - The component object.
       */

      /* harmony default export */

      var components_pagination = function (Splide, Components, name) {
        /**
         * Store all data for pagination.
         * - list: A list element.
         * - items: An array that contains objects(li, button, index, page).
         *
         * @type {Object}
         */
        var data = {};
        /**
         * Hold the Elements component.
         *
         * @type {Object}
         */

        var Elements = Components.Elements;
        /**
         * Pagination component object.
         *
         * @type {Object}
         */

        var Pagination = {
          /**
           * Called when the component is mounted.
           */
          mount: function mount() {
            var pagination = Splide.options.pagination;

            if (pagination) {
              data = createPagination();
              var slider = Elements.slider;
              var parent = pagination === 'slider' && slider ? slider : Splide.root;
              append(parent, data.list);
              Splide.on(ATTRIBUTES_UPDATE_EVENT, updateAttributes);
            }

            Splide.off(UPDATE_EVENT).on(UPDATE_EVENT, function () {
              Pagination.destroy();

              if (Splide.options.pagination) {
                Pagination.mount();
                Pagination.mounted();
              }
            });
          },

          /**
           * Called after all components are mounted.
           */
          mounted: function mounted() {
            if (Splide.options.pagination) {
              var index = Splide.index;
              Splide.emit(name + ":mounted", data, this.getItem(index));
              updateAttributes(index, -1);
            }
          },

          /**
           * Destroy the pagination.
           * Be aware that node.remove() is not supported by IE.
           */
          destroy: function destroy() {
            dom_remove(data.list);

            if (data.items) {
              data.items.forEach(function (item) {
                Splide.off('click', item.button);
              });
            } // Do not remove UPDATE_EVENT to recreate pagination if needed.


            Splide.off(ATTRIBUTES_UPDATE_EVENT);
            data = {};
          },

          /**
           * Return an item by index.
           *
           * @param {number} index - A slide index.
           *
           * @return {Object|undefined} - An item object on success or undefined on failure.
           */
          getItem: function getItem(index) {
            return data.items[Components.Controller.toPage(index)];
          },

          /**
           * Return object containing pagination data.
           *
           * @return {Object} - Pagination data including list and items.
           */
          get data() {
            return data;
          }

        };
        /**
         * Update attributes.
         *
         * @param {number} index     - Active index.
         * @param {number} prevIndex - Prev index.
         */

        function updateAttributes(index, prevIndex) {
          var prev = Pagination.getItem(prevIndex);
          var curr = Pagination.getItem(index);
          var active = STATUS_CLASSES.active;

          if (prev) {
            removeClass(prev.button, active);
          }

          if (curr) {
            addClass(curr.button, active);
          }

          Splide.emit(name + ":updated", data, prev, curr);
        }
        /**
         * Create a wrapper and button elements.
         *
         * @return {Object} - An object contains all data.
         */


        function createPagination() {
          var options = Splide.options;
          var classes = Splide.classes;
          var list = create('ul', {
            "class": classes.pagination
          });
          var items = Elements.getSlides(false).filter(function (Slide) {
            return options.focus !== false || Slide.index % options.perPage === 0;
          }).map(function (Slide, page) {
            var li = create('li', {});
            var button = create('button', {
              "class": classes.page,
              type: 'button'
            });
            append(li, button);
            append(list, li);
            Splide.on('click', function () {
              Splide.go(">" + page);
            }, button);
            return {
              li: li,
              button: button,
              page: page,
              Slides: Elements.getSlidesByPage(page)
            };
          });
          return {
            list: list,
            items: items
          };
        }

        return Pagination;
      }; // CONCATENATED MODULE: ./src/js/components/lazyload/index.js

      /**
       * The component for loading slider images lazily.
       *
       * @author    Naotoshi Fujita
       * @copyright Naotoshi Fujita. All rights reserved.
       */

      /**
       * The name for a data attribute of src.
       *
       * @type {string}
       */


      var SRC_DATA_NAME = 'data-splide-lazy';
      /**
       * The name for a data attribute of srcset.
       *
       * @type {string}
       */

      var SRCSET_DATA_NAME = 'data-splide-lazy-srcset';
      /**
       * The component for loading slider images lazily.
       *
       * @param {Splide} Splide     - A Splide instance.
       * @param {Object} Components - An object containing components.
       * @param {string} name       - A component name as a lowercase string.
       *
       * @return {Object} - The component object.
       */

      /* harmony default export */

      var lazyload = function (Splide, Components, name) {
        /**
         * Next index for sequential loading.
         *
         * @type {number}
         */
        var nextIndex;
        /**
         * Store objects containing an img element and a Slide object.
         *
         * @type {Object[]}
         */

        var images;
        /**
         * Store the options.
         *
         * @type {Object}
         */

        var options = Splide.options;
        /**
         * Whether to load images sequentially or not.
         *
         * @type {boolean}
         */

        var isSequential = options.lazyLoad === 'sequential';
        /**
         * Lazyload component object.
         *
         * @type {Object}
         */

        var Lazyload = {
          /**
           * Mount only when the lazyload option is provided.
           *
           * @type {boolean}
           */
          required: options.lazyLoad,

          /**
           * Called when the component is mounted.
           */
          mount: function mount() {
            Splide.on('mounted refresh', function () {
              init();
              Components.Elements.each(function (Slide) {
                each(Slide.slide.querySelectorAll("[" + SRC_DATA_NAME + "], [" + SRCSET_DATA_NAME + "]"), function (img) {
                  if (!img.src && !img.srcset) {
                    images.push({
                      img: img,
                      Slide: Slide
                    });
                    applyStyle(img, {
                      display: 'none'
                    });
                  }
                });
              });

              if (isSequential) {
                loadNext();
              }
            });

            if (!isSequential) {
              Splide.on("mounted refresh moved." + name, check);
            }
          },

          /**
           * Destroy.
           */
          destroy: init
        };
        /**
         * Initialize parameters.
         */

        function init() {
          images = [];
          nextIndex = 0;
        }
        /**
         * Check how close each image is from the active slide and
         * determine whether to start loading or not, according to the distance.
         *
         * @param {number} index - Current index.
         */


        function check(index) {
          index = isNaN(index) ? Splide.index : index;
          images = images.filter(function (image) {
            if (image.Slide.isWithin(index, options.perPage * (options.preloadPages + 1))) {
              load(image.img, image.Slide);
              return false;
            }

            return true;
          }); // Unbind if all images are loaded.

          if (!images[0]) {
            Splide.off("moved." + name);
          }
        }
        /**
         * Start loading an image.
         * Creating a clone of the image element since setting src attribute directly to it
         * often occurs 'hitch', blocking some other processes of a browser.
         *
         * @param {Element} img   - An image element.
         * @param {Object}  Slide - A Slide object.
         */


        function load(img, Slide) {
          addClass(Slide.slide, STATUS_CLASSES.loading);
          var spinner = create('span', {
            "class": Splide.classes.spinner
          });
          append(img.parentElement, spinner);

          img.onload = function () {
            loaded(img, spinner, Slide, false);
          };

          img.onerror = function () {
            loaded(img, spinner, Slide, true);
          };

          setAttribute(img, 'srcset', getAttribute(img, SRCSET_DATA_NAME) || '');
          setAttribute(img, 'src', getAttribute(img, SRC_DATA_NAME) || '');
        }
        /**
         * Start loading a next image in images array.
         */


        function loadNext() {
          if (nextIndex < images.length) {
            var image = images[nextIndex];
            load(image.img, image.Slide);
          }

          nextIndex++;
        }
        /**
         * Called just after the image was loaded or loading was aborted by some error.
         *
         * @param {Element} img     - An image element.
         * @param {Element} spinner - A spinner element.
         * @param {Object}  Slide   - A Slide object.
         * @param {boolean} error   - True if the image was loaded successfully or false on error.
         */


        function loaded(img, spinner, Slide, error) {
          removeClass(Slide.slide, STATUS_CLASSES.loading);

          if (!error) {
            dom_remove(spinner);
            applyStyle(img, {
              display: ''
            });
            Splide.emit(name + ":loaded", img).emit('resize');
          }

          if (isSequential) {
            loadNext();
          }
        }

        return Lazyload;
      }; // CONCATENATED MODULE: ./src/js/constants/a11y.js

      /**
       * Export aria attribute names.
       *
       * @author    Naotoshi Fujita
       * @copyright Naotoshi Fujita. All rights reserved.
       */

      /**
       * Attribute name for aria-current.
       *
       * @type {string}
       */


      var ARIA_CURRENRT = 'aria-current';
      /**
       * Attribute name for aria-control.
       *
       * @type {string}
       */

      var ARIA_CONTROLS = 'aria-controls';
      /**
       * Attribute name for aria-control.
       *
       * @type {string}
       */

      var ARIA_LABEL = 'aria-label';
      /**
       * Attribute name for aria-labelledby.
       *
       * @type {string}
       */

      var ARIA_LABELLEDBY = 'aria-labelledby';
      /**
       * Attribute name for aria-hidden.
       *
       * @type {string}
       */

      var ARIA_HIDDEN = 'aria-hidden';
      /**
       * Attribute name for tab-index.
       *
       * @type {string}
       */

      var TAB_INDEX = 'tabindex'; // CONCATENATED MODULE: ./src/js/components/keyboard/index.js

      /**
       * The component for controlling slides via keyboard.
       *
       * @author    Naotoshi Fujita
       * @copyright Naotoshi Fujita. All rights reserved.
       */

      /**
       * Map a key to a slide control.
       *
       * @type {Object}
       */

      var KEY_MAP = {
        ltr: {
          ArrowLeft: '<',
          ArrowRight: '>',
          // For IE.
          Left: '<',
          Right: '>'
        },
        rtl: {
          ArrowLeft: '>',
          ArrowRight: '<',
          // For IE.
          Left: '>',
          Right: '<'
        },
        ttb: {
          ArrowUp: '<',
          ArrowDown: '>',
          // For IE.
          Up: '<',
          Down: '>'
        }
      };
      /**
       * The component for controlling slides via keyboard.
       *
       * @param {Splide} Splide - A Splide instance.
       *
       * @return {Object} - The component object.
       */

      /* harmony default export */

      var components_keyboard = function (Splide) {
        /**
         * Hold the target element.
         *
         * @type {Element|Document|undefined}
         */
        var target;
        return {
          /**
           * Called when the component is mounted.
           */
          mount: function mount() {
            Splide.on('mounted updated', function () {
              var options = Splide.options;
              var root = Splide.root;
              var map = KEY_MAP[options.direction];
              var keyboard = options.keyboard;

              if (target) {
                Splide.off('keydown', target);
                removeAttribute(root, TAB_INDEX);
              }

              if (keyboard) {
                if (keyboard === 'focused') {
                  target = root;
                  setAttribute(root, TAB_INDEX, 0);
                } else {
                  target = document;
                }

                Splide.on('keydown', function (e) {
                  if (map[e.key]) {
                    Splide.go(map[e.key]);
                  }
                }, target);
              }
            });
          }
        };
      }; // CONCATENATED MODULE: ./src/js/components/a11y/index.js

      /**
       * The component for enhancing accessibility.
       *
       * @author    Naotoshi Fujita
       * @copyright Naotoshi Fujita. All rights reserved.
       */

      /**
       * The component for enhancing accessibility.
       *
       * @param {Splide} Splide     - A Splide instance.
       * @param {Object} Components - An object containing components.
       *
       * @return {Object} - The component object.
       */

      /* harmony default export */


      var a11y = function (Splide, Components) {
        /**
         * Hold a i18n object.
         *
         * @type {Object}
         */
        var i18n = Splide.i18n;
        /**
         * Hold the Elements component.
         *
         * @type {Object}
         */

        var Elements = Components.Elements;
        /**
         * All attributes related with A11y.
         *
         * @type {string[]}
         */

        var allAttributes = [ARIA_HIDDEN, TAB_INDEX, ARIA_CONTROLS, ARIA_LABEL, ARIA_CURRENRT, 'role'];
        /**
         * A11y component object.
         *
         * @type {Object}
         */

        var A11y = {
          /**
           * Required only when the accessibility option is true.
           *
           * @type {boolean}
           */
          required: Splide.options.accessibility,

          /**
           * Called when the component is mounted.
           */
          mount: function mount() {
            Splide.on('visible', function (Slide) {
              updateSlide(Slide.slide, true);
            }).on('hidden', function (Slide) {
              updateSlide(Slide.slide, false);
            }).on('arrows:mounted', initArrows).on('arrows:updated', updateArrows).on('pagination:mounted', initPagination).on('pagination:updated', updatePagination).on('refresh', function () {
              removeAttribute(Components.Clones.clones, allAttributes);
            });

            if (Splide.options.isNavigation) {
              Splide.on('navigation:mounted navigation:updated', initNavigation).on('active', function (Slide) {
                updateNavigation(Slide, true);
              }).on('inactive', function (Slide) {
                updateNavigation(Slide, false);
              });
            }

            initAutoplay();
          },

          /**
           * Destroy.
           */
          destroy: function destroy() {
            var Arrows = Components.Arrows;
            var arrows = Arrows ? Arrows.arrows : {};
            removeAttribute(Elements.slides.concat([arrows.prev, arrows.next, Elements.play, Elements.pause]), allAttributes);
          }
        };
        /**
         * Update slide attributes when it gets visible or hidden.
         *
         * @param {Element} slide   - A slide element.
         * @param {Boolean} visible - True when the slide gets visible, or false when hidden.
         */

        function updateSlide(slide, visible) {
          setAttribute(slide, ARIA_HIDDEN, !visible);

          if (Splide.options.slideFocus) {
            setAttribute(slide, TAB_INDEX, visible ? 0 : -1);
          }
        }
        /**
         * Initialize arrows if they are available.
         * Append screen reader elements and add aria-controls attribute.
         *
         * @param {Element} prev - Previous arrow element.
         * @param {Element} next - Next arrow element.
         */


        function initArrows(prev, next) {
          var controls = Elements.track.id;
          setAttribute(prev, ARIA_CONTROLS, controls);
          setAttribute(next, ARIA_CONTROLS, controls);
        }
        /**
         * Update arrow attributes.
         *
         * @param {Element} prev      - Previous arrow element.
         * @param {Element} next      - Next arrow element.
         * @param {number}  prevIndex - Previous slide index or -1 when there is no precede slide.
         * @param {number}  nextIndex - Next slide index or -1 when there is no next slide.
         */


        function updateArrows(prev, next, prevIndex, nextIndex) {
          var index = Splide.index;
          var prevLabel = prevIndex > -1 && index < prevIndex ? i18n.last : i18n.prev;
          var nextLabel = nextIndex > -1 && index > nextIndex ? i18n.first : i18n.next;
          setAttribute(prev, ARIA_LABEL, prevLabel);
          setAttribute(next, ARIA_LABEL, nextLabel);
        }
        /**
         * Initialize pagination if it's available.
         * Append a screen reader element and add aria-controls/label attribute to each item.
         *
         * @param {Object} data       - Data object containing all items.
         * @param {Object} activeItem - An initial active item.
         */


        function initPagination(data, activeItem) {
          if (activeItem) {
            setAttribute(activeItem.button, ARIA_CURRENRT, true);
          }

          data.items.forEach(function (item) {
            var options = Splide.options;
            var text = options.focus === false && options.perPage > 1 ? i18n.pageX : i18n.slideX;
            var label = sprintf(text, item.page + 1);
            var button = item.button;
            var controls = item.Slides.map(function (Slide) {
              return Slide.slide.id;
            });
            setAttribute(button, ARIA_CONTROLS, controls.join(' '));
            setAttribute(button, ARIA_LABEL, label);
          });
        }
        /**
         * Update pagination attributes.
         *
         * @param {Object}  data - Data object containing all items.
         * @param {Element} prev - A previous active element.
         * @param {Element} curr - A current active element.
         */


        function updatePagination(data, prev, curr) {
          if (prev) {
            removeAttribute(prev.button, ARIA_CURRENRT);
          }

          if (curr) {
            setAttribute(curr.button, ARIA_CURRENRT, true);
          }
        }
        /**
         * Initialize autoplay buttons.
         */


        function initAutoplay() {
          ['play', 'pause'].forEach(function (name) {
            var elm = Elements[name];

            if (elm) {
              if (!isButton(elm)) {
                setAttribute(elm, 'role', 'button');
              }

              setAttribute(elm, ARIA_CONTROLS, Elements.track.id);
              setAttribute(elm, ARIA_LABEL, i18n[name]);
            }
          });
        }
        /**
         * Initialize navigation slider.
         * Add button role, aria-label, aria-controls to slide elements and append screen reader text to them.
         *
         * @param {Splide} main - A main Splide instance.
         */


        function initNavigation(main) {
          Elements.each(function (Slide) {
            var slide = Slide.slide;
            var realIndex = Slide.realIndex;

            if (!isButton(slide)) {
              setAttribute(slide, 'role', 'button');
            }

            var slideIndex = realIndex > -1 ? realIndex : Slide.index;
            var label = sprintf(i18n.slideX, slideIndex + 1);
            var mainSlide = main.Components.Elements.getSlide(slideIndex);
            setAttribute(slide, ARIA_LABEL, label);

            if (mainSlide) {
              setAttribute(slide, ARIA_CONTROLS, mainSlide.slide.id);
            }
          });
        }
        /**
         * Update navigation attributes.
         *
         * @param {Object}  Slide  - A target Slide object.
         * @param {boolean} active - True if the slide is active or false if inactive.
         */


        function updateNavigation(_ref, active) {
          var slide = _ref.slide;

          if (active) {
            setAttribute(slide, ARIA_CURRENRT, true);
          } else {
            removeAttribute(slide, ARIA_CURRENRT);
          }
        }
        /**
         * Check if the given element is button or not.
         *
         * @param {Element} elm - An element to be checked.
         *
         * @return {boolean} - True if the given element is button.
         */


        function isButton(elm) {
          return elm.tagName === 'BUTTON';
        }

        return A11y;
      }; // CONCATENATED MODULE: ./src/js/components/sync/index.js

      /**
       * The component for synchronizing a slider with another.
       *
       * @author    Naotoshi Fujita
       * @copyright Naotoshi Fujita. All rights reserved.
       */

      /**
       * The event name for sync.
       *
       * @type {string}
       */


      var SYNC_EVENT = 'move.sync';
      /**
       * The event names for click navigation.
       * @type {string}
       */

      var CLICK_EVENTS = 'mouseup touchend';
      /**
       * The keys for triggering the navigation button.
       *
       * @type {String[]}
       */

      var TRIGGER_KEYS = [' ', 'Enter', 'Spacebar'];
      /**
       * The component for synchronizing a slider with another.
       *
       * @param {Splide} Splide - A Splide instance.
       *
       * @return {Object} - The component object.
       */

      /* harmony default export */

      var sync = function (Splide) {
        /**
         * Keep the sibling Splide instance.
         *
         * @type {Splide}
         */
        var sibling = Splide.sibling;
        /**
         * Whether the sibling slider is navigation or not.
         *
         * @type {Splide|boolean}
         */

        var isNavigation = sibling && sibling.options.isNavigation;
        /**
         * Layout component object.
         *
         * @type {Object}
         */

        var Sync = {
          /**
           * Required only when the sub slider is available.
           *
           * @type {boolean}
           */
          required: !!sibling,

          /**
           * Called when the component is mounted.
           */
          mount: function mount() {
            syncMain();
            syncSibling();

            if (isNavigation) {
              bind();
              Splide.on('refresh', function () {
                setTimeout(function () {
                  bind();
                  sibling.emit('navigation:updated', Splide);
                });
              });
            }
          },

          /**
           * Called after all components are mounted.
           */
          mounted: function mounted() {
            if (isNavigation) {
              sibling.emit('navigation:mounted', Splide);
            }
          }
        };
        /**
         * Listen the primary slider event to move secondary one.
         * Must unbind a handler at first to avoid infinite loop.
         */

        function syncMain() {
          Splide.on(SYNC_EVENT, function (newIndex, prevIndex, destIndex) {
            sibling.off(SYNC_EVENT).go(sibling.is(LOOP) ? destIndex : newIndex, false);
            syncSibling();
          });
        }
        /**
         * Listen the secondary slider event to move primary one.
         * Must unbind a handler at first to avoid infinite loop.
         */


        function syncSibling() {
          sibling.on(SYNC_EVENT, function (newIndex, prevIndex, destIndex) {
            Splide.off(SYNC_EVENT).go(Splide.is(LOOP) ? destIndex : newIndex, false);
            syncMain();
          });
        }
        /**
         * Listen some events on each slide.
         */


        function bind() {
          sibling.Components.Elements.each(function (_ref) {
            var slide = _ref.slide,
                index = _ref.index;
            /*
             * Listen mouseup and touchend events to handle click.
             */

            Splide.off(CLICK_EVENTS, slide).on(CLICK_EVENTS, function (e) {
              // Ignore a middle or right click.
              if (!e.button || e.button === 0) {
                moveSibling(index);
              }
            }, slide);
            /*
             * Subscribe keyup to handle Enter and Space key.
             * Note that Array.includes is not supported by IE.
             */

            Splide.off('keyup', slide).on('keyup', function (e) {
              if (TRIGGER_KEYS.indexOf(e.key) > -1) {
                e.preventDefault();
                moveSibling(index);
              }
            }, slide, {
              passive: false
            });
          });
        }
        /**
         * Move the sibling to the given index.
         * Need to check "IDLE" status because slides can be moving by Drag component.
         *
         * @param {number} index - Target index.
         */


        function moveSibling(index) {
          if (Splide.State.is(IDLE)) {
            sibling.go(index);
          }
        }

        return Sync;
      }; // CONCATENATED MODULE: ./src/js/components/breakpoints/index.js

      /**
       * The component for updating options according to a current window width.
       *
       * @author    Naotoshi Fujita
       * @copyright Naotoshi Fujita. All rights reserved.
       */

      /**
       * Interval time for throttle.
       *
       * @type {number}
       */


      var THROTTLE = 50;
      /**
       * The component for updating options according to a current window width.
       *
       * @param {Splide} Splide - A Splide instance.
       *
       * @return {Object} - The component object.
       */

      /* harmony default export */

      var components_breakpoints = function (Splide) {
        /**
         * Store breakpoints.
         *
         * @type {Object|boolean}
         */
        var breakpoints = Splide.options.breakpoints;
        /**
         * The check function whose frequency of call is reduced.
         *
         * @type {Function}
         */

        var throttledCheck = throttle(check, THROTTLE);
        /**
         * Keep initial options.
         *
         * @type {Object}
         */

        var initialOptions;
        /**
         * An array containing objects of point and MediaQueryList.
         *
         * @type {Object[]}
         */

        var map = [];
        /**
         * Hold the previous breakpoint.
         *
         * @type {number|undefined}
         */

        var prevPoint;
        /**
         * Breakpoints component object.
         *
         * @type {Object}
         */

        var Breakpoints = {
          /**
           * Required only when the breakpoints definition is provided and browser supports matchMedia.
           *
           * @type {boolean}
           */
          required: breakpoints && matchMedia,

          /**
           * Called when the component is mounted.
           */
          mount: function mount() {
            map = Object.keys(breakpoints).sort(function (n, m) {
              return +n - +m;
            }).map(function (point) {
              return {
                point: point,
                mql: matchMedia("(max-width:" + point + "px)")
              };
            });
            /*
             * To keep monitoring resize event after destruction without "completely",
             * use native addEventListener instead of Splide.on.
             */

            this.destroy(true);
            addEventListener('resize', throttledCheck); // Keep initial options to apply them when no breakpoint matches.

            initialOptions = Splide.options;
            check();
          },

          /**
           * Destroy.
           *
           * @param {boolean} completely - Whether to destroy Splide completely.
           */
          destroy: function destroy(completely) {
            if (completely) {
              removeEventListener('resize', throttledCheck);
            }
          }
        };
        /**
         * Check the breakpoint.
         */

        function check() {
          var point = getPoint();

          if (point !== prevPoint) {
            prevPoint = point;
            var State = Splide.State;
            var options = breakpoints[point] || initialOptions;
            var destroy = options.destroy;

            if (destroy) {
              Splide.options = initialOptions;
              Splide.destroy(destroy === 'completely');
            } else {
              if (State.is(DESTROYED)) {
                Splide.mount();
              }

              Splide.options = options;
            }
          }
        }
        /**
         * Return the breakpoint matching current window width.
         * Note that Array.prototype.find is not supported by IE.
         *
         * @return {number|string} - A breakpoint as number or string. -1 if no point matches.
         */


        function getPoint() {
          var item = map.filter(function (item) {
            return item.mql.matches;
          })[0];
          return item ? item.point : -1;
        }

        return Breakpoints;
      }; // CONCATENATED MODULE: ./src/js/components/index.js

      /**
       * Export components.
       *
       * @author    Naotoshi Fujita
       * @copyright Naotoshi Fujita. All rights reserved.
       */


      var COMPLETE = {
        Options: components_options,
        Breakpoints: components_breakpoints,
        Controller: controller,
        Elements: components_elements,
        Track: components_track,
        Clones: components_clones,
        Layout: layout,
        Drag: drag,
        Click: click,
        Autoplay: components_autoplay,
        Cover: components_cover,
        Arrows: components_arrows,
        Pagination: components_pagination,
        LazyLoad: lazyload,
        Keyboard: components_keyboard,
        Sync: sync,
        A11y: a11y
      };
      var LIGHT = {
        Options: components_options,
        Controller: controller,
        Elements: components_elements,
        Track: components_track,
        Clones: components_clones,
        Layout: layout,
        Drag: drag,
        Click: click,
        Arrows: components_arrows,
        Pagination: components_pagination,
        A11y: a11y
      }; // CONCATENATED MODULE: ./build/module/module.js

      function _inheritsLoose(subClass, superClass) {
        subClass.prototype = Object.create(superClass.prototype);
        subClass.prototype.constructor = subClass;
        subClass.__proto__ = superClass;
      }
      /**
       * Export Splide class for import.
       *
       * @author    Naotoshi Fujita
       * @copyright Naotoshi Fujita. All rights reserved.
       */

      /**
       * Export Splide class for import from other projects.
       */


      var module_Splide = /*#__PURE__*/function (_Core) {
        _inheritsLoose(Splide, _Core);

        function Splide(root, options) {
          return _Core.call(this, root, options, COMPLETE) || this;
        }

        return Splide;
      }(splide_Splide);
      /***/

    }
    /******/
    ])
  );
});

/***/ }),

/***/ 143:
/***/ (function(module, exports, __webpack_require__) {

/* WEBPACK VAR INJECTION */(function(process, Buffer) {/**
 * @licstart The following is the entire license notice for the
 * Javascript code in this page
 *
 * Copyright 2020 Mozilla Foundation
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 * @licend The above is the entire license notice for the
 * Javascript code in this page
 */
(function webpackUniversalModuleDefinition(root, factory) {
  if (true) module.exports = factory();else {}
})(this, function () {
  return (
    /******/
    function (modules) {
      // webpackBootstrap

      /******/
      // The module cache

      /******/
      var installedModules = {};
      /******/

      /******/
      // The require function

      /******/

      function __w_pdfjs_require__(moduleId) {
        /******/

        /******/
        // Check if module is in cache

        /******/
        if (installedModules[moduleId]) {
          /******/
          return installedModules[moduleId].exports;
          /******/
        }
        /******/
        // Create a new module (and put it into the cache)

        /******/


        var module = installedModules[moduleId] = {
          /******/
          i: moduleId,

          /******/
          l: false,

          /******/
          exports: {}
          /******/

        };
        /******/

        /******/
        // Execute the module function

        /******/

        modules[moduleId].call(module.exports, module, module.exports, __w_pdfjs_require__);
        /******/

        /******/
        // Flag the module as loaded

        /******/

        module.l = true;
        /******/

        /******/
        // Return the exports of the module

        /******/

        return module.exports;
        /******/
      }
      /******/

      /******/

      /******/
      // expose the modules object (__webpack_modules__)

      /******/


      __w_pdfjs_require__.m = modules;
      /******/

      /******/
      // expose the module cache

      /******/

      __w_pdfjs_require__.c = installedModules;
      /******/

      /******/
      // define getter function for harmony exports

      /******/

      __w_pdfjs_require__.d = function (exports, name, getter) {
        /******/
        if (!__w_pdfjs_require__.o(exports, name)) {
          /******/
          Object.defineProperty(exports, name, {
            enumerable: true,
            get: getter
          });
          /******/
        }
        /******/

      };
      /******/

      /******/
      // define __esModule on exports

      /******/


      __w_pdfjs_require__.r = function (exports) {
        /******/
        if (typeof Symbol !== 'undefined' && Symbol.toStringTag) {
          /******/
          Object.defineProperty(exports, Symbol.toStringTag, {
            value: 'Module'
          });
          /******/
        }
        /******/


        Object.defineProperty(exports, '__esModule', {
          value: true
        });
        /******/
      };
      /******/

      /******/
      // create a fake namespace object

      /******/
      // mode & 1: value is a module id, require it

      /******/
      // mode & 2: merge all properties of value into the ns

      /******/
      // mode & 4: return value when already ns object

      /******/
      // mode & 8|1: behave like require

      /******/


      __w_pdfjs_require__.t = function (value, mode) {
        /******/
        if (mode & 1) value = __w_pdfjs_require__(value);
        /******/

        if (mode & 8) return value;
        /******/

        if (mode & 4 && typeof value === 'object' && value && value.__esModule) return value;
        /******/

        var ns = Object.create(null);
        /******/

        __w_pdfjs_require__.r(ns);
        /******/


        Object.defineProperty(ns, 'default', {
          enumerable: true,
          value: value
        });
        /******/

        if (mode & 2 && typeof value != 'string') for (var key in value) __w_pdfjs_require__.d(ns, key, function (key) {
          return value[key];
        }.bind(null, key));
        /******/

        return ns;
        /******/
      };
      /******/

      /******/
      // getDefaultExport function for compatibility with non-harmony modules

      /******/


      __w_pdfjs_require__.n = function (module) {
        /******/
        var getter = module && module.__esModule ?
        /******/
        function getDefault() {
          return module['default'];
        } :
        /******/
        function getModuleExports() {
          return module;
        };
        /******/

        __w_pdfjs_require__.d(getter, 'a', getter);
        /******/


        return getter;
        /******/
      };
      /******/

      /******/
      // Object.prototype.hasOwnProperty.call

      /******/


      __w_pdfjs_require__.o = function (object, property) {
        return Object.prototype.hasOwnProperty.call(object, property);
      };
      /******/

      /******/
      // __webpack_public_path__

      /******/


      __w_pdfjs_require__.p = "";
      /******/

      /******/

      /******/
      // Load entry module and return exports

      /******/

      return __w_pdfjs_require__(__w_pdfjs_require__.s = 0);
      /******/
    }(
    /************************************************************************/

    /******/
    [
    /* 0 */

    /***/
    function (module, exports, __w_pdfjs_require__) {
      "use strict";

      Object.defineProperty(exports, "__esModule", {
        value: true
      });
      Object.defineProperty(exports, "addLinkAttributes", {
        enumerable: true,
        get: function () {
          return _display_utils.addLinkAttributes;
        }
      });
      Object.defineProperty(exports, "getFilenameFromUrl", {
        enumerable: true,
        get: function () {
          return _display_utils.getFilenameFromUrl;
        }
      });
      Object.defineProperty(exports, "LinkTarget", {
        enumerable: true,
        get: function () {
          return _display_utils.LinkTarget;
        }
      });
      Object.defineProperty(exports, "loadScript", {
        enumerable: true,
        get: function () {
          return _display_utils.loadScript;
        }
      });
      Object.defineProperty(exports, "PDFDateString", {
        enumerable: true,
        get: function () {
          return _display_utils.PDFDateString;
        }
      });
      Object.defineProperty(exports, "RenderingCancelledException", {
        enumerable: true,
        get: function () {
          return _display_utils.RenderingCancelledException;
        }
      });
      Object.defineProperty(exports, "build", {
        enumerable: true,
        get: function () {
          return _api.build;
        }
      });
      Object.defineProperty(exports, "getDocument", {
        enumerable: true,
        get: function () {
          return _api.getDocument;
        }
      });
      Object.defineProperty(exports, "LoopbackPort", {
        enumerable: true,
        get: function () {
          return _api.LoopbackPort;
        }
      });
      Object.defineProperty(exports, "PDFDataRangeTransport", {
        enumerable: true,
        get: function () {
          return _api.PDFDataRangeTransport;
        }
      });
      Object.defineProperty(exports, "PDFWorker", {
        enumerable: true,
        get: function () {
          return _api.PDFWorker;
        }
      });
      Object.defineProperty(exports, "version", {
        enumerable: true,
        get: function () {
          return _api.version;
        }
      });
      Object.defineProperty(exports, "CMapCompressionType", {
        enumerable: true,
        get: function () {
          return _util.CMapCompressionType;
        }
      });
      Object.defineProperty(exports, "createObjectURL", {
        enumerable: true,
        get: function () {
          return _util.createObjectURL;
        }
      });
      Object.defineProperty(exports, "createPromiseCapability", {
        enumerable: true,
        get: function () {
          return _util.createPromiseCapability;
        }
      });
      Object.defineProperty(exports, "createValidAbsoluteUrl", {
        enumerable: true,
        get: function () {
          return _util.createValidAbsoluteUrl;
        }
      });
      Object.defineProperty(exports, "InvalidPDFException", {
        enumerable: true,
        get: function () {
          return _util.InvalidPDFException;
        }
      });
      Object.defineProperty(exports, "MissingPDFException", {
        enumerable: true,
        get: function () {
          return _util.MissingPDFException;
        }
      });
      Object.defineProperty(exports, "OPS", {
        enumerable: true,
        get: function () {
          return _util.OPS;
        }
      });
      Object.defineProperty(exports, "PasswordResponses", {
        enumerable: true,
        get: function () {
          return _util.PasswordResponses;
        }
      });
      Object.defineProperty(exports, "PermissionFlag", {
        enumerable: true,
        get: function () {
          return _util.PermissionFlag;
        }
      });
      Object.defineProperty(exports, "removeNullCharacters", {
        enumerable: true,
        get: function () {
          return _util.removeNullCharacters;
        }
      });
      Object.defineProperty(exports, "shadow", {
        enumerable: true,
        get: function () {
          return _util.shadow;
        }
      });
      Object.defineProperty(exports, "UnexpectedResponseException", {
        enumerable: true,
        get: function () {
          return _util.UnexpectedResponseException;
        }
      });
      Object.defineProperty(exports, "UNSUPPORTED_FEATURES", {
        enumerable: true,
        get: function () {
          return _util.UNSUPPORTED_FEATURES;
        }
      });
      Object.defineProperty(exports, "Util", {
        enumerable: true,
        get: function () {
          return _util.Util;
        }
      });
      Object.defineProperty(exports, "VerbosityLevel", {
        enumerable: true,
        get: function () {
          return _util.VerbosityLevel;
        }
      });
      Object.defineProperty(exports, "AnnotationLayer", {
        enumerable: true,
        get: function () {
          return _annotation_layer.AnnotationLayer;
        }
      });
      Object.defineProperty(exports, "apiCompatibilityParams", {
        enumerable: true,
        get: function () {
          return _api_compatibility.apiCompatibilityParams;
        }
      });
      Object.defineProperty(exports, "GlobalWorkerOptions", {
        enumerable: true,
        get: function () {
          return _worker_options.GlobalWorkerOptions;
        }
      });
      Object.defineProperty(exports, "renderTextLayer", {
        enumerable: true,
        get: function () {
          return _text_layer.renderTextLayer;
        }
      });
      Object.defineProperty(exports, "SVGGraphics", {
        enumerable: true,
        get: function () {
          return _svg.SVGGraphics;
        }
      });

      var _display_utils = __w_pdfjs_require__(1);

      var _api = __w_pdfjs_require__(5);

      var _util = __w_pdfjs_require__(2);

      var _annotation_layer = __w_pdfjs_require__(16);

      var _api_compatibility = __w_pdfjs_require__(7);

      var _worker_options = __w_pdfjs_require__(10);

      var _text_layer = __w_pdfjs_require__(17);

      var _svg = __w_pdfjs_require__(18);

      const pdfjsVersion = '2.5.207';
      const pdfjsBuild = '0974d605';
      {
        const {
          isNodeJS
        } = __w_pdfjs_require__(4);

        if (isNodeJS) {
          const PDFNodeStream = __w_pdfjs_require__(19).PDFNodeStream;

          (0, _api.setPDFNetworkStreamFactory)(params => {
            return new PDFNodeStream(params);
          });
        } else {
          const PDFNetworkStream = __w_pdfjs_require__(22).PDFNetworkStream;

          let PDFFetchStream;

          if ((0, _display_utils.isFetchSupported)()) {
            PDFFetchStream = __w_pdfjs_require__(23).PDFFetchStream;
          }

          (0, _api.setPDFNetworkStreamFactory)(params => {
            if (PDFFetchStream && (0, _display_utils.isValidFetchUrl)(params.url)) {
              return new PDFFetchStream(params);
            }

            return new PDFNetworkStream(params);
          });
        }
      }
      /***/
    },
    /* 1 */

    /***/
    function (module, exports, __w_pdfjs_require__) {
      "use strict";

      Object.defineProperty(exports, "__esModule", {
        value: true
      });
      exports.addLinkAttributes = addLinkAttributes;
      exports.getFilenameFromUrl = getFilenameFromUrl;
      exports.isFetchSupported = isFetchSupported;
      exports.isValidFetchUrl = isValidFetchUrl;
      exports.loadScript = loadScript;
      exports.deprecated = deprecated;
      exports.PDFDateString = exports.StatTimer = exports.DOMSVGFactory = exports.DOMCMapReaderFactory = exports.DOMCanvasFactory = exports.DEFAULT_LINK_REL = exports.LinkTarget = exports.RenderingCancelledException = exports.PageViewport = void 0;

      var _util = __w_pdfjs_require__(2);

      const DEFAULT_LINK_REL = "noopener noreferrer nofollow";
      exports.DEFAULT_LINK_REL = DEFAULT_LINK_REL;
      const SVG_NS = "http://www.w3.org/2000/svg";

      class DOMCanvasFactory {
        create(width, height) {
          if (width <= 0 || height <= 0) {
            throw new Error("Invalid canvas size");
          }

          const canvas = document.createElement("canvas");
          const context = canvas.getContext("2d");
          canvas.width = width;
          canvas.height = height;
          return {
            canvas,
            context
          };
        }

        reset(canvasAndContext, width, height) {
          if (!canvasAndContext.canvas) {
            throw new Error("Canvas is not specified");
          }

          if (width <= 0 || height <= 0) {
            throw new Error("Invalid canvas size");
          }

          canvasAndContext.canvas.width = width;
          canvasAndContext.canvas.height = height;
        }

        destroy(canvasAndContext) {
          if (!canvasAndContext.canvas) {
            throw new Error("Canvas is not specified");
          }

          canvasAndContext.canvas.width = 0;
          canvasAndContext.canvas.height = 0;
          canvasAndContext.canvas = null;
          canvasAndContext.context = null;
        }

      }

      exports.DOMCanvasFactory = DOMCanvasFactory;

      class DOMCMapReaderFactory {
        constructor({
          baseUrl = null,
          isCompressed = false
        }) {
          this.baseUrl = baseUrl;
          this.isCompressed = isCompressed;
        }

        async fetch({
          name
        }) {
          if (!this.baseUrl) {
            throw new Error('The CMap "baseUrl" parameter must be specified, ensure that ' + 'the "cMapUrl" and "cMapPacked" API parameters are provided.');
          }

          if (!name) {
            throw new Error("CMap name must be specified.");
          }

          const url = this.baseUrl + name + (this.isCompressed ? ".bcmap" : "");
          const compressionType = this.isCompressed ? _util.CMapCompressionType.BINARY : _util.CMapCompressionType.NONE;

          if (isFetchSupported() && isValidFetchUrl(url, document.baseURI)) {
            return fetch(url).then(async response => {
              if (!response.ok) {
                throw new Error(response.statusText);
              }

              let cMapData;

              if (this.isCompressed) {
                cMapData = new Uint8Array(await response.arrayBuffer());
              } else {
                cMapData = (0, _util.stringToBytes)(await response.text());
              }

              return {
                cMapData,
                compressionType
              };
            }).catch(reason => {
              throw new Error(`Unable to load ${this.isCompressed ? "binary " : ""}` + `CMap at: ${url}`);
            });
          }

          return new Promise((resolve, reject) => {
            const request = new XMLHttpRequest();
            request.open("GET", url, true);

            if (this.isCompressed) {
              request.responseType = "arraybuffer";
            }

            request.onreadystatechange = () => {
              if (request.readyState !== XMLHttpRequest.DONE) {
                return;
              }

              if (request.status === 200 || request.status === 0) {
                let cMapData;

                if (this.isCompressed && request.response) {
                  cMapData = new Uint8Array(request.response);
                } else if (!this.isCompressed && request.responseText) {
                  cMapData = (0, _util.stringToBytes)(request.responseText);
                }

                if (cMapData) {
                  resolve({
                    cMapData,
                    compressionType
                  });
                  return;
                }
              }

              reject(new Error(request.statusText));
            };

            request.send(null);
          }).catch(reason => {
            throw new Error(`Unable to load ${this.isCompressed ? "binary " : ""}` + `CMap at: ${url}`);
          });
        }

      }

      exports.DOMCMapReaderFactory = DOMCMapReaderFactory;

      class DOMSVGFactory {
        create(width, height) {
          (0, _util.assert)(width > 0 && height > 0, "Invalid SVG dimensions");
          const svg = document.createElementNS(SVG_NS, "svg:svg");
          svg.setAttribute("version", "1.1");
          svg.setAttribute("width", width + "px");
          svg.setAttribute("height", height + "px");
          svg.setAttribute("preserveAspectRatio", "none");
          svg.setAttribute("viewBox", "0 0 " + width + " " + height);
          return svg;
        }

        createElement(type) {
          (0, _util.assert)(typeof type === "string", "Invalid SVG element type");
          return document.createElementNS(SVG_NS, type);
        }

      }

      exports.DOMSVGFactory = DOMSVGFactory;

      class PageViewport {
        constructor({
          viewBox,
          scale,
          rotation,
          offsetX = 0,
          offsetY = 0,
          dontFlip = false
        }) {
          this.viewBox = viewBox;
          this.scale = scale;
          this.rotation = rotation;
          this.offsetX = offsetX;
          this.offsetY = offsetY;
          const centerX = (viewBox[2] + viewBox[0]) / 2;
          const centerY = (viewBox[3] + viewBox[1]) / 2;
          let rotateA, rotateB, rotateC, rotateD;
          rotation = rotation % 360;
          rotation = rotation < 0 ? rotation + 360 : rotation;

          switch (rotation) {
            case 180:
              rotateA = -1;
              rotateB = 0;
              rotateC = 0;
              rotateD = 1;
              break;

            case 90:
              rotateA = 0;
              rotateB = 1;
              rotateC = 1;
              rotateD = 0;
              break;

            case 270:
              rotateA = 0;
              rotateB = -1;
              rotateC = -1;
              rotateD = 0;
              break;

            case 0:
              rotateA = 1;
              rotateB = 0;
              rotateC = 0;
              rotateD = -1;
              break;

            default:
              throw new Error("PageViewport: Invalid rotation, must be a multiple of 90 degrees.");
          }

          if (dontFlip) {
            rotateC = -rotateC;
            rotateD = -rotateD;
          }

          let offsetCanvasX, offsetCanvasY;
          let width, height;

          if (rotateA === 0) {
            offsetCanvasX = Math.abs(centerY - viewBox[1]) * scale + offsetX;
            offsetCanvasY = Math.abs(centerX - viewBox[0]) * scale + offsetY;
            width = Math.abs(viewBox[3] - viewBox[1]) * scale;
            height = Math.abs(viewBox[2] - viewBox[0]) * scale;
          } else {
            offsetCanvasX = Math.abs(centerX - viewBox[0]) * scale + offsetX;
            offsetCanvasY = Math.abs(centerY - viewBox[1]) * scale + offsetY;
            width = Math.abs(viewBox[2] - viewBox[0]) * scale;
            height = Math.abs(viewBox[3] - viewBox[1]) * scale;
          }

          this.transform = [rotateA * scale, rotateB * scale, rotateC * scale, rotateD * scale, offsetCanvasX - rotateA * scale * centerX - rotateC * scale * centerY, offsetCanvasY - rotateB * scale * centerX - rotateD * scale * centerY];
          this.width = width;
          this.height = height;
        }

        clone({
          scale = this.scale,
          rotation = this.rotation,
          offsetX = this.offsetX,
          offsetY = this.offsetY,
          dontFlip = false
        } = {}) {
          return new PageViewport({
            viewBox: this.viewBox.slice(),
            scale,
            rotation,
            offsetX,
            offsetY,
            dontFlip
          });
        }

        convertToViewportPoint(x, y) {
          return _util.Util.applyTransform([x, y], this.transform);
        }

        convertToViewportRectangle(rect) {
          const topLeft = _util.Util.applyTransform([rect[0], rect[1]], this.transform);

          const bottomRight = _util.Util.applyTransform([rect[2], rect[3]], this.transform);

          return [topLeft[0], topLeft[1], bottomRight[0], bottomRight[1]];
        }

        convertToPdfPoint(x, y) {
          return _util.Util.applyInverseTransform([x, y], this.transform);
        }

      }

      exports.PageViewport = PageViewport;

      class RenderingCancelledException extends _util.BaseException {
        constructor(msg, type) {
          super(msg);
          this.type = type;
        }

      }

      exports.RenderingCancelledException = RenderingCancelledException;
      const LinkTarget = {
        NONE: 0,
        SELF: 1,
        BLANK: 2,
        PARENT: 3,
        TOP: 4
      };
      exports.LinkTarget = LinkTarget;

      function addLinkAttributes(link, {
        url,
        target,
        rel,
        enabled = true
      } = {}) {
        (0, _util.assert)(url && typeof url === "string", 'addLinkAttributes: A valid "url" parameter must provided.');
        const urlNullRemoved = (0, _util.removeNullCharacters)(url);

        if (enabled) {
          link.href = link.title = urlNullRemoved;
        } else {
          link.href = "";
          link.title = `Disabled: ${urlNullRemoved}`;

          link.onclick = () => {
            return false;
          };
        }

        let targetStr = "";

        switch (target) {
          case LinkTarget.NONE:
            break;

          case LinkTarget.SELF:
            targetStr = "_self";
            break;

          case LinkTarget.BLANK:
            targetStr = "_blank";
            break;

          case LinkTarget.PARENT:
            targetStr = "_parent";
            break;

          case LinkTarget.TOP:
            targetStr = "_top";
            break;
        }

        link.target = targetStr;
        link.rel = typeof rel === "string" ? rel : DEFAULT_LINK_REL;
      }

      function getFilenameFromUrl(url) {
        const anchor = url.indexOf("#");
        const query = url.indexOf("?");
        const end = Math.min(anchor > 0 ? anchor : url.length, query > 0 ? query : url.length);
        return url.substring(url.lastIndexOf("/", end) + 1, end);
      }

      class StatTimer {
        constructor() {
          this.started = Object.create(null);
          this.times = [];
        }

        time(name) {
          if (name in this.started) {
            (0, _util.warn)(`Timer is already running for ${name}`);
          }

          this.started[name] = Date.now();
        }

        timeEnd(name) {
          if (!(name in this.started)) {
            (0, _util.warn)(`Timer has not been started for ${name}`);
          }

          this.times.push({
            name,
            start: this.started[name],
            end: Date.now()
          });
          delete this.started[name];
        }

        toString() {
          const outBuf = [];
          let longest = 0;

          for (const time of this.times) {
            const name = time.name;

            if (name.length > longest) {
              longest = name.length;
            }
          }

          for (const time of this.times) {
            const duration = time.end - time.start;
            outBuf.push(`${time.name.padEnd(longest)} ${duration}ms\n`);
          }

          return outBuf.join("");
        }

      }

      exports.StatTimer = StatTimer;

      function isFetchSupported() {
        return typeof fetch !== "undefined" && typeof Response !== "undefined" && "body" in Response.prototype && typeof ReadableStream !== "undefined";
      }

      function isValidFetchUrl(url, baseUrl) {
        try {
          const {
            protocol
          } = baseUrl ? new URL(url, baseUrl) : new URL(url);
          return protocol === "http:" || protocol === "https:";
        } catch (ex) {
          return false;
        }
      }

      function loadScript(src) {
        return new Promise((resolve, reject) => {
          const script = document.createElement("script");
          script.src = src;
          script.onload = resolve;

          script.onerror = function () {
            reject(new Error(`Cannot load script at: ${script.src}`));
          };

          (document.head || document.documentElement).appendChild(script);
        });
      }

      function deprecated(details) {
        console.log("Deprecated API usage: " + details);
      }

      let pdfDateStringRegex;

      class PDFDateString {
        static toDateObject(input) {
          if (!input || !(0, _util.isString)(input)) {
            return null;
          }

          if (!pdfDateStringRegex) {
            pdfDateStringRegex = new RegExp("^D:" + "(\\d{4})" + "(\\d{2})?" + "(\\d{2})?" + "(\\d{2})?" + "(\\d{2})?" + "(\\d{2})?" + "([Z|+|-])?" + "(\\d{2})?" + "'?" + "(\\d{2})?" + "'?");
          }

          const matches = pdfDateStringRegex.exec(input);

          if (!matches) {
            return null;
          }

          const year = parseInt(matches[1], 10);
          let month = parseInt(matches[2], 10);
          month = month >= 1 && month <= 12 ? month - 1 : 0;
          let day = parseInt(matches[3], 10);
          day = day >= 1 && day <= 31 ? day : 1;
          let hour = parseInt(matches[4], 10);
          hour = hour >= 0 && hour <= 23 ? hour : 0;
          let minute = parseInt(matches[5], 10);
          minute = minute >= 0 && minute <= 59 ? minute : 0;
          let second = parseInt(matches[6], 10);
          second = second >= 0 && second <= 59 ? second : 0;
          const universalTimeRelation = matches[7] || "Z";
          let offsetHour = parseInt(matches[8], 10);
          offsetHour = offsetHour >= 0 && offsetHour <= 23 ? offsetHour : 0;
          let offsetMinute = parseInt(matches[9], 10) || 0;
          offsetMinute = offsetMinute >= 0 && offsetMinute <= 59 ? offsetMinute : 0;

          if (universalTimeRelation === "-") {
            hour += offsetHour;
            minute += offsetMinute;
          } else if (universalTimeRelation === "+") {
            hour -= offsetHour;
            minute -= offsetMinute;
          }

          return new Date(Date.UTC(year, month, day, hour, minute, second));
        }

      }

      exports.PDFDateString = PDFDateString;
      /***/
    },
    /* 2 */

    /***/
    function (module, exports, __w_pdfjs_require__) {
      "use strict";

      Object.defineProperty(exports, "__esModule", {
        value: true
      });
      exports.arrayByteLength = arrayByteLength;
      exports.arraysToBytes = arraysToBytes;
      exports.assert = assert;
      exports.bytesToString = bytesToString;
      exports.createPromiseCapability = createPromiseCapability;
      exports.getVerbosityLevel = getVerbosityLevel;
      exports.info = info;
      exports.isArrayBuffer = isArrayBuffer;
      exports.isArrayEqual = isArrayEqual;
      exports.isBool = isBool;
      exports.isEmptyObj = isEmptyObj;
      exports.isNum = isNum;
      exports.isString = isString;
      exports.isSameOrigin = isSameOrigin;
      exports.createValidAbsoluteUrl = createValidAbsoluteUrl;
      exports.removeNullCharacters = removeNullCharacters;
      exports.setVerbosityLevel = setVerbosityLevel;
      exports.shadow = shadow;
      exports.string32 = string32;
      exports.stringToBytes = stringToBytes;
      exports.stringToPDFString = stringToPDFString;
      exports.stringToUTF8String = stringToUTF8String;
      exports.utf8StringToString = utf8StringToString;
      exports.warn = warn;
      exports.unreachable = unreachable;
      exports.IsEvalSupportedCached = exports.IsLittleEndianCached = exports.createObjectURL = exports.FormatError = exports.Util = exports.UnknownErrorException = exports.UnexpectedResponseException = exports.TextRenderingMode = exports.StreamType = exports.PermissionFlag = exports.PasswordResponses = exports.PasswordException = exports.MissingPDFException = exports.InvalidPDFException = exports.AbortException = exports.CMapCompressionType = exports.ImageKind = exports.FontType = exports.AnnotationType = exports.AnnotationStateModelType = exports.AnnotationReviewState = exports.AnnotationReplyType = exports.AnnotationMarkedState = exports.AnnotationFlag = exports.AnnotationFieldFlag = exports.AnnotationBorderStyleType = exports.UNSUPPORTED_FEATURES = exports.VerbosityLevel = exports.OPS = exports.IDENTITY_MATRIX = exports.FONT_IDENTITY_MATRIX = exports.BaseException = void 0;

      __w_pdfjs_require__(3);

      const IDENTITY_MATRIX = [1, 0, 0, 1, 0, 0];
      exports.IDENTITY_MATRIX = IDENTITY_MATRIX;
      const FONT_IDENTITY_MATRIX = [0.001, 0, 0, 0.001, 0, 0];
      exports.FONT_IDENTITY_MATRIX = FONT_IDENTITY_MATRIX;
      const PermissionFlag = {
        PRINT: 0x04,
        MODIFY_CONTENTS: 0x08,
        COPY: 0x10,
        MODIFY_ANNOTATIONS: 0x20,
        FILL_INTERACTIVE_FORMS: 0x100,
        COPY_FOR_ACCESSIBILITY: 0x200,
        ASSEMBLE: 0x400,
        PRINT_HIGH_QUALITY: 0x800
      };
      exports.PermissionFlag = PermissionFlag;
      const TextRenderingMode = {
        FILL: 0,
        STROKE: 1,
        FILL_STROKE: 2,
        INVISIBLE: 3,
        FILL_ADD_TO_PATH: 4,
        STROKE_ADD_TO_PATH: 5,
        FILL_STROKE_ADD_TO_PATH: 6,
        ADD_TO_PATH: 7,
        FILL_STROKE_MASK: 3,
        ADD_TO_PATH_FLAG: 4
      };
      exports.TextRenderingMode = TextRenderingMode;
      const ImageKind = {
        GRAYSCALE_1BPP: 1,
        RGB_24BPP: 2,
        RGBA_32BPP: 3
      };
      exports.ImageKind = ImageKind;
      const AnnotationType = {
        TEXT: 1,
        LINK: 2,
        FREETEXT: 3,
        LINE: 4,
        SQUARE: 5,
        CIRCLE: 6,
        POLYGON: 7,
        POLYLINE: 8,
        HIGHLIGHT: 9,
        UNDERLINE: 10,
        SQUIGGLY: 11,
        STRIKEOUT: 12,
        STAMP: 13,
        CARET: 14,
        INK: 15,
        POPUP: 16,
        FILEATTACHMENT: 17,
        SOUND: 18,
        MOVIE: 19,
        WIDGET: 20,
        SCREEN: 21,
        PRINTERMARK: 22,
        TRAPNET: 23,
        WATERMARK: 24,
        THREED: 25,
        REDACT: 26
      };
      exports.AnnotationType = AnnotationType;
      const AnnotationStateModelType = {
        MARKED: "Marked",
        REVIEW: "Review"
      };
      exports.AnnotationStateModelType = AnnotationStateModelType;
      const AnnotationMarkedState = {
        MARKED: "Marked",
        UNMARKED: "Unmarked"
      };
      exports.AnnotationMarkedState = AnnotationMarkedState;
      const AnnotationReviewState = {
        ACCEPTED: "Accepted",
        REJECTED: "Rejected",
        CANCELLED: "Cancelled",
        COMPLETED: "Completed",
        NONE: "None"
      };
      exports.AnnotationReviewState = AnnotationReviewState;
      const AnnotationReplyType = {
        GROUP: "Group",
        REPLY: "R"
      };
      exports.AnnotationReplyType = AnnotationReplyType;
      const AnnotationFlag = {
        INVISIBLE: 0x01,
        HIDDEN: 0x02,
        PRINT: 0x04,
        NOZOOM: 0x08,
        NOROTATE: 0x10,
        NOVIEW: 0x20,
        READONLY: 0x40,
        LOCKED: 0x80,
        TOGGLENOVIEW: 0x100,
        LOCKEDCONTENTS: 0x200
      };
      exports.AnnotationFlag = AnnotationFlag;
      const AnnotationFieldFlag = {
        READONLY: 0x0000001,
        REQUIRED: 0x0000002,
        NOEXPORT: 0x0000004,
        MULTILINE: 0x0001000,
        PASSWORD: 0x0002000,
        NOTOGGLETOOFF: 0x0004000,
        RADIO: 0x0008000,
        PUSHBUTTON: 0x0010000,
        COMBO: 0x0020000,
        EDIT: 0x0040000,
        SORT: 0x0080000,
        FILESELECT: 0x0100000,
        MULTISELECT: 0x0200000,
        DONOTSPELLCHECK: 0x0400000,
        DONOTSCROLL: 0x0800000,
        COMB: 0x1000000,
        RICHTEXT: 0x2000000,
        RADIOSINUNISON: 0x2000000,
        COMMITONSELCHANGE: 0x4000000
      };
      exports.AnnotationFieldFlag = AnnotationFieldFlag;
      const AnnotationBorderStyleType = {
        SOLID: 1,
        DASHED: 2,
        BEVELED: 3,
        INSET: 4,
        UNDERLINE: 5
      };
      exports.AnnotationBorderStyleType = AnnotationBorderStyleType;
      const StreamType = {
        UNKNOWN: "UNKNOWN",
        FLATE: "FLATE",
        LZW: "LZW",
        DCT: "DCT",
        JPX: "JPX",
        JBIG: "JBIG",
        A85: "A85",
        AHX: "AHX",
        CCF: "CCF",
        RLX: "RLX"
      };
      exports.StreamType = StreamType;
      const FontType = {
        UNKNOWN: "UNKNOWN",
        TYPE1: "TYPE1",
        TYPE1C: "TYPE1C",
        CIDFONTTYPE0: "CIDFONTTYPE0",
        CIDFONTTYPE0C: "CIDFONTTYPE0C",
        TRUETYPE: "TRUETYPE",
        CIDFONTTYPE2: "CIDFONTTYPE2",
        TYPE3: "TYPE3",
        OPENTYPE: "OPENTYPE",
        TYPE0: "TYPE0",
        MMTYPE1: "MMTYPE1"
      };
      exports.FontType = FontType;
      const VerbosityLevel = {
        ERRORS: 0,
        WARNINGS: 1,
        INFOS: 5
      };
      exports.VerbosityLevel = VerbosityLevel;
      const CMapCompressionType = {
        NONE: 0,
        BINARY: 1,
        STREAM: 2
      };
      exports.CMapCompressionType = CMapCompressionType;
      const OPS = {
        dependency: 1,
        setLineWidth: 2,
        setLineCap: 3,
        setLineJoin: 4,
        setMiterLimit: 5,
        setDash: 6,
        setRenderingIntent: 7,
        setFlatness: 8,
        setGState: 9,
        save: 10,
        restore: 11,
        transform: 12,
        moveTo: 13,
        lineTo: 14,
        curveTo: 15,
        curveTo2: 16,
        curveTo3: 17,
        closePath: 18,
        rectangle: 19,
        stroke: 20,
        closeStroke: 21,
        fill: 22,
        eoFill: 23,
        fillStroke: 24,
        eoFillStroke: 25,
        closeFillStroke: 26,
        closeEOFillStroke: 27,
        endPath: 28,
        clip: 29,
        eoClip: 30,
        beginText: 31,
        endText: 32,
        setCharSpacing: 33,
        setWordSpacing: 34,
        setHScale: 35,
        setLeading: 36,
        setFont: 37,
        setTextRenderingMode: 38,
        setTextRise: 39,
        moveText: 40,
        setLeadingMoveText: 41,
        setTextMatrix: 42,
        nextLine: 43,
        showText: 44,
        showSpacedText: 45,
        nextLineShowText: 46,
        nextLineSetSpacingShowText: 47,
        setCharWidth: 48,
        setCharWidthAndBounds: 49,
        setStrokeColorSpace: 50,
        setFillColorSpace: 51,
        setStrokeColor: 52,
        setStrokeColorN: 53,
        setFillColor: 54,
        setFillColorN: 55,
        setStrokeGray: 56,
        setFillGray: 57,
        setStrokeRGBColor: 58,
        setFillRGBColor: 59,
        setStrokeCMYKColor: 60,
        setFillCMYKColor: 61,
        shadingFill: 62,
        beginInlineImage: 63,
        beginImageData: 64,
        endInlineImage: 65,
        paintXObject: 66,
        markPoint: 67,
        markPointProps: 68,
        beginMarkedContent: 69,
        beginMarkedContentProps: 70,
        endMarkedContent: 71,
        beginCompat: 72,
        endCompat: 73,
        paintFormXObjectBegin: 74,
        paintFormXObjectEnd: 75,
        beginGroup: 76,
        endGroup: 77,
        beginAnnotations: 78,
        endAnnotations: 79,
        beginAnnotation: 80,
        endAnnotation: 81,
        paintJpegXObject: 82,
        paintImageMaskXObject: 83,
        paintImageMaskXObjectGroup: 84,
        paintImageXObject: 85,
        paintInlineImageXObject: 86,
        paintInlineImageXObjectGroup: 87,
        paintImageXObjectRepeat: 88,
        paintImageMaskXObjectRepeat: 89,
        paintSolidColorImageMask: 90,
        constructPath: 91
      };
      exports.OPS = OPS;
      const UNSUPPORTED_FEATURES = {
        unknown: "unknown",
        forms: "forms",
        javaScript: "javaScript",
        smask: "smask",
        shadingPattern: "shadingPattern",
        font: "font",
        errorTilingPattern: "errorTilingPattern",
        errorExtGState: "errorExtGState",
        errorXObject: "errorXObject",
        errorFontLoadType3: "errorFontLoadType3",
        errorFontState: "errorFontState",
        errorFontMissing: "errorFontMissing",
        errorFontTranslate: "errorFontTranslate",
        errorColorSpace: "errorColorSpace",
        errorOperatorList: "errorOperatorList",
        errorFontToUnicode: "errorFontToUnicode",
        errorFontLoadNative: "errorFontLoadNative",
        errorFontGetPath: "errorFontGetPath"
      };
      exports.UNSUPPORTED_FEATURES = UNSUPPORTED_FEATURES;
      const PasswordResponses = {
        NEED_PASSWORD: 1,
        INCORRECT_PASSWORD: 2
      };
      exports.PasswordResponses = PasswordResponses;
      let verbosity = VerbosityLevel.WARNINGS;

      function setVerbosityLevel(level) {
        if (Number.isInteger(level)) {
          verbosity = level;
        }
      }

      function getVerbosityLevel() {
        return verbosity;
      }

      function info(msg) {
        if (verbosity >= VerbosityLevel.INFOS) {
          console.log(`Info: ${msg}`);
        }
      }

      function warn(msg) {
        if (verbosity >= VerbosityLevel.WARNINGS) {
          console.log(`Warning: ${msg}`);
        }
      }

      function unreachable(msg) {
        throw new Error(msg);
      }

      function assert(cond, msg) {
        if (!cond) {
          unreachable(msg);
        }
      }

      function isSameOrigin(baseUrl, otherUrl) {
        let base;

        try {
          base = new URL(baseUrl);

          if (!base.origin || base.origin === "null") {
            return false;
          }
        } catch (e) {
          return false;
        }

        const other = new URL(otherUrl, base);
        return base.origin === other.origin;
      }

      function _isValidProtocol(url) {
        if (!url) {
          return false;
        }

        switch (url.protocol) {
          case "http:":
          case "https:":
          case "ftp:":
          case "mailto:":
          case "tel:":
            return true;

          default:
            return false;
        }
      }

      function createValidAbsoluteUrl(url, baseUrl) {
        if (!url) {
          return null;
        }

        try {
          const absoluteUrl = baseUrl ? new URL(url, baseUrl) : new URL(url);

          if (_isValidProtocol(absoluteUrl)) {
            return absoluteUrl;
          }
        } catch (ex) {}

        return null;
      }

      function shadow(obj, prop, value) {
        Object.defineProperty(obj, prop, {
          value,
          enumerable: true,
          configurable: true,
          writable: false
        });
        return value;
      }

      const BaseException = function BaseExceptionClosure() {
        function BaseException(message) {
          if (this.constructor === BaseException) {
            unreachable("Cannot initialize BaseException.");
          }

          this.message = message;
          this.name = this.constructor.name;
        }

        BaseException.prototype = new Error();
        BaseException.constructor = BaseException;
        return BaseException;
      }();

      exports.BaseException = BaseException;

      class PasswordException extends BaseException {
        constructor(msg, code) {
          super(msg);
          this.code = code;
        }

      }

      exports.PasswordException = PasswordException;

      class UnknownErrorException extends BaseException {
        constructor(msg, details) {
          super(msg);
          this.details = details;
        }

      }

      exports.UnknownErrorException = UnknownErrorException;

      class InvalidPDFException extends BaseException {}

      exports.InvalidPDFException = InvalidPDFException;

      class MissingPDFException extends BaseException {}

      exports.MissingPDFException = MissingPDFException;

      class UnexpectedResponseException extends BaseException {
        constructor(msg, status) {
          super(msg);
          this.status = status;
        }

      }

      exports.UnexpectedResponseException = UnexpectedResponseException;

      class FormatError extends BaseException {}

      exports.FormatError = FormatError;

      class AbortException extends BaseException {}

      exports.AbortException = AbortException;
      const NullCharactersRegExp = /\x00/g;

      function removeNullCharacters(str) {
        if (typeof str !== "string") {
          warn("The argument for removeNullCharacters must be a string.");
          return str;
        }

        return str.replace(NullCharactersRegExp, "");
      }

      function bytesToString(bytes) {
        assert(bytes !== null && typeof bytes === "object" && bytes.length !== undefined, "Invalid argument for bytesToString");
        const length = bytes.length;
        const MAX_ARGUMENT_COUNT = 8192;

        if (length < MAX_ARGUMENT_COUNT) {
          return String.fromCharCode.apply(null, bytes);
        }

        const strBuf = [];

        for (let i = 0; i < length; i += MAX_ARGUMENT_COUNT) {
          const chunkEnd = Math.min(i + MAX_ARGUMENT_COUNT, length);
          const chunk = bytes.subarray(i, chunkEnd);
          strBuf.push(String.fromCharCode.apply(null, chunk));
        }

        return strBuf.join("");
      }

      function stringToBytes(str) {
        assert(typeof str === "string", "Invalid argument for stringToBytes");
        const length = str.length;
        const bytes = new Uint8Array(length);

        for (let i = 0; i < length; ++i) {
          bytes[i] = str.charCodeAt(i) & 0xff;
        }

        return bytes;
      }

      function arrayByteLength(arr) {
        if (arr.length !== undefined) {
          return arr.length;
        }

        assert(arr.byteLength !== undefined, "arrayByteLength - invalid argument.");
        return arr.byteLength;
      }

      function arraysToBytes(arr) {
        const length = arr.length;

        if (length === 1 && arr[0] instanceof Uint8Array) {
          return arr[0];
        }

        let resultLength = 0;

        for (let i = 0; i < length; i++) {
          resultLength += arrayByteLength(arr[i]);
        }

        let pos = 0;
        const data = new Uint8Array(resultLength);

        for (let i = 0; i < length; i++) {
          let item = arr[i];

          if (!(item instanceof Uint8Array)) {
            if (typeof item === "string") {
              item = stringToBytes(item);
            } else {
              item = new Uint8Array(item);
            }
          }

          const itemLength = item.byteLength;
          data.set(item, pos);
          pos += itemLength;
        }

        return data;
      }

      function string32(value) {
        return String.fromCharCode(value >> 24 & 0xff, value >> 16 & 0xff, value >> 8 & 0xff, value & 0xff);
      }

      function isLittleEndian() {
        const buffer8 = new Uint8Array(4);
        buffer8[0] = 1;
        const view32 = new Uint32Array(buffer8.buffer, 0, 1);
        return view32[0] === 1;
      }

      const IsLittleEndianCached = {
        get value() {
          return shadow(this, "value", isLittleEndian());
        }

      };
      exports.IsLittleEndianCached = IsLittleEndianCached;

      function isEvalSupported() {
        try {
          new Function("");
          return true;
        } catch (e) {
          return false;
        }
      }

      const IsEvalSupportedCached = {
        get value() {
          return shadow(this, "value", isEvalSupported());
        }

      };
      exports.IsEvalSupportedCached = IsEvalSupportedCached;
      const rgbBuf = ["rgb(", 0, ",", 0, ",", 0, ")"];

      class Util {
        static makeCssRgb(r, g, b) {
          rgbBuf[1] = r;
          rgbBuf[3] = g;
          rgbBuf[5] = b;
          return rgbBuf.join("");
        }

        static transform(m1, m2) {
          return [m1[0] * m2[0] + m1[2] * m2[1], m1[1] * m2[0] + m1[3] * m2[1], m1[0] * m2[2] + m1[2] * m2[3], m1[1] * m2[2] + m1[3] * m2[3], m1[0] * m2[4] + m1[2] * m2[5] + m1[4], m1[1] * m2[4] + m1[3] * m2[5] + m1[5]];
        }

        static applyTransform(p, m) {
          const xt = p[0] * m[0] + p[1] * m[2] + m[4];
          const yt = p[0] * m[1] + p[1] * m[3] + m[5];
          return [xt, yt];
        }

        static applyInverseTransform(p, m) {
          const d = m[0] * m[3] - m[1] * m[2];
          const xt = (p[0] * m[3] - p[1] * m[2] + m[2] * m[5] - m[4] * m[3]) / d;
          const yt = (-p[0] * m[1] + p[1] * m[0] + m[4] * m[1] - m[5] * m[0]) / d;
          return [xt, yt];
        }

        static getAxialAlignedBoundingBox(r, m) {
          const p1 = Util.applyTransform(r, m);
          const p2 = Util.applyTransform(r.slice(2, 4), m);
          const p3 = Util.applyTransform([r[0], r[3]], m);
          const p4 = Util.applyTransform([r[2], r[1]], m);
          return [Math.min(p1[0], p2[0], p3[0], p4[0]), Math.min(p1[1], p2[1], p3[1], p4[1]), Math.max(p1[0], p2[0], p3[0], p4[0]), Math.max(p1[1], p2[1], p3[1], p4[1])];
        }

        static inverseTransform(m) {
          const d = m[0] * m[3] - m[1] * m[2];
          return [m[3] / d, -m[1] / d, -m[2] / d, m[0] / d, (m[2] * m[5] - m[4] * m[3]) / d, (m[4] * m[1] - m[5] * m[0]) / d];
        }

        static apply3dTransform(m, v) {
          return [m[0] * v[0] + m[1] * v[1] + m[2] * v[2], m[3] * v[0] + m[4] * v[1] + m[5] * v[2], m[6] * v[0] + m[7] * v[1] + m[8] * v[2]];
        }

        static singularValueDecompose2dScale(m) {
          const transpose = [m[0], m[2], m[1], m[3]];
          const a = m[0] * transpose[0] + m[1] * transpose[2];
          const b = m[0] * transpose[1] + m[1] * transpose[3];
          const c = m[2] * transpose[0] + m[3] * transpose[2];
          const d = m[2] * transpose[1] + m[3] * transpose[3];
          const first = (a + d) / 2;
          const second = Math.sqrt((a + d) * (a + d) - 4 * (a * d - c * b)) / 2;
          const sx = first + second || 1;
          const sy = first - second || 1;
          return [Math.sqrt(sx), Math.sqrt(sy)];
        }

        static normalizeRect(rect) {
          const r = rect.slice(0);

          if (rect[0] > rect[2]) {
            r[0] = rect[2];
            r[2] = rect[0];
          }

          if (rect[1] > rect[3]) {
            r[1] = rect[3];
            r[3] = rect[1];
          }

          return r;
        }

        static intersect(rect1, rect2) {
          function compare(a, b) {
            return a - b;
          }

          const orderedX = [rect1[0], rect1[2], rect2[0], rect2[2]].sort(compare);
          const orderedY = [rect1[1], rect1[3], rect2[1], rect2[3]].sort(compare);
          const result = [];
          rect1 = Util.normalizeRect(rect1);
          rect2 = Util.normalizeRect(rect2);

          if (orderedX[0] === rect1[0] && orderedX[1] === rect2[0] || orderedX[0] === rect2[0] && orderedX[1] === rect1[0]) {
            result[0] = orderedX[1];
            result[2] = orderedX[2];
          } else {
            return null;
          }

          if (orderedY[0] === rect1[1] && orderedY[1] === rect2[1] || orderedY[0] === rect2[1] && orderedY[1] === rect1[1]) {
            result[1] = orderedY[1];
            result[3] = orderedY[2];
          } else {
            return null;
          }

          return result;
        }

      }

      exports.Util = Util;
      const PDFStringTranslateTable = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x2D8, 0x2C7, 0x2C6, 0x2D9, 0x2DD, 0x2DB, 0x2DA, 0x2DC, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x2022, 0x2020, 0x2021, 0x2026, 0x2014, 0x2013, 0x192, 0x2044, 0x2039, 0x203A, 0x2212, 0x2030, 0x201E, 0x201C, 0x201D, 0x2018, 0x2019, 0x201A, 0x2122, 0xFB01, 0xFB02, 0x141, 0x152, 0x160, 0x178, 0x17D, 0x131, 0x142, 0x153, 0x161, 0x17E, 0, 0x20AC];

      function stringToPDFString(str) {
        const length = str.length,
              strBuf = [];

        if (str[0] === "\xFE" && str[1] === "\xFF") {
          for (let i = 2; i < length; i += 2) {
            strBuf.push(String.fromCharCode(str.charCodeAt(i) << 8 | str.charCodeAt(i + 1)));
          }
        } else if (str[0] === "\xFF" && str[1] === "\xFE") {
          for (let i = 2; i < length; i += 2) {
            strBuf.push(String.fromCharCode(str.charCodeAt(i + 1) << 8 | str.charCodeAt(i)));
          }
        } else {
          for (let i = 0; i < length; ++i) {
            const code = PDFStringTranslateTable[str.charCodeAt(i)];
            strBuf.push(code ? String.fromCharCode(code) : str.charAt(i));
          }
        }

        return strBuf.join("");
      }

      function stringToUTF8String(str) {
        return decodeURIComponent(escape(str));
      }

      function utf8StringToString(str) {
        return unescape(encodeURIComponent(str));
      }

      function isEmptyObj(obj) {
        for (const key in obj) {
          return false;
        }

        return true;
      }

      function isBool(v) {
        return typeof v === "boolean";
      }

      function isNum(v) {
        return typeof v === "number";
      }

      function isString(v) {
        return typeof v === "string";
      }

      function isArrayBuffer(v) {
        return typeof v === "object" && v !== null && v.byteLength !== undefined;
      }

      function isArrayEqual(arr1, arr2) {
        if (arr1.length !== arr2.length) {
          return false;
        }

        return arr1.every(function (element, index) {
          return element === arr2[index];
        });
      }

      function createPromiseCapability() {
        const capability = Object.create(null);
        let isSettled = false;
        Object.defineProperty(capability, "settled", {
          get() {
            return isSettled;
          }

        });
        capability.promise = new Promise(function (resolve, reject) {
          capability.resolve = function (data) {
            isSettled = true;
            resolve(data);
          };

          capability.reject = function (reason) {
            isSettled = true;
            reject(reason);
          };
        });
        return capability;
      }

      const createObjectURL = function createObjectURLClosure() {
        const digits = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
        return function createObjectURL(data, contentType, forceDataSchema = false) {
          if (!forceDataSchema && URL.createObjectURL) {
            const blob = new Blob([data], {
              type: contentType
            });
            return URL.createObjectURL(blob);
          }

          let buffer = `data:${contentType};base64,`;

          for (let i = 0, ii = data.length; i < ii; i += 3) {
            const b1 = data[i] & 0xff;
            const b2 = data[i + 1] & 0xff;
            const b3 = data[i + 2] & 0xff;
            const d1 = b1 >> 2,
                  d2 = (b1 & 3) << 4 | b2 >> 4;
            const d3 = i + 1 < ii ? (b2 & 0xf) << 2 | b3 >> 6 : 64;
            const d4 = i + 2 < ii ? b3 & 0x3f : 64;
            buffer += digits[d1] + digits[d2] + digits[d3] + digits[d4];
          }

          return buffer;
        };
      }();

      exports.createObjectURL = createObjectURL;
      /***/
    },
    /* 3 */

    /***/
    function (module, exports, __w_pdfjs_require__) {
      "use strict";

      var _is_node = __w_pdfjs_require__(4);

      ;
      /***/
    },
    /* 4 */

    /***/
    function (module, exports, __w_pdfjs_require__) {
      "use strict";

      Object.defineProperty(exports, "__esModule", {
        value: true
      });
      exports.isNodeJS = void 0;
      const isNodeJS = typeof process === "object" && process + "" === "[object process]" && !process.versions.nw && !process.versions.electron;
      exports.isNodeJS = isNodeJS;
      /***/
    },
    /* 5 */

    /***/
    function (module, exports, __w_pdfjs_require__) {
      "use strict";

      Object.defineProperty(exports, "__esModule", {
        value: true
      });
      exports.getDocument = getDocument;
      exports.setPDFNetworkStreamFactory = setPDFNetworkStreamFactory;
      exports.build = exports.version = exports.PDFPageProxy = exports.PDFDocumentProxy = exports.PDFWorker = exports.PDFDataRangeTransport = exports.LoopbackPort = void 0;

      var _util = __w_pdfjs_require__(2);

      var _display_utils = __w_pdfjs_require__(1);

      var _font_loader = __w_pdfjs_require__(6);

      var _api_compatibility = __w_pdfjs_require__(7);

      var _canvas = __w_pdfjs_require__(8);

      var _worker_options = __w_pdfjs_require__(10);

      var _is_node = __w_pdfjs_require__(4);

      var _message_handler = __w_pdfjs_require__(11);

      var _metadata = __w_pdfjs_require__(12);

      var _transport_stream = __w_pdfjs_require__(14);

      var _webgl = __w_pdfjs_require__(15);

      const DEFAULT_RANGE_CHUNK_SIZE = 65536;
      const RENDERING_CANCELLED_TIMEOUT = 100;
      let createPDFNetworkStream;

      function setPDFNetworkStreamFactory(pdfNetworkStreamFactory) {
        createPDFNetworkStream = pdfNetworkStreamFactory;
      }

      function getDocument(src) {
        const task = new PDFDocumentLoadingTask();
        let source;

        if (typeof src === "string") {
          source = {
            url: src
          };
        } else if ((0, _util.isArrayBuffer)(src)) {
          source = {
            data: src
          };
        } else if (src instanceof PDFDataRangeTransport) {
          source = {
            range: src
          };
        } else {
          if (typeof src !== "object") {
            throw new Error("Invalid parameter in getDocument, " + "need either Uint8Array, string or a parameter object");
          }

          if (!src.url && !src.data && !src.range) {
            throw new Error("Invalid parameter object: need either .data, .range or .url");
          }

          source = src;
        }

        const params = Object.create(null);
        let rangeTransport = null,
            worker = null;

        for (const key in source) {
          if (key === "url" && typeof window !== "undefined") {
            params[key] = new URL(source[key], window.location).href;
            continue;
          } else if (key === "range") {
            rangeTransport = source[key];
            continue;
          } else if (key === "worker") {
            worker = source[key];
            continue;
          } else if (key === "data" && !(source[key] instanceof Uint8Array)) {
            const pdfBytes = source[key];

            if (typeof pdfBytes === "string") {
              params[key] = (0, _util.stringToBytes)(pdfBytes);
            } else if (typeof pdfBytes === "object" && pdfBytes !== null && !isNaN(pdfBytes.length)) {
              params[key] = new Uint8Array(pdfBytes);
            } else if ((0, _util.isArrayBuffer)(pdfBytes)) {
              params[key] = new Uint8Array(pdfBytes);
            } else {
              throw new Error("Invalid PDF binary data: either typed array, " + "string or array-like object is expected in the " + "data property.");
            }

            continue;
          }

          params[key] = source[key];
        }

        params.rangeChunkSize = params.rangeChunkSize || DEFAULT_RANGE_CHUNK_SIZE;
        params.CMapReaderFactory = params.CMapReaderFactory || _display_utils.DOMCMapReaderFactory;
        params.ignoreErrors = params.stopAtErrors !== true;
        params.fontExtraProperties = params.fontExtraProperties === true;
        params.pdfBug = params.pdfBug === true;

        if (!Number.isInteger(params.maxImageSize)) {
          params.maxImageSize = -1;
        }

        if (typeof params.isEvalSupported !== "boolean") {
          params.isEvalSupported = true;
        }

        if (typeof params.disableFontFace !== "boolean") {
          params.disableFontFace = _api_compatibility.apiCompatibilityParams.disableFontFace || false;
        }

        if (typeof params.disableRange !== "boolean") {
          params.disableRange = false;
        }

        if (typeof params.disableStream !== "boolean") {
          params.disableStream = false;
        }

        if (typeof params.disableAutoFetch !== "boolean") {
          params.disableAutoFetch = false;
        }

        (0, _util.setVerbosityLevel)(params.verbosity);

        if (!worker) {
          const workerParams = {
            verbosity: params.verbosity,
            port: _worker_options.GlobalWorkerOptions.workerPort
          };
          worker = workerParams.port ? PDFWorker.fromPort(workerParams) : new PDFWorker(workerParams);
          task._worker = worker;
        }

        const docId = task.docId;
        worker.promise.then(function () {
          if (task.destroyed) {
            throw new Error("Loading aborted");
          }

          const workerIdPromise = _fetchDocument(worker, params, rangeTransport, docId);

          const networkStreamPromise = new Promise(function (resolve) {
            let networkStream;

            if (rangeTransport) {
              networkStream = new _transport_stream.PDFDataTransportStream({
                length: params.length,
                initialData: params.initialData,
                progressiveDone: params.progressiveDone,
                disableRange: params.disableRange,
                disableStream: params.disableStream
              }, rangeTransport);
            } else if (!params.data) {
              networkStream = createPDFNetworkStream({
                url: params.url,
                length: params.length,
                httpHeaders: params.httpHeaders,
                withCredentials: params.withCredentials,
                rangeChunkSize: params.rangeChunkSize,
                disableRange: params.disableRange,
                disableStream: params.disableStream
              });
            }

            resolve(networkStream);
          });
          return Promise.all([workerIdPromise, networkStreamPromise]).then(function ([workerId, networkStream]) {
            if (task.destroyed) {
              throw new Error("Loading aborted");
            }

            const messageHandler = new _message_handler.MessageHandler(docId, workerId, worker.port);
            messageHandler.postMessageTransfers = worker.postMessageTransfers;
            const transport = new WorkerTransport(messageHandler, task, networkStream, params);
            task._transport = transport;
            messageHandler.send("Ready", null);
          });
        }).catch(task._capability.reject);
        return task;
      }

      function _fetchDocument(worker, source, pdfDataRangeTransport, docId) {
        if (worker.destroyed) {
          return Promise.reject(new Error("Worker was destroyed"));
        }

        if (pdfDataRangeTransport) {
          source.length = pdfDataRangeTransport.length;
          source.initialData = pdfDataRangeTransport.initialData;
          source.progressiveDone = pdfDataRangeTransport.progressiveDone;
        }

        return worker.messageHandler.sendWithPromise("GetDocRequest", {
          docId,
          apiVersion: '2.5.207',
          source: {
            data: source.data,
            url: source.url,
            password: source.password,
            disableAutoFetch: source.disableAutoFetch,
            rangeChunkSize: source.rangeChunkSize,
            length: source.length
          },
          maxImageSize: source.maxImageSize,
          disableFontFace: source.disableFontFace,
          postMessageTransfers: worker.postMessageTransfers,
          docBaseUrl: source.docBaseUrl,
          ignoreErrors: source.ignoreErrors,
          isEvalSupported: source.isEvalSupported,
          fontExtraProperties: source.fontExtraProperties
        }).then(function (workerId) {
          if (worker.destroyed) {
            throw new Error("Worker was destroyed");
          }

          return workerId;
        });
      }

      const PDFDocumentLoadingTask = function PDFDocumentLoadingTaskClosure() {
        let nextDocumentId = 0;

        class PDFDocumentLoadingTask {
          constructor() {
            this._capability = (0, _util.createPromiseCapability)();
            this._transport = null;
            this._worker = null;
            this.docId = "d" + nextDocumentId++;
            this.destroyed = false;
            this.onPassword = null;
            this.onProgress = null;
            this.onUnsupportedFeature = null;
          }

          get promise() {
            return this._capability.promise;
          }

          destroy() {
            this.destroyed = true;
            const transportDestroyed = !this._transport ? Promise.resolve() : this._transport.destroy();
            return transportDestroyed.then(() => {
              this._transport = null;

              if (this._worker) {
                this._worker.destroy();

                this._worker = null;
              }
            });
          }

        }

        return PDFDocumentLoadingTask;
      }();

      class PDFDataRangeTransport {
        constructor(length, initialData, progressiveDone = false) {
          this.length = length;
          this.initialData = initialData;
          this.progressiveDone = progressiveDone;
          this._rangeListeners = [];
          this._progressListeners = [];
          this._progressiveReadListeners = [];
          this._progressiveDoneListeners = [];
          this._readyCapability = (0, _util.createPromiseCapability)();
        }

        addRangeListener(listener) {
          this._rangeListeners.push(listener);
        }

        addProgressListener(listener) {
          this._progressListeners.push(listener);
        }

        addProgressiveReadListener(listener) {
          this._progressiveReadListeners.push(listener);
        }

        addProgressiveDoneListener(listener) {
          this._progressiveDoneListeners.push(listener);
        }

        onDataRange(begin, chunk) {
          for (const listener of this._rangeListeners) {
            listener(begin, chunk);
          }
        }

        onDataProgress(loaded, total) {
          this._readyCapability.promise.then(() => {
            for (const listener of this._progressListeners) {
              listener(loaded, total);
            }
          });
        }

        onDataProgressiveRead(chunk) {
          this._readyCapability.promise.then(() => {
            for (const listener of this._progressiveReadListeners) {
              listener(chunk);
            }
          });
        }

        onDataProgressiveDone() {
          this._readyCapability.promise.then(() => {
            for (const listener of this._progressiveDoneListeners) {
              listener();
            }
          });
        }

        transportReady() {
          this._readyCapability.resolve();
        }

        requestDataRange(begin, end) {
          (0, _util.unreachable)("Abstract method PDFDataRangeTransport.requestDataRange");
        }

        abort() {}

      }

      exports.PDFDataRangeTransport = PDFDataRangeTransport;

      class PDFDocumentProxy {
        constructor(pdfInfo, transport) {
          this._pdfInfo = pdfInfo;
          this._transport = transport;
        }

        get numPages() {
          return this._pdfInfo.numPages;
        }

        get fingerprint() {
          return this._pdfInfo.fingerprint;
        }

        getPage(pageNumber) {
          return this._transport.getPage(pageNumber);
        }

        getPageIndex(ref) {
          return this._transport.getPageIndex(ref);
        }

        getDestinations() {
          return this._transport.getDestinations();
        }

        getDestination(id) {
          return this._transport.getDestination(id);
        }

        getPageLabels() {
          return this._transport.getPageLabels();
        }

        getPageLayout() {
          return this._transport.getPageLayout();
        }

        getPageMode() {
          return this._transport.getPageMode();
        }

        getViewerPreferences() {
          return this._transport.getViewerPreferences();
        }

        getOpenAction() {
          return this._transport.getOpenAction();
        }

        getOpenActionDestination() {
          (0, _display_utils.deprecated)("getOpenActionDestination, use getOpenAction instead.");
          return this.getOpenAction().then(function (openAction) {
            return openAction && openAction.dest ? openAction.dest : null;
          });
        }

        getAttachments() {
          return this._transport.getAttachments();
        }

        getJavaScript() {
          return this._transport.getJavaScript();
        }

        getOutline() {
          return this._transport.getOutline();
        }

        getPermissions() {
          return this._transport.getPermissions();
        }

        getMetadata() {
          return this._transport.getMetadata();
        }

        getData() {
          return this._transport.getData();
        }

        getDownloadInfo() {
          return this._transport.downloadInfoCapability.promise;
        }

        getStats() {
          return this._transport.getStats();
        }

        cleanup() {
          return this._transport.startCleanup();
        }

        destroy() {
          return this.loadingTask.destroy();
        }

        get loadingParams() {
          return this._transport.loadingParams;
        }

        get loadingTask() {
          return this._transport.loadingTask;
        }

      }

      exports.PDFDocumentProxy = PDFDocumentProxy;

      class PDFPageProxy {
        constructor(pageIndex, pageInfo, transport, pdfBug = false) {
          this._pageIndex = pageIndex;
          this._pageInfo = pageInfo;
          this._transport = transport;
          this._stats = pdfBug ? new _display_utils.StatTimer() : null;
          this._pdfBug = pdfBug;
          this.commonObjs = transport.commonObjs;
          this.objs = new PDFObjects();
          this.cleanupAfterRender = false;
          this.pendingCleanup = false;
          this.intentStates = Object.create(null);
          this.destroyed = false;
        }

        get pageNumber() {
          return this._pageIndex + 1;
        }

        get rotate() {
          return this._pageInfo.rotate;
        }

        get ref() {
          return this._pageInfo.ref;
        }

        get userUnit() {
          return this._pageInfo.userUnit;
        }

        get view() {
          return this._pageInfo.view;
        }

        getViewport({
          scale,
          rotation = this.rotate,
          offsetX = 0,
          offsetY = 0,
          dontFlip = false
        } = {}) {
          return new _display_utils.PageViewport({
            viewBox: this.view,
            scale,
            rotation,
            offsetX,
            offsetY,
            dontFlip
          });
        }

        getAnnotations({
          intent = null
        } = {}) {
          if (!this.annotationsPromise || this.annotationsIntent !== intent) {
            this.annotationsPromise = this._transport.getAnnotations(this._pageIndex, intent);
            this.annotationsIntent = intent;
          }

          return this.annotationsPromise;
        }

        render({
          canvasContext,
          viewport,
          intent = "display",
          enableWebGL = false,
          renderInteractiveForms = false,
          transform = null,
          imageLayer = null,
          canvasFactory = null,
          background = null
        }) {
          if (this._stats) {
            this._stats.time("Overall");
          }

          const renderingIntent = intent === "print" ? "print" : "display";
          this.pendingCleanup = false;

          if (!this.intentStates[renderingIntent]) {
            this.intentStates[renderingIntent] = Object.create(null);
          }

          const intentState = this.intentStates[renderingIntent];

          if (intentState.streamReaderCancelTimeout) {
            clearTimeout(intentState.streamReaderCancelTimeout);
            intentState.streamReaderCancelTimeout = null;
          }

          const canvasFactoryInstance = canvasFactory || new _display_utils.DOMCanvasFactory();
          const webGLContext = new _webgl.WebGLContext({
            enable: enableWebGL
          });

          if (!intentState.displayReadyCapability) {
            intentState.displayReadyCapability = (0, _util.createPromiseCapability)();
            intentState.operatorList = {
              fnArray: [],
              argsArray: [],
              lastChunk: false
            };

            if (this._stats) {
              this._stats.time("Page Request");
            }

            this._pumpOperatorList({
              pageIndex: this._pageIndex,
              intent: renderingIntent,
              renderInteractiveForms: renderInteractiveForms === true
            });
          }

          const complete = error => {
            const i = intentState.renderTasks.indexOf(internalRenderTask);

            if (i >= 0) {
              intentState.renderTasks.splice(i, 1);
            }

            if (this.cleanupAfterRender || renderingIntent === "print") {
              this.pendingCleanup = true;
            }

            this._tryCleanup();

            if (error) {
              internalRenderTask.capability.reject(error);

              this._abortOperatorList({
                intentState,
                reason: error
              });
            } else {
              internalRenderTask.capability.resolve();
            }

            if (this._stats) {
              this._stats.timeEnd("Rendering");

              this._stats.timeEnd("Overall");
            }
          };

          const internalRenderTask = new InternalRenderTask({
            callback: complete,
            params: {
              canvasContext,
              viewport,
              transform,
              imageLayer,
              background
            },
            objs: this.objs,
            commonObjs: this.commonObjs,
            operatorList: intentState.operatorList,
            pageIndex: this._pageIndex,
            canvasFactory: canvasFactoryInstance,
            webGLContext,
            useRequestAnimationFrame: renderingIntent !== "print",
            pdfBug: this._pdfBug
          });

          if (!intentState.renderTasks) {
            intentState.renderTasks = [];
          }

          intentState.renderTasks.push(internalRenderTask);
          const renderTask = internalRenderTask.task;
          intentState.displayReadyCapability.promise.then(transparency => {
            if (this.pendingCleanup) {
              complete();
              return;
            }

            if (this._stats) {
              this._stats.time("Rendering");
            }

            internalRenderTask.initializeGraphics(transparency);
            internalRenderTask.operatorListChanged();
          }).catch(complete);
          return renderTask;
        }

        getOperatorList() {
          function operatorListChanged() {
            if (intentState.operatorList.lastChunk) {
              intentState.opListReadCapability.resolve(intentState.operatorList);
              const i = intentState.renderTasks.indexOf(opListTask);

              if (i >= 0) {
                intentState.renderTasks.splice(i, 1);
              }
            }
          }

          const renderingIntent = "oplist";

          if (!this.intentStates[renderingIntent]) {
            this.intentStates[renderingIntent] = Object.create(null);
          }

          const intentState = this.intentStates[renderingIntent];
          let opListTask;

          if (!intentState.opListReadCapability) {
            opListTask = {};
            opListTask.operatorListChanged = operatorListChanged;
            intentState.opListReadCapability = (0, _util.createPromiseCapability)();
            intentState.renderTasks = [];
            intentState.renderTasks.push(opListTask);
            intentState.operatorList = {
              fnArray: [],
              argsArray: [],
              lastChunk: false
            };

            if (this._stats) {
              this._stats.time("Page Request");
            }

            this._pumpOperatorList({
              pageIndex: this._pageIndex,
              intent: renderingIntent
            });
          }

          return intentState.opListReadCapability.promise;
        }

        streamTextContent({
          normalizeWhitespace = false,
          disableCombineTextItems = false
        } = {}) {
          const TEXT_CONTENT_CHUNK_SIZE = 100;
          return this._transport.messageHandler.sendWithStream("GetTextContent", {
            pageIndex: this._pageIndex,
            normalizeWhitespace: normalizeWhitespace === true,
            combineTextItems: disableCombineTextItems !== true
          }, {
            highWaterMark: TEXT_CONTENT_CHUNK_SIZE,

            size(textContent) {
              return textContent.items.length;
            }

          });
        }

        getTextContent(params = {}) {
          const readableStream = this.streamTextContent(params);
          return new Promise(function (resolve, reject) {
            function pump() {
              reader.read().then(function ({
                value,
                done
              }) {
                if (done) {
                  resolve(textContent);
                  return;
                }

                Object.assign(textContent.styles, value.styles);
                textContent.items.push(...value.items);
                pump();
              }, reject);
            }

            const reader = readableStream.getReader();
            const textContent = {
              items: [],
              styles: Object.create(null)
            };
            pump();
          });
        }

        _destroy() {
          this.destroyed = true;
          this._transport.pageCache[this._pageIndex] = null;
          const waitOn = [];
          Object.keys(this.intentStates).forEach(intent => {
            const intentState = this.intentStates[intent];

            this._abortOperatorList({
              intentState,
              reason: new Error("Page was destroyed."),
              force: true
            });

            if (intent === "oplist") {
              return;
            }

            intentState.renderTasks.forEach(function (renderTask) {
              const renderCompleted = renderTask.capability.promise.catch(function () {});
              waitOn.push(renderCompleted);
              renderTask.cancel();
            });
          });
          this.objs.clear();
          this.annotationsPromise = null;
          this.pendingCleanup = false;
          return Promise.all(waitOn);
        }

        cleanup(resetStats = false) {
          this.pendingCleanup = true;
          return this._tryCleanup(resetStats);
        }

        _tryCleanup(resetStats = false) {
          if (!this.pendingCleanup || Object.keys(this.intentStates).some(intent => {
            const intentState = this.intentStates[intent];
            return intentState.renderTasks.length !== 0 || !intentState.operatorList.lastChunk;
          })) {
            return false;
          }

          Object.keys(this.intentStates).forEach(intent => {
            delete this.intentStates[intent];
          });
          this.objs.clear();
          this.annotationsPromise = null;

          if (resetStats && this._stats) {
            this._stats = new _display_utils.StatTimer();
          }

          this.pendingCleanup = false;
          return true;
        }

        _startRenderPage(transparency, intent) {
          const intentState = this.intentStates[intent];

          if (!intentState) {
            return;
          }

          if (this._stats) {
            this._stats.timeEnd("Page Request");
          }

          if (intentState.displayReadyCapability) {
            intentState.displayReadyCapability.resolve(transparency);
          }
        }

        _renderPageChunk(operatorListChunk, intentState) {
          for (let i = 0, ii = operatorListChunk.length; i < ii; i++) {
            intentState.operatorList.fnArray.push(operatorListChunk.fnArray[i]);
            intentState.operatorList.argsArray.push(operatorListChunk.argsArray[i]);
          }

          intentState.operatorList.lastChunk = operatorListChunk.lastChunk;

          for (let i = 0; i < intentState.renderTasks.length; i++) {
            intentState.renderTasks[i].operatorListChanged();
          }

          if (operatorListChunk.lastChunk) {
            this._tryCleanup();
          }
        }

        _pumpOperatorList(args) {
          (0, _util.assert)(args.intent, 'PDFPageProxy._pumpOperatorList: Expected "intent" argument.');

          const readableStream = this._transport.messageHandler.sendWithStream("GetOperatorList", args);

          const reader = readableStream.getReader();
          const intentState = this.intentStates[args.intent];
          intentState.streamReader = reader;

          const pump = () => {
            reader.read().then(({
              value,
              done
            }) => {
              if (done) {
                intentState.streamReader = null;
                return;
              }

              if (this._transport.destroyed) {
                return;
              }

              this._renderPageChunk(value, intentState);

              pump();
            }, reason => {
              intentState.streamReader = null;

              if (this._transport.destroyed) {
                return;
              }

              if (intentState.operatorList) {
                intentState.operatorList.lastChunk = true;

                for (let i = 0; i < intentState.renderTasks.length; i++) {
                  intentState.renderTasks[i].operatorListChanged();
                }

                this._tryCleanup();
              }

              if (intentState.displayReadyCapability) {
                intentState.displayReadyCapability.reject(reason);
              } else if (intentState.opListReadCapability) {
                intentState.opListReadCapability.reject(reason);
              } else {
                throw reason;
              }
            });
          };

          pump();
        }

        _abortOperatorList({
          intentState,
          reason,
          force = false
        }) {
          (0, _util.assert)(reason instanceof Error || typeof reason === "object" && reason !== null, 'PDFPageProxy._abortOperatorList: Expected "reason" argument.');

          if (!intentState.streamReader) {
            return;
          }

          if (!force) {
            if (intentState.renderTasks.length !== 0) {
              return;
            }

            if (reason instanceof _display_utils.RenderingCancelledException) {
              intentState.streamReaderCancelTimeout = setTimeout(() => {
                this._abortOperatorList({
                  intentState,
                  reason,
                  force: true
                });

                intentState.streamReaderCancelTimeout = null;
              }, RENDERING_CANCELLED_TIMEOUT);
              return;
            }
          }

          intentState.streamReader.cancel(new _util.AbortException(reason && reason.message));
          intentState.streamReader = null;

          if (this._transport.destroyed) {
            return;
          }

          Object.keys(this.intentStates).some(intent => {
            if (this.intentStates[intent] === intentState) {
              delete this.intentStates[intent];
              return true;
            }

            return false;
          });
          this.cleanup();
        }

        get stats() {
          return this._stats;
        }

      }

      exports.PDFPageProxy = PDFPageProxy;

      class LoopbackPort {
        constructor(defer = true) {
          this._listeners = [];
          this._defer = defer;
          this._deferred = Promise.resolve(undefined);
        }

        postMessage(obj, transfers) {
          function cloneValue(value) {
            if (typeof value !== "object" || value === null) {
              return value;
            }

            if (cloned.has(value)) {
              return cloned.get(value);
            }

            let buffer, result;

            if ((buffer = value.buffer) && (0, _util.isArrayBuffer)(buffer)) {
              const transferable = transfers && transfers.includes(buffer);

              if (transferable) {
                result = new value.constructor(buffer, value.byteOffset, value.byteLength);
              } else {
                result = new value.constructor(value);
              }

              cloned.set(value, result);
              return result;
            }

            result = Array.isArray(value) ? [] : {};
            cloned.set(value, result);

            for (const i in value) {
              let desc,
                  p = value;

              while (!(desc = Object.getOwnPropertyDescriptor(p, i))) {
                p = Object.getPrototypeOf(p);
              }

              if (typeof desc.value === "undefined") {
                continue;
              }

              if (typeof desc.value === "function") {
                if (value.hasOwnProperty && value.hasOwnProperty(i)) {
                  throw new Error(`LoopbackPort.postMessage - cannot clone: ${value[i]}`);
                }

                continue;
              }

              result[i] = cloneValue(desc.value);
            }

            return result;
          }

          if (!this._defer) {
            this._listeners.forEach(listener => {
              listener.call(this, {
                data: obj
              });
            });

            return;
          }

          const cloned = new WeakMap();
          const e = {
            data: cloneValue(obj)
          };

          this._deferred.then(() => {
            this._listeners.forEach(listener => {
              listener.call(this, e);
            });
          });
        }

        addEventListener(name, listener) {
          this._listeners.push(listener);
        }

        removeEventListener(name, listener) {
          const i = this._listeners.indexOf(listener);

          this._listeners.splice(i, 1);
        }

        terminate() {
          this._listeners.length = 0;
        }

      }

      exports.LoopbackPort = LoopbackPort;

      const PDFWorker = function PDFWorkerClosure() {
        const pdfWorkerPorts = new WeakMap();
        let isWorkerDisabled = false;
        let fallbackWorkerSrc;
        let nextFakeWorkerId = 0;
        let fakeWorkerCapability;

        if (_is_node.isNodeJS && "function" === "function") {
          isWorkerDisabled = true;
          fallbackWorkerSrc = "./pdf.worker.js";
        } else if (typeof document === "object" && "currentScript" in document) {
          const pdfjsFilePath = document.currentScript && document.currentScript.src;

          if (pdfjsFilePath) {
            fallbackWorkerSrc = pdfjsFilePath.replace(/(\.(?:min\.)?js)(\?.*)?$/i, ".worker$1$2");
          }
        }

        function getWorkerSrc() {
          if (_worker_options.GlobalWorkerOptions.workerSrc) {
            return _worker_options.GlobalWorkerOptions.workerSrc;
          }

          if (typeof fallbackWorkerSrc !== "undefined") {
            if (!_is_node.isNodeJS) {
              (0, _display_utils.deprecated)('No "GlobalWorkerOptions.workerSrc" specified.');
            }

            return fallbackWorkerSrc;
          }

          throw new Error('No "GlobalWorkerOptions.workerSrc" specified.');
        }

        function getMainThreadWorkerMessageHandler() {
          let mainWorkerMessageHandler;

          try {
            mainWorkerMessageHandler = globalThis.pdfjsWorker && globalThis.pdfjsWorker.WorkerMessageHandler;
          } catch (ex) {}

          return mainWorkerMessageHandler || null;
        }

        function setupFakeWorkerGlobal() {
          if (fakeWorkerCapability) {
            return fakeWorkerCapability.promise;
          }

          fakeWorkerCapability = (0, _util.createPromiseCapability)();

          const loader = async function () {
            const mainWorkerMessageHandler = getMainThreadWorkerMessageHandler();

            if (mainWorkerMessageHandler) {
              return mainWorkerMessageHandler;
            }

            if (_is_node.isNodeJS && "function" === "function") {
              const worker = eval("require")(getWorkerSrc());
              return worker.WorkerMessageHandler;
            }

            await (0, _display_utils.loadScript)(getWorkerSrc());
            return window.pdfjsWorker.WorkerMessageHandler;
          };

          loader().then(fakeWorkerCapability.resolve, fakeWorkerCapability.reject);
          return fakeWorkerCapability.promise;
        }

        function createCDNWrapper(url) {
          const wrapper = "importScripts('" + url + "');";
          return URL.createObjectURL(new Blob([wrapper]));
        }

        class PDFWorker {
          constructor({
            name = null,
            port = null,
            verbosity = (0, _util.getVerbosityLevel)()
          } = {}) {
            if (port && pdfWorkerPorts.has(port)) {
              throw new Error("Cannot use more than one PDFWorker per port");
            }

            this.name = name;
            this.destroyed = false;
            this.postMessageTransfers = true;
            this.verbosity = verbosity;
            this._readyCapability = (0, _util.createPromiseCapability)();
            this._port = null;
            this._webWorker = null;
            this._messageHandler = null;

            if (port) {
              pdfWorkerPorts.set(port, this);

              this._initializeFromPort(port);

              return;
            }

            this._initialize();
          }

          get promise() {
            return this._readyCapability.promise;
          }

          get port() {
            return this._port;
          }

          get messageHandler() {
            return this._messageHandler;
          }

          _initializeFromPort(port) {
            this._port = port;
            this._messageHandler = new _message_handler.MessageHandler("main", "worker", port);

            this._messageHandler.on("ready", function () {});

            this._readyCapability.resolve();
          }

          _initialize() {
            if (typeof Worker !== "undefined" && !isWorkerDisabled && !getMainThreadWorkerMessageHandler()) {
              let workerSrc = getWorkerSrc();

              try {
                if (!(0, _util.isSameOrigin)(window.location.href, workerSrc)) {
                  workerSrc = createCDNWrapper(new URL(workerSrc, window.location).href);
                }

                const worker = new Worker(workerSrc);
                const messageHandler = new _message_handler.MessageHandler("main", "worker", worker);

                const terminateEarly = () => {
                  worker.removeEventListener("error", onWorkerError);
                  messageHandler.destroy();
                  worker.terminate();

                  if (this.destroyed) {
                    this._readyCapability.reject(new Error("Worker was destroyed"));
                  } else {
                    this._setupFakeWorker();
                  }
                };

                const onWorkerError = () => {
                  if (!this._webWorker) {
                    terminateEarly();
                  }
                };

                worker.addEventListener("error", onWorkerError);
                messageHandler.on("test", data => {
                  worker.removeEventListener("error", onWorkerError);

                  if (this.destroyed) {
                    terminateEarly();
                    return;
                  }

                  if (data) {
                    this._messageHandler = messageHandler;
                    this._port = worker;
                    this._webWorker = worker;

                    if (!data.supportTransfers) {
                      this.postMessageTransfers = false;
                    }

                    this._readyCapability.resolve();

                    messageHandler.send("configure", {
                      verbosity: this.verbosity
                    });
                  } else {
                    this._setupFakeWorker();

                    messageHandler.destroy();
                    worker.terminate();
                  }
                });
                messageHandler.on("ready", data => {
                  worker.removeEventListener("error", onWorkerError);

                  if (this.destroyed) {
                    terminateEarly();
                    return;
                  }

                  try {
                    sendTest();
                  } catch (e) {
                    this._setupFakeWorker();
                  }
                });

                const sendTest = () => {
                  const testObj = new Uint8Array([this.postMessageTransfers ? 255 : 0]);

                  try {
                    messageHandler.send("test", testObj, [testObj.buffer]);
                  } catch (ex) {
                    (0, _util.warn)("Cannot use postMessage transfers.");
                    testObj[0] = 0;
                    messageHandler.send("test", testObj);
                  }
                };

                sendTest();
                return;
              } catch (e) {
                (0, _util.info)("The worker has been disabled.");
              }
            }

            this._setupFakeWorker();
          }

          _setupFakeWorker() {
            if (!isWorkerDisabled) {
              (0, _util.warn)("Setting up fake worker.");
              isWorkerDisabled = true;
            }

            setupFakeWorkerGlobal().then(WorkerMessageHandler => {
              if (this.destroyed) {
                this._readyCapability.reject(new Error("Worker was destroyed"));

                return;
              }

              const port = new LoopbackPort();
              this._port = port;
              const id = "fake" + nextFakeWorkerId++;
              const workerHandler = new _message_handler.MessageHandler(id + "_worker", id, port);
              WorkerMessageHandler.setup(workerHandler, port);
              const messageHandler = new _message_handler.MessageHandler(id, id + "_worker", port);
              this._messageHandler = messageHandler;

              this._readyCapability.resolve();

              messageHandler.send("configure", {
                verbosity: this.verbosity
              });
            }).catch(reason => {
              this._readyCapability.reject(new Error(`Setting up fake worker failed: "${reason.message}".`));
            });
          }

          destroy() {
            this.destroyed = true;

            if (this._webWorker) {
              this._webWorker.terminate();

              this._webWorker = null;
            }

            pdfWorkerPorts.delete(this._port);
            this._port = null;

            if (this._messageHandler) {
              this._messageHandler.destroy();

              this._messageHandler = null;
            }
          }

          static fromPort(params) {
            if (!params || !params.port) {
              throw new Error("PDFWorker.fromPort - invalid method signature.");
            }

            if (pdfWorkerPorts.has(params.port)) {
              return pdfWorkerPorts.get(params.port);
            }

            return new PDFWorker(params);
          }

          static getWorkerSrc() {
            return getWorkerSrc();
          }

        }

        return PDFWorker;
      }();

      exports.PDFWorker = PDFWorker;

      class WorkerTransport {
        constructor(messageHandler, loadingTask, networkStream, params) {
          this.messageHandler = messageHandler;
          this.loadingTask = loadingTask;
          this.commonObjs = new PDFObjects();
          this.fontLoader = new _font_loader.FontLoader({
            docId: loadingTask.docId,
            onUnsupportedFeature: this._onUnsupportedFeature.bind(this)
          });
          this._params = params;
          this.CMapReaderFactory = new params.CMapReaderFactory({
            baseUrl: params.cMapUrl,
            isCompressed: params.cMapPacked
          });
          this.destroyed = false;
          this.destroyCapability = null;
          this._passwordCapability = null;
          this._networkStream = networkStream;
          this._fullReader = null;
          this._lastProgress = null;
          this.pageCache = [];
          this.pagePromises = [];
          this.downloadInfoCapability = (0, _util.createPromiseCapability)();
          this.setupMessageHandler();
        }

        destroy() {
          if (this.destroyCapability) {
            return this.destroyCapability.promise;
          }

          this.destroyed = true;
          this.destroyCapability = (0, _util.createPromiseCapability)();

          if (this._passwordCapability) {
            this._passwordCapability.reject(new Error("Worker was destroyed during onPassword callback"));
          }

          const waitOn = [];
          this.pageCache.forEach(function (page) {
            if (page) {
              waitOn.push(page._destroy());
            }
          });
          this.pageCache.length = 0;
          this.pagePromises.length = 0;
          const terminated = this.messageHandler.sendWithPromise("Terminate", null);
          waitOn.push(terminated);
          Promise.all(waitOn).then(() => {
            this.fontLoader.clear();

            if (this._networkStream) {
              this._networkStream.cancelAllRequests(new _util.AbortException("Worker was terminated."));
            }

            if (this.messageHandler) {
              this.messageHandler.destroy();
              this.messageHandler = null;
            }

            this.destroyCapability.resolve();
          }, this.destroyCapability.reject);
          return this.destroyCapability.promise;
        }

        setupMessageHandler() {
          const {
            messageHandler,
            loadingTask
          } = this;
          messageHandler.on("GetReader", (data, sink) => {
            (0, _util.assert)(this._networkStream, "GetReader - no `IPDFStream` instance available.");
            this._fullReader = this._networkStream.getFullReader();

            this._fullReader.onProgress = evt => {
              this._lastProgress = {
                loaded: evt.loaded,
                total: evt.total
              };
            };

            sink.onPull = () => {
              this._fullReader.read().then(function ({
                value,
                done
              }) {
                if (done) {
                  sink.close();
                  return;
                }

                (0, _util.assert)((0, _util.isArrayBuffer)(value), "GetReader - expected an ArrayBuffer.");
                sink.enqueue(new Uint8Array(value), 1, [value]);
              }).catch(reason => {
                sink.error(reason);
              });
            };

            sink.onCancel = reason => {
              this._fullReader.cancel(reason);
            };
          });
          messageHandler.on("ReaderHeadersReady", data => {
            const headersCapability = (0, _util.createPromiseCapability)();
            const fullReader = this._fullReader;
            fullReader.headersReady.then(() => {
              if (!fullReader.isStreamingSupported || !fullReader.isRangeSupported) {
                if (this._lastProgress && loadingTask.onProgress) {
                  loadingTask.onProgress(this._lastProgress);
                }

                fullReader.onProgress = evt => {
                  if (loadingTask.onProgress) {
                    loadingTask.onProgress({
                      loaded: evt.loaded,
                      total: evt.total
                    });
                  }
                };
              }

              headersCapability.resolve({
                isStreamingSupported: fullReader.isStreamingSupported,
                isRangeSupported: fullReader.isRangeSupported,
                contentLength: fullReader.contentLength
              });
            }, headersCapability.reject);
            return headersCapability.promise;
          });
          messageHandler.on("GetRangeReader", (data, sink) => {
            (0, _util.assert)(this._networkStream, "GetRangeReader - no `IPDFStream` instance available.");

            const rangeReader = this._networkStream.getRangeReader(data.begin, data.end);

            if (!rangeReader) {
              sink.close();
              return;
            }

            sink.onPull = () => {
              rangeReader.read().then(function ({
                value,
                done
              }) {
                if (done) {
                  sink.close();
                  return;
                }

                (0, _util.assert)((0, _util.isArrayBuffer)(value), "GetRangeReader - expected an ArrayBuffer.");
                sink.enqueue(new Uint8Array(value), 1, [value]);
              }).catch(reason => {
                sink.error(reason);
              });
            };

            sink.onCancel = reason => {
              rangeReader.cancel(reason);
            };
          });
          messageHandler.on("GetDoc", ({
            pdfInfo
          }) => {
            this._numPages = pdfInfo.numPages;

            loadingTask._capability.resolve(new PDFDocumentProxy(pdfInfo, this));
          });
          messageHandler.on("DocException", function (ex) {
            let reason;

            switch (ex.name) {
              case "PasswordException":
                reason = new _util.PasswordException(ex.message, ex.code);
                break;

              case "InvalidPDFException":
                reason = new _util.InvalidPDFException(ex.message);
                break;

              case "MissingPDFException":
                reason = new _util.MissingPDFException(ex.message);
                break;

              case "UnexpectedResponseException":
                reason = new _util.UnexpectedResponseException(ex.message, ex.status);
                break;

              case "UnknownErrorException":
                reason = new _util.UnknownErrorException(ex.message, ex.details);
                break;
            }

            loadingTask._capability.reject(reason);
          });
          messageHandler.on("PasswordRequest", exception => {
            this._passwordCapability = (0, _util.createPromiseCapability)();

            if (loadingTask.onPassword) {
              const updatePassword = password => {
                this._passwordCapability.resolve({
                  password
                });
              };

              try {
                loadingTask.onPassword(updatePassword, exception.code);
              } catch (ex) {
                this._passwordCapability.reject(ex);
              }
            } else {
              this._passwordCapability.reject(new _util.PasswordException(exception.message, exception.code));
            }

            return this._passwordCapability.promise;
          });
          messageHandler.on("DataLoaded", data => {
            if (loadingTask.onProgress) {
              loadingTask.onProgress({
                loaded: data.length,
                total: data.length
              });
            }

            this.downloadInfoCapability.resolve(data);
          });
          messageHandler.on("StartRenderPage", data => {
            if (this.destroyed) {
              return;
            }

            const page = this.pageCache[data.pageIndex];

            page._startRenderPage(data.transparency, data.intent);
          });
          messageHandler.on("commonobj", data => {
            if (this.destroyed) {
              return;
            }

            const [id, type, exportedData] = data;

            if (this.commonObjs.has(id)) {
              return;
            }

            switch (type) {
              case "Font":
                const params = this._params;

                if ("error" in exportedData) {
                  const exportedError = exportedData.error;
                  (0, _util.warn)(`Error during font loading: ${exportedError}`);
                  this.commonObjs.resolve(id, exportedError);
                  break;
                }

                let fontRegistry = null;

                if (params.pdfBug && globalThis.FontInspector && globalThis.FontInspector.enabled) {
                  fontRegistry = {
                    registerFont(font, url) {
                      globalThis.FontInspector.fontAdded(font, url);
                    }

                  };
                }

                const font = new _font_loader.FontFaceObject(exportedData, {
                  isEvalSupported: params.isEvalSupported,
                  disableFontFace: params.disableFontFace,
                  ignoreErrors: params.ignoreErrors,
                  onUnsupportedFeature: this._onUnsupportedFeature.bind(this),
                  fontRegistry
                });
                this.fontLoader.bind(font).catch(reason => {
                  return messageHandler.sendWithPromise("FontFallback", {
                    id
                  });
                }).finally(() => {
                  if (!params.fontExtraProperties && font.data) {
                    font.data = null;
                  }

                  this.commonObjs.resolve(id, font);
                });
                break;

              case "FontPath":
              case "FontType3Res":
              case "Image":
                this.commonObjs.resolve(id, exportedData);
                break;

              default:
                throw new Error(`Got unknown common object type ${type}`);
            }
          });
          messageHandler.on("obj", data => {
            if (this.destroyed) {
              return undefined;
            }

            const [id, pageIndex, type, imageData] = data;
            const pageProxy = this.pageCache[pageIndex];

            if (pageProxy.objs.has(id)) {
              return undefined;
            }

            switch (type) {
              case "Image":
                pageProxy.objs.resolve(id, imageData);
                const MAX_IMAGE_SIZE_TO_STORE = 8000000;

                if (imageData && "data" in imageData && imageData.data.length > MAX_IMAGE_SIZE_TO_STORE) {
                  pageProxy.cleanupAfterRender = true;
                }

                break;

              default:
                throw new Error(`Got unknown object type ${type}`);
            }

            return undefined;
          });
          messageHandler.on("DocProgress", data => {
            if (this.destroyed) {
              return;
            }

            if (loadingTask.onProgress) {
              loadingTask.onProgress({
                loaded: data.loaded,
                total: data.total
              });
            }
          });
          messageHandler.on("UnsupportedFeature", this._onUnsupportedFeature.bind(this));
          messageHandler.on("FetchBuiltInCMap", (data, sink) => {
            if (this.destroyed) {
              sink.error(new Error("Worker was destroyed"));
              return;
            }

            let fetched = false;

            sink.onPull = () => {
              if (fetched) {
                sink.close();
                return;
              }

              fetched = true;
              this.CMapReaderFactory.fetch(data).then(function (builtInCMap) {
                sink.enqueue(builtInCMap, 1, [builtInCMap.cMapData.buffer]);
              }).catch(function (reason) {
                sink.error(reason);
              });
            };
          });
        }

        _onUnsupportedFeature({
          featureId
        }) {
          if (this.destroyed) {
            return;
          }

          if (this.loadingTask.onUnsupportedFeature) {
            this.loadingTask.onUnsupportedFeature(featureId);
          }
        }

        getData() {
          return this.messageHandler.sendWithPromise("GetData", null);
        }

        getPage(pageNumber) {
          if (!Number.isInteger(pageNumber) || pageNumber <= 0 || pageNumber > this._numPages) {
            return Promise.reject(new Error("Invalid page request"));
          }

          const pageIndex = pageNumber - 1;

          if (pageIndex in this.pagePromises) {
            return this.pagePromises[pageIndex];
          }

          const promise = this.messageHandler.sendWithPromise("GetPage", {
            pageIndex
          }).then(pageInfo => {
            if (this.destroyed) {
              throw new Error("Transport destroyed");
            }

            const page = new PDFPageProxy(pageIndex, pageInfo, this, this._params.pdfBug);
            this.pageCache[pageIndex] = page;
            return page;
          });
          this.pagePromises[pageIndex] = promise;
          return promise;
        }

        getPageIndex(ref) {
          return this.messageHandler.sendWithPromise("GetPageIndex", {
            ref
          }).catch(function (reason) {
            return Promise.reject(new Error(reason));
          });
        }

        getAnnotations(pageIndex, intent) {
          return this.messageHandler.sendWithPromise("GetAnnotations", {
            pageIndex,
            intent
          });
        }

        getDestinations() {
          return this.messageHandler.sendWithPromise("GetDestinations", null);
        }

        getDestination(id) {
          if (typeof id !== "string") {
            return Promise.reject(new Error("Invalid destination request."));
          }

          return this.messageHandler.sendWithPromise("GetDestination", {
            id
          });
        }

        getPageLabels() {
          return this.messageHandler.sendWithPromise("GetPageLabels", null);
        }

        getPageLayout() {
          return this.messageHandler.sendWithPromise("GetPageLayout", null);
        }

        getPageMode() {
          return this.messageHandler.sendWithPromise("GetPageMode", null);
        }

        getViewerPreferences() {
          return this.messageHandler.sendWithPromise("GetViewerPreferences", null);
        }

        getOpenAction() {
          return this.messageHandler.sendWithPromise("GetOpenAction", null);
        }

        getAttachments() {
          return this.messageHandler.sendWithPromise("GetAttachments", null);
        }

        getJavaScript() {
          return this.messageHandler.sendWithPromise("GetJavaScript", null);
        }

        getOutline() {
          return this.messageHandler.sendWithPromise("GetOutline", null);
        }

        getPermissions() {
          return this.messageHandler.sendWithPromise("GetPermissions", null);
        }

        getMetadata() {
          return this.messageHandler.sendWithPromise("GetMetadata", null).then(results => {
            return {
              info: results[0],
              metadata: results[1] ? new _metadata.Metadata(results[1]) : null,
              contentDispositionFilename: this._fullReader ? this._fullReader.filename : null
            };
          });
        }

        getStats() {
          return this.messageHandler.sendWithPromise("GetStats", null);
        }

        startCleanup() {
          return this.messageHandler.sendWithPromise("Cleanup", null).then(() => {
            for (let i = 0, ii = this.pageCache.length; i < ii; i++) {
              const page = this.pageCache[i];

              if (page) {
                const cleanupSuccessful = page.cleanup();

                if (!cleanupSuccessful) {
                  throw new Error(`startCleanup: Page ${i + 1} is currently rendering.`);
                }
              }
            }

            this.commonObjs.clear();
            this.fontLoader.clear();
          });
        }

        get loadingParams() {
          const params = this._params;
          return (0, _util.shadow)(this, "loadingParams", {
            disableAutoFetch: params.disableAutoFetch,
            disableFontFace: params.disableFontFace
          });
        }

      }

      class PDFObjects {
        constructor() {
          this._objs = Object.create(null);
        }

        _ensureObj(objId) {
          if (this._objs[objId]) {
            return this._objs[objId];
          }

          return this._objs[objId] = {
            capability: (0, _util.createPromiseCapability)(),
            data: null,
            resolved: false
          };
        }

        get(objId, callback = null) {
          if (callback) {
            this._ensureObj(objId).capability.promise.then(callback);

            return null;
          }

          const obj = this._objs[objId];

          if (!obj || !obj.resolved) {
            throw new Error(`Requesting object that isn't resolved yet ${objId}.`);
          }

          return obj.data;
        }

        has(objId) {
          const obj = this._objs[objId];
          return obj ? obj.resolved : false;
        }

        resolve(objId, data) {
          const obj = this._ensureObj(objId);

          obj.resolved = true;
          obj.data = data;
          obj.capability.resolve(data);
        }

        clear() {
          this._objs = Object.create(null);
        }

      }

      class RenderTask {
        constructor(internalRenderTask) {
          this._internalRenderTask = internalRenderTask;
          this.onContinue = null;
        }

        get promise() {
          return this._internalRenderTask.capability.promise;
        }

        cancel() {
          this._internalRenderTask.cancel();
        }

      }

      const InternalRenderTask = function InternalRenderTaskClosure() {
        const canvasInRendering = new WeakSet();

        class InternalRenderTask {
          constructor({
            callback,
            params,
            objs,
            commonObjs,
            operatorList,
            pageIndex,
            canvasFactory,
            webGLContext,
            useRequestAnimationFrame = false,
            pdfBug = false
          }) {
            this.callback = callback;
            this.params = params;
            this.objs = objs;
            this.commonObjs = commonObjs;
            this.operatorListIdx = null;
            this.operatorList = operatorList;
            this._pageIndex = pageIndex;
            this.canvasFactory = canvasFactory;
            this.webGLContext = webGLContext;
            this._pdfBug = pdfBug;
            this.running = false;
            this.graphicsReadyCallback = null;
            this.graphicsReady = false;
            this._useRequestAnimationFrame = useRequestAnimationFrame === true && typeof window !== "undefined";
            this.cancelled = false;
            this.capability = (0, _util.createPromiseCapability)();
            this.task = new RenderTask(this);
            this._continueBound = this._continue.bind(this);
            this._scheduleNextBound = this._scheduleNext.bind(this);
            this._nextBound = this._next.bind(this);
            this._canvas = params.canvasContext.canvas;
          }

          initializeGraphics(transparency = false) {
            if (this.cancelled) {
              return;
            }

            if (this._canvas) {
              if (canvasInRendering.has(this._canvas)) {
                throw new Error("Cannot use the same canvas during multiple render() operations. " + "Use different canvas or ensure previous operations were " + "cancelled or completed.");
              }

              canvasInRendering.add(this._canvas);
            }

            if (this._pdfBug && globalThis.StepperManager && globalThis.StepperManager.enabled) {
              this.stepper = globalThis.StepperManager.create(this._pageIndex);
              this.stepper.init(this.operatorList);
              this.stepper.nextBreakPoint = this.stepper.getNextBreakPoint();
            }

            const {
              canvasContext,
              viewport,
              transform,
              imageLayer,
              background
            } = this.params;
            this.gfx = new _canvas.CanvasGraphics(canvasContext, this.commonObjs, this.objs, this.canvasFactory, this.webGLContext, imageLayer);
            this.gfx.beginDrawing({
              transform,
              viewport,
              transparency,
              background
            });
            this.operatorListIdx = 0;
            this.graphicsReady = true;

            if (this.graphicsReadyCallback) {
              this.graphicsReadyCallback();
            }
          }

          cancel(error = null) {
            this.running = false;
            this.cancelled = true;

            if (this.gfx) {
              this.gfx.endDrawing();
            }

            if (this._canvas) {
              canvasInRendering.delete(this._canvas);
            }

            this.callback(error || new _display_utils.RenderingCancelledException(`Rendering cancelled, page ${this._pageIndex + 1}`, "canvas"));
          }

          operatorListChanged() {
            if (!this.graphicsReady) {
              if (!this.graphicsReadyCallback) {
                this.graphicsReadyCallback = this._continueBound;
              }

              return;
            }

            if (this.stepper) {
              this.stepper.updateOperatorList(this.operatorList);
            }

            if (this.running) {
              return;
            }

            this._continue();
          }

          _continue() {
            this.running = true;

            if (this.cancelled) {
              return;
            }

            if (this.task.onContinue) {
              this.task.onContinue(this._scheduleNextBound);
            } else {
              this._scheduleNext();
            }
          }

          _scheduleNext() {
            if (this._useRequestAnimationFrame) {
              window.requestAnimationFrame(() => {
                this._nextBound().catch(this.cancel.bind(this));
              });
            } else {
              Promise.resolve().then(this._nextBound).catch(this.cancel.bind(this));
            }
          }

          async _next() {
            if (this.cancelled) {
              return;
            }

            this.operatorListIdx = this.gfx.executeOperatorList(this.operatorList, this.operatorListIdx, this._continueBound, this.stepper);

            if (this.operatorListIdx === this.operatorList.argsArray.length) {
              this.running = false;

              if (this.operatorList.lastChunk) {
                this.gfx.endDrawing();

                if (this._canvas) {
                  canvasInRendering.delete(this._canvas);
                }

                this.callback();
              }
            }
          }

        }

        return InternalRenderTask;
      }();

      const version = '2.5.207';
      exports.version = version;
      const build = '0974d605';
      exports.build = build;
      /***/
    },
    /* 6 */

    /***/
    function (module, exports, __w_pdfjs_require__) {
      "use strict";

      Object.defineProperty(exports, "__esModule", {
        value: true
      });
      exports.FontLoader = exports.FontFaceObject = void 0;

      var _util = __w_pdfjs_require__(2);

      class BaseFontLoader {
        constructor({
          docId,
          onUnsupportedFeature
        }) {
          if (this.constructor === BaseFontLoader) {
            (0, _util.unreachable)("Cannot initialize BaseFontLoader.");
          }

          this.docId = docId;
          this._onUnsupportedFeature = onUnsupportedFeature;
          this.nativeFontFaces = [];
          this.styleElement = null;
        }

        addNativeFontFace(nativeFontFace) {
          this.nativeFontFaces.push(nativeFontFace);
          document.fonts.add(nativeFontFace);
        }

        insertRule(rule) {
          let styleElement = this.styleElement;

          if (!styleElement) {
            styleElement = this.styleElement = document.createElement("style");
            styleElement.id = `PDFJS_FONT_STYLE_TAG_${this.docId}`;
            document.documentElement.getElementsByTagName("head")[0].appendChild(styleElement);
          }

          const styleSheet = styleElement.sheet;
          styleSheet.insertRule(rule, styleSheet.cssRules.length);
        }

        clear() {
          this.nativeFontFaces.forEach(function (nativeFontFace) {
            document.fonts.delete(nativeFontFace);
          });
          this.nativeFontFaces.length = 0;

          if (this.styleElement) {
            this.styleElement.remove();
            this.styleElement = null;
          }
        }

        async bind(font) {
          if (font.attached || font.missingFile) {
            return;
          }

          font.attached = true;

          if (this.isFontLoadingAPISupported) {
            const nativeFontFace = font.createNativeFontFace();

            if (nativeFontFace) {
              this.addNativeFontFace(nativeFontFace);

              try {
                await nativeFontFace.loaded;
              } catch (ex) {
                this._onUnsupportedFeature({
                  featureId: _util.UNSUPPORTED_FEATURES.errorFontLoadNative
                });

                (0, _util.warn)(`Failed to load font '${nativeFontFace.family}': '${ex}'.`);
                font.disableFontFace = true;
                throw ex;
              }
            }

            return;
          }

          const rule = font.createFontFaceRule();

          if (rule) {
            this.insertRule(rule);

            if (this.isSyncFontLoadingSupported) {
              return;
            }

            await new Promise(resolve => {
              const request = this._queueLoadingCallback(resolve);

              this._prepareFontLoadEvent([rule], [font], request);
            });
          }
        }

        _queueLoadingCallback(callback) {
          (0, _util.unreachable)("Abstract method `_queueLoadingCallback`.");
        }

        get isFontLoadingAPISupported() {
          const supported = typeof document !== "undefined" && !!document.fonts;
          return (0, _util.shadow)(this, "isFontLoadingAPISupported", supported);
        }

        get isSyncFontLoadingSupported() {
          (0, _util.unreachable)("Abstract method `isSyncFontLoadingSupported`.");
        }

        get _loadTestFont() {
          (0, _util.unreachable)("Abstract method `_loadTestFont`.");
        }

        _prepareFontLoadEvent(rules, fontsToLoad, request) {
          (0, _util.unreachable)("Abstract method `_prepareFontLoadEvent`.");
        }

      }

      let FontLoader;
      exports.FontLoader = FontLoader;
      {
        exports.FontLoader = FontLoader = class GenericFontLoader extends BaseFontLoader {
          constructor(docId) {
            super(docId);
            this.loadingContext = {
              requests: [],
              nextRequestId: 0
            };
            this.loadTestFontId = 0;
          }

          get isSyncFontLoadingSupported() {
            let supported = false;

            if (typeof navigator === "undefined") {
              supported = true;
            } else {
              const m = /Mozilla\/5.0.*?rv:(\d+).*? Gecko/.exec(navigator.userAgent);

              if (m && m[1] >= 14) {
                supported = true;
              }
            }

            return (0, _util.shadow)(this, "isSyncFontLoadingSupported", supported);
          }

          _queueLoadingCallback(callback) {
            function completeRequest() {
              (0, _util.assert)(!request.done, "completeRequest() cannot be called twice.");
              request.done = true;

              while (context.requests.length > 0 && context.requests[0].done) {
                const otherRequest = context.requests.shift();
                setTimeout(otherRequest.callback, 0);
              }
            }

            const context = this.loadingContext;
            const request = {
              id: `pdfjs-font-loading-${context.nextRequestId++}`,
              done: false,
              complete: completeRequest,
              callback
            };
            context.requests.push(request);
            return request;
          }

          get _loadTestFont() {
            const getLoadTestFont = function () {
              return atob("T1RUTwALAIAAAwAwQ0ZGIDHtZg4AAAOYAAAAgUZGVE1lkzZwAAAEHAAAABxHREVGABQA" + "FQAABDgAAAAeT1MvMlYNYwkAAAEgAAAAYGNtYXABDQLUAAACNAAAAUJoZWFk/xVFDQAA" + "ALwAAAA2aGhlYQdkA+oAAAD0AAAAJGhtdHgD6AAAAAAEWAAAAAZtYXhwAAJQAAAAARgA" + "AAAGbmFtZVjmdH4AAAGAAAAAsXBvc3T/hgAzAAADeAAAACAAAQAAAAEAALZRFsRfDzz1" + "AAsD6AAAAADOBOTLAAAAAM4KHDwAAAAAA+gDIQAAAAgAAgAAAAAAAAABAAADIQAAAFoD" + "6AAAAAAD6AABAAAAAAAAAAAAAAAAAAAAAQAAUAAAAgAAAAQD6AH0AAUAAAKKArwAAACM" + "AooCvAAAAeAAMQECAAACAAYJAAAAAAAAAAAAAQAAAAAAAAAAAAAAAFBmRWQAwAAuAC4D" + "IP84AFoDIQAAAAAAAQAAAAAAAAAAACAAIAABAAAADgCuAAEAAAAAAAAAAQAAAAEAAAAA" + "AAEAAQAAAAEAAAAAAAIAAQAAAAEAAAAAAAMAAQAAAAEAAAAAAAQAAQAAAAEAAAAAAAUA" + "AQAAAAEAAAAAAAYAAQAAAAMAAQQJAAAAAgABAAMAAQQJAAEAAgABAAMAAQQJAAIAAgAB" + "AAMAAQQJAAMAAgABAAMAAQQJAAQAAgABAAMAAQQJAAUAAgABAAMAAQQJAAYAAgABWABY" + "AAAAAAAAAwAAAAMAAAAcAAEAAAAAADwAAwABAAAAHAAEACAAAAAEAAQAAQAAAC7//wAA" + "AC7////TAAEAAAAAAAABBgAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + "AAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAD/gwAyAAAAAQAAAAAAAAAAAAAAAAAA" + "AAABAAQEAAEBAQJYAAEBASH4DwD4GwHEAvgcA/gXBIwMAYuL+nz5tQXkD5j3CBLnEQAC" + "AQEBIVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYAAABAQAADwACAQEEE/t3" + "Dov6fAH6fAT+fPp8+nwHDosMCvm1Cvm1DAz6fBQAAAAAAAABAAAAAMmJbzEAAAAAzgTj" + "FQAAAADOBOQpAAEAAAAAAAAADAAUAAQAAAABAAAAAgABAAAAAAAAAAAD6AAAAAAAAA==");
            };

            return (0, _util.shadow)(this, "_loadTestFont", getLoadTestFont());
          }

          _prepareFontLoadEvent(rules, fonts, request) {
            function int32(data, offset) {
              return data.charCodeAt(offset) << 24 | data.charCodeAt(offset + 1) << 16 | data.charCodeAt(offset + 2) << 8 | data.charCodeAt(offset + 3) & 0xff;
            }

            function spliceString(s, offset, remove, insert) {
              const chunk1 = s.substring(0, offset);
              const chunk2 = s.substring(offset + remove);
              return chunk1 + insert + chunk2;
            }

            let i, ii;
            const canvas = document.createElement("canvas");
            canvas.width = 1;
            canvas.height = 1;
            const ctx = canvas.getContext("2d");
            let called = 0;

            function isFontReady(name, callback) {
              called++;

              if (called > 30) {
                (0, _util.warn)("Load test font never loaded.");
                callback();
                return;
              }

              ctx.font = "30px " + name;
              ctx.fillText(".", 0, 20);
              const imageData = ctx.getImageData(0, 0, 1, 1);

              if (imageData.data[3] > 0) {
                callback();
                return;
              }

              setTimeout(isFontReady.bind(null, name, callback));
            }

            const loadTestFontId = `lt${Date.now()}${this.loadTestFontId++}`;
            let data = this._loadTestFont;
            const COMMENT_OFFSET = 976;
            data = spliceString(data, COMMENT_OFFSET, loadTestFontId.length, loadTestFontId);
            const CFF_CHECKSUM_OFFSET = 16;
            const XXXX_VALUE = 0x58585858;
            let checksum = int32(data, CFF_CHECKSUM_OFFSET);

            for (i = 0, ii = loadTestFontId.length - 3; i < ii; i += 4) {
              checksum = checksum - XXXX_VALUE + int32(loadTestFontId, i) | 0;
            }

            if (i < loadTestFontId.length) {
              checksum = checksum - XXXX_VALUE + int32(loadTestFontId + "XXX", i) | 0;
            }

            data = spliceString(data, CFF_CHECKSUM_OFFSET, 4, (0, _util.string32)(checksum));
            const url = `url(data:font/opentype;base64,${btoa(data)});`;
            const rule = `@font-face {font-family:"${loadTestFontId}";src:${url}}`;
            this.insertRule(rule);
            const names = [];

            for (i = 0, ii = fonts.length; i < ii; i++) {
              names.push(fonts[i].loadedName);
            }

            names.push(loadTestFontId);
            const div = document.createElement("div");
            div.style.visibility = "hidden";
            div.style.width = div.style.height = "10px";
            div.style.position = "absolute";
            div.style.top = div.style.left = "0px";

            for (i = 0, ii = names.length; i < ii; ++i) {
              const span = document.createElement("span");
              span.textContent = "Hi";
              span.style.fontFamily = names[i];
              div.appendChild(span);
            }

            document.body.appendChild(div);
            isFontReady(loadTestFontId, function () {
              document.body.removeChild(div);
              request.complete();
            });
          }

        };
      }

      class FontFaceObject {
        constructor(translatedData, {
          isEvalSupported = true,
          disableFontFace = false,
          ignoreErrors = false,
          onUnsupportedFeature = null,
          fontRegistry = null
        }) {
          this.compiledGlyphs = Object.create(null);

          for (const i in translatedData) {
            this[i] = translatedData[i];
          }

          this.isEvalSupported = isEvalSupported !== false;
          this.disableFontFace = disableFontFace === true;
          this.ignoreErrors = ignoreErrors === true;
          this._onUnsupportedFeature = onUnsupportedFeature;
          this.fontRegistry = fontRegistry;
        }

        createNativeFontFace() {
          if (!this.data || this.disableFontFace) {
            return null;
          }

          const nativeFontFace = new FontFace(this.loadedName, this.data, {});

          if (this.fontRegistry) {
            this.fontRegistry.registerFont(this);
          }

          return nativeFontFace;
        }

        createFontFaceRule() {
          if (!this.data || this.disableFontFace) {
            return null;
          }

          const data = (0, _util.bytesToString)(new Uint8Array(this.data));
          const url = `url(data:${this.mimetype};base64,${btoa(data)});`;
          const rule = `@font-face {font-family:"${this.loadedName}";src:${url}}`;

          if (this.fontRegistry) {
            this.fontRegistry.registerFont(this, url);
          }

          return rule;
        }

        getPathGenerator(objs, character) {
          if (this.compiledGlyphs[character] !== undefined) {
            return this.compiledGlyphs[character];
          }

          let cmds, current;

          try {
            cmds = objs.get(this.loadedName + "_path_" + character);
          } catch (ex) {
            if (!this.ignoreErrors) {
              throw ex;
            }

            if (this._onUnsupportedFeature) {
              this._onUnsupportedFeature({
                featureId: _util.UNSUPPORTED_FEATURES.errorFontGetPath
              });
            }

            (0, _util.warn)(`getPathGenerator - ignoring character: "${ex}".`);
            return this.compiledGlyphs[character] = function (c, size) {};
          }

          if (this.isEvalSupported && _util.IsEvalSupportedCached.value) {
            let args,
                js = "";

            for (let i = 0, ii = cmds.length; i < ii; i++) {
              current = cmds[i];

              if (current.args !== undefined) {
                args = current.args.join(",");
              } else {
                args = "";
              }

              js += "c." + current.cmd + "(" + args + ");\n";
            }

            return this.compiledGlyphs[character] = new Function("c", "size", js);
          }

          return this.compiledGlyphs[character] = function (c, size) {
            for (let i = 0, ii = cmds.length; i < ii; i++) {
              current = cmds[i];

              if (current.cmd === "scale") {
                current.args = [size, -size];
              }

              c[current.cmd].apply(c, current.args);
            }
          };
        }

      }

      exports.FontFaceObject = FontFaceObject;
      /***/
    },
    /* 7 */

    /***/
    function (module, exports, __w_pdfjs_require__) {
      "use strict";

      Object.defineProperty(exports, "__esModule", {
        value: true
      });
      exports.apiCompatibilityParams = void 0;

      var _is_node = __w_pdfjs_require__(4);

      const compatibilityParams = Object.create(null);
      {
        (function checkFontFace() {
          if (_is_node.isNodeJS) {
            compatibilityParams.disableFontFace = true;
          }
        })();
      }
      const apiCompatibilityParams = Object.freeze(compatibilityParams);
      exports.apiCompatibilityParams = apiCompatibilityParams;
      /***/
    },
    /* 8 */

    /***/
    function (module, exports, __w_pdfjs_require__) {
      "use strict";

      Object.defineProperty(exports, "__esModule", {
        value: true
      });
      exports.CanvasGraphics = void 0;

      var _util = __w_pdfjs_require__(2);

      var _pattern_helper = __w_pdfjs_require__(9);

      var MIN_FONT_SIZE = 16;
      var MAX_FONT_SIZE = 100;
      var MAX_GROUP_SIZE = 4096;
      var MIN_WIDTH_FACTOR = 0.65;
      var COMPILE_TYPE3_GLYPHS = true;
      var MAX_SIZE_TO_COMPILE = 1000;
      var FULL_CHUNK_HEIGHT = 16;

      function addContextCurrentTransform(ctx) {
        if (!ctx.mozCurrentTransform) {
          ctx._originalSave = ctx.save;
          ctx._originalRestore = ctx.restore;
          ctx._originalRotate = ctx.rotate;
          ctx._originalScale = ctx.scale;
          ctx._originalTranslate = ctx.translate;
          ctx._originalTransform = ctx.transform;
          ctx._originalSetTransform = ctx.setTransform;
          ctx._transformMatrix = ctx._transformMatrix || [1, 0, 0, 1, 0, 0];
          ctx._transformStack = [];
          Object.defineProperty(ctx, "mozCurrentTransform", {
            get: function getCurrentTransform() {
              return this._transformMatrix;
            }
          });
          Object.defineProperty(ctx, "mozCurrentTransformInverse", {
            get: function getCurrentTransformInverse() {
              var m = this._transformMatrix;
              var a = m[0],
                  b = m[1],
                  c = m[2],
                  d = m[3],
                  e = m[4],
                  f = m[5];
              var ad_bc = a * d - b * c;
              var bc_ad = b * c - a * d;
              return [d / ad_bc, b / bc_ad, c / bc_ad, a / ad_bc, (d * e - c * f) / bc_ad, (b * e - a * f) / ad_bc];
            }
          });

          ctx.save = function ctxSave() {
            var old = this._transformMatrix;

            this._transformStack.push(old);

            this._transformMatrix = old.slice(0, 6);

            this._originalSave();
          };

          ctx.restore = function ctxRestore() {
            var prev = this._transformStack.pop();

            if (prev) {
              this._transformMatrix = prev;

              this._originalRestore();
            }
          };

          ctx.translate = function ctxTranslate(x, y) {
            var m = this._transformMatrix;
            m[4] = m[0] * x + m[2] * y + m[4];
            m[5] = m[1] * x + m[3] * y + m[5];

            this._originalTranslate(x, y);
          };

          ctx.scale = function ctxScale(x, y) {
            var m = this._transformMatrix;
            m[0] = m[0] * x;
            m[1] = m[1] * x;
            m[2] = m[2] * y;
            m[3] = m[3] * y;

            this._originalScale(x, y);
          };

          ctx.transform = function ctxTransform(a, b, c, d, e, f) {
            var m = this._transformMatrix;
            this._transformMatrix = [m[0] * a + m[2] * b, m[1] * a + m[3] * b, m[0] * c + m[2] * d, m[1] * c + m[3] * d, m[0] * e + m[2] * f + m[4], m[1] * e + m[3] * f + m[5]];

            ctx._originalTransform(a, b, c, d, e, f);
          };

          ctx.setTransform = function ctxSetTransform(a, b, c, d, e, f) {
            this._transformMatrix = [a, b, c, d, e, f];

            ctx._originalSetTransform(a, b, c, d, e, f);
          };

          ctx.rotate = function ctxRotate(angle) {
            var cosValue = Math.cos(angle);
            var sinValue = Math.sin(angle);
            var m = this._transformMatrix;
            this._transformMatrix = [m[0] * cosValue + m[2] * sinValue, m[1] * cosValue + m[3] * sinValue, m[0] * -sinValue + m[2] * cosValue, m[1] * -sinValue + m[3] * cosValue, m[4], m[5]];

            this._originalRotate(angle);
          };
        }
      }

      var CachedCanvases = function CachedCanvasesClosure() {
        function CachedCanvases(canvasFactory) {
          this.canvasFactory = canvasFactory;
          this.cache = Object.create(null);
        }

        CachedCanvases.prototype = {
          getCanvas: function CachedCanvases_getCanvas(id, width, height, trackTransform) {
            var canvasEntry;

            if (this.cache[id] !== undefined) {
              canvasEntry = this.cache[id];
              this.canvasFactory.reset(canvasEntry, width, height);
              canvasEntry.context.setTransform(1, 0, 0, 1, 0, 0);
            } else {
              canvasEntry = this.canvasFactory.create(width, height);
              this.cache[id] = canvasEntry;
            }

            if (trackTransform) {
              addContextCurrentTransform(canvasEntry.context);
            }

            return canvasEntry;
          },

          clear() {
            for (var id in this.cache) {
              var canvasEntry = this.cache[id];
              this.canvasFactory.destroy(canvasEntry);
              delete this.cache[id];
            }
          }

        };
        return CachedCanvases;
      }();

      function compileType3Glyph(imgData) {
        var POINT_TO_PROCESS_LIMIT = 1000;
        var width = imgData.width,
            height = imgData.height;
        var i,
            j,
            j0,
            width1 = width + 1;
        var points = new Uint8Array(width1 * (height + 1));
        var POINT_TYPES = new Uint8Array([0, 2, 4, 0, 1, 0, 5, 4, 8, 10, 0, 8, 0, 2, 1, 0]);
        var lineSize = width + 7 & ~7,
            data0 = imgData.data;
        var data = new Uint8Array(lineSize * height),
            pos = 0,
            ii;

        for (i = 0, ii = data0.length; i < ii; i++) {
          var mask = 128,
              elem = data0[i];

          while (mask > 0) {
            data[pos++] = elem & mask ? 0 : 255;
            mask >>= 1;
          }
        }

        var count = 0;
        pos = 0;

        if (data[pos] !== 0) {
          points[0] = 1;
          ++count;
        }

        for (j = 1; j < width; j++) {
          if (data[pos] !== data[pos + 1]) {
            points[j] = data[pos] ? 2 : 1;
            ++count;
          }

          pos++;
        }

        if (data[pos] !== 0) {
          points[j] = 2;
          ++count;
        }

        for (i = 1; i < height; i++) {
          pos = i * lineSize;
          j0 = i * width1;

          if (data[pos - lineSize] !== data[pos]) {
            points[j0] = data[pos] ? 1 : 8;
            ++count;
          }

          var sum = (data[pos] ? 4 : 0) + (data[pos - lineSize] ? 8 : 0);

          for (j = 1; j < width; j++) {
            sum = (sum >> 2) + (data[pos + 1] ? 4 : 0) + (data[pos - lineSize + 1] ? 8 : 0);

            if (POINT_TYPES[sum]) {
              points[j0 + j] = POINT_TYPES[sum];
              ++count;
            }

            pos++;
          }

          if (data[pos - lineSize] !== data[pos]) {
            points[j0 + j] = data[pos] ? 2 : 4;
            ++count;
          }

          if (count > POINT_TO_PROCESS_LIMIT) {
            return null;
          }
        }

        pos = lineSize * (height - 1);
        j0 = i * width1;

        if (data[pos] !== 0) {
          points[j0] = 8;
          ++count;
        }

        for (j = 1; j < width; j++) {
          if (data[pos] !== data[pos + 1]) {
            points[j0 + j] = data[pos] ? 4 : 8;
            ++count;
          }

          pos++;
        }

        if (data[pos] !== 0) {
          points[j0 + j] = 4;
          ++count;
        }

        if (count > POINT_TO_PROCESS_LIMIT) {
          return null;
        }

        var steps = new Int32Array([0, width1, -1, 0, -width1, 0, 0, 0, 1]);
        var outlines = [];

        for (i = 0; count && i <= height; i++) {
          var p = i * width1;
          var end = p + width;

          while (p < end && !points[p]) {
            p++;
          }

          if (p === end) {
            continue;
          }

          var coords = [p % width1, i];
          var type = points[p],
              p0 = p,
              pp;

          do {
            var step = steps[type];

            do {
              p += step;
            } while (!points[p]);

            pp = points[p];

            if (pp !== 5 && pp !== 10) {
              type = pp;
              points[p] = 0;
            } else {
              type = pp & 0x33 * type >> 4;
              points[p] &= type >> 2 | type << 2;
            }

            coords.push(p % width1);
            coords.push(p / width1 | 0);

            if (!points[p]) {
              --count;
            }
          } while (p0 !== p);

          outlines.push(coords);
          --i;
        }

        var drawOutline = function (c) {
          c.save();
          c.scale(1 / width, -1 / height);
          c.translate(0, -height);
          c.beginPath();

          for (let k = 0, kk = outlines.length; k < kk; k++) {
            var o = outlines[k];
            c.moveTo(o[0], o[1]);

            for (let l = 2, ll = o.length; l < ll; l += 2) {
              c.lineTo(o[l], o[l + 1]);
            }
          }

          c.fill();
          c.beginPath();
          c.restore();
        };

        return drawOutline;
      }

      var CanvasExtraState = function CanvasExtraStateClosure() {
        function CanvasExtraState() {
          this.alphaIsShape = false;
          this.fontSize = 0;
          this.fontSizeScale = 1;
          this.textMatrix = _util.IDENTITY_MATRIX;
          this.textMatrixScale = 1;
          this.fontMatrix = _util.FONT_IDENTITY_MATRIX;
          this.leading = 0;
          this.x = 0;
          this.y = 0;
          this.lineX = 0;
          this.lineY = 0;
          this.charSpacing = 0;
          this.wordSpacing = 0;
          this.textHScale = 1;
          this.textRenderingMode = _util.TextRenderingMode.FILL;
          this.textRise = 0;
          this.fillColor = "#000000";
          this.strokeColor = "#000000";
          this.patternFill = false;
          this.fillAlpha = 1;
          this.strokeAlpha = 1;
          this.lineWidth = 1;
          this.activeSMask = null;
          this.resumeSMaskCtx = null;
        }

        CanvasExtraState.prototype = {
          clone: function CanvasExtraState_clone() {
            return Object.create(this);
          },
          setCurrentPoint: function CanvasExtraState_setCurrentPoint(x, y) {
            this.x = x;
            this.y = y;
          }
        };
        return CanvasExtraState;
      }();

      var CanvasGraphics = function CanvasGraphicsClosure() {
        var EXECUTION_TIME = 15;
        var EXECUTION_STEPS = 10;

        function CanvasGraphics(canvasCtx, commonObjs, objs, canvasFactory, webGLContext, imageLayer) {
          this.ctx = canvasCtx;
          this.current = new CanvasExtraState();
          this.stateStack = [];
          this.pendingClip = null;
          this.pendingEOFill = false;
          this.res = null;
          this.xobjs = null;
          this.commonObjs = commonObjs;
          this.objs = objs;
          this.canvasFactory = canvasFactory;
          this.webGLContext = webGLContext;
          this.imageLayer = imageLayer;
          this.groupStack = [];
          this.processingType3 = null;
          this.baseTransform = null;
          this.baseTransformStack = [];
          this.groupLevel = 0;
          this.smaskStack = [];
          this.smaskCounter = 0;
          this.tempSMask = null;
          this.cachedCanvases = new CachedCanvases(this.canvasFactory);

          if (canvasCtx) {
            addContextCurrentTransform(canvasCtx);
          }

          this._cachedGetSinglePixelWidth = null;
        }

        function putBinaryImageData(ctx, imgData) {
          if (typeof ImageData !== "undefined" && imgData instanceof ImageData) {
            ctx.putImageData(imgData, 0, 0);
            return;
          }

          var height = imgData.height,
              width = imgData.width;
          var partialChunkHeight = height % FULL_CHUNK_HEIGHT;
          var fullChunks = (height - partialChunkHeight) / FULL_CHUNK_HEIGHT;
          var totalChunks = partialChunkHeight === 0 ? fullChunks : fullChunks + 1;
          var chunkImgData = ctx.createImageData(width, FULL_CHUNK_HEIGHT);
          var srcPos = 0,
              destPos;
          var src = imgData.data;
          var dest = chunkImgData.data;
          var i, j, thisChunkHeight, elemsInThisChunk;

          if (imgData.kind === _util.ImageKind.GRAYSCALE_1BPP) {
            var srcLength = src.byteLength;
            var dest32 = new Uint32Array(dest.buffer, 0, dest.byteLength >> 2);
            var dest32DataLength = dest32.length;
            var fullSrcDiff = width + 7 >> 3;
            var white = 0xffffffff;
            var black = _util.IsLittleEndianCached.value ? 0xff000000 : 0x000000ff;

            for (i = 0; i < totalChunks; i++) {
              thisChunkHeight = i < fullChunks ? FULL_CHUNK_HEIGHT : partialChunkHeight;
              destPos = 0;

              for (j = 0; j < thisChunkHeight; j++) {
                var srcDiff = srcLength - srcPos;
                var k = 0;
                var kEnd = srcDiff > fullSrcDiff ? width : srcDiff * 8 - 7;
                var kEndUnrolled = kEnd & ~7;
                var mask = 0;
                var srcByte = 0;

                for (; k < kEndUnrolled; k += 8) {
                  srcByte = src[srcPos++];
                  dest32[destPos++] = srcByte & 128 ? white : black;
                  dest32[destPos++] = srcByte & 64 ? white : black;
                  dest32[destPos++] = srcByte & 32 ? white : black;
                  dest32[destPos++] = srcByte & 16 ? white : black;
                  dest32[destPos++] = srcByte & 8 ? white : black;
                  dest32[destPos++] = srcByte & 4 ? white : black;
                  dest32[destPos++] = srcByte & 2 ? white : black;
                  dest32[destPos++] = srcByte & 1 ? white : black;
                }

                for (; k < kEnd; k++) {
                  if (mask === 0) {
                    srcByte = src[srcPos++];
                    mask = 128;
                  }

                  dest32[destPos++] = srcByte & mask ? white : black;
                  mask >>= 1;
                }
              }

              while (destPos < dest32DataLength) {
                dest32[destPos++] = 0;
              }

              ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT);
            }
          } else if (imgData.kind === _util.ImageKind.RGBA_32BPP) {
            j = 0;
            elemsInThisChunk = width * FULL_CHUNK_HEIGHT * 4;

            for (i = 0; i < fullChunks; i++) {
              dest.set(src.subarray(srcPos, srcPos + elemsInThisChunk));
              srcPos += elemsInThisChunk;
              ctx.putImageData(chunkImgData, 0, j);
              j += FULL_CHUNK_HEIGHT;
            }

            if (i < totalChunks) {
              elemsInThisChunk = width * partialChunkHeight * 4;
              dest.set(src.subarray(srcPos, srcPos + elemsInThisChunk));
              ctx.putImageData(chunkImgData, 0, j);
            }
          } else if (imgData.kind === _util.ImageKind.RGB_24BPP) {
            thisChunkHeight = FULL_CHUNK_HEIGHT;
            elemsInThisChunk = width * thisChunkHeight;

            for (i = 0; i < totalChunks; i++) {
              if (i >= fullChunks) {
                thisChunkHeight = partialChunkHeight;
                elemsInThisChunk = width * thisChunkHeight;
              }

              destPos = 0;

              for (j = elemsInThisChunk; j--;) {
                dest[destPos++] = src[srcPos++];
                dest[destPos++] = src[srcPos++];
                dest[destPos++] = src[srcPos++];
                dest[destPos++] = 255;
              }

              ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT);
            }
          } else {
            throw new Error(`bad image kind: ${imgData.kind}`);
          }
        }

        function putBinaryImageMask(ctx, imgData) {
          var height = imgData.height,
              width = imgData.width;
          var partialChunkHeight = height % FULL_CHUNK_HEIGHT;
          var fullChunks = (height - partialChunkHeight) / FULL_CHUNK_HEIGHT;
          var totalChunks = partialChunkHeight === 0 ? fullChunks : fullChunks + 1;
          var chunkImgData = ctx.createImageData(width, FULL_CHUNK_HEIGHT);
          var srcPos = 0;
          var src = imgData.data;
          var dest = chunkImgData.data;

          for (var i = 0; i < totalChunks; i++) {
            var thisChunkHeight = i < fullChunks ? FULL_CHUNK_HEIGHT : partialChunkHeight;
            var destPos = 3;

            for (var j = 0; j < thisChunkHeight; j++) {
              var mask = 0;

              for (var k = 0; k < width; k++) {
                if (!mask) {
                  var elem = src[srcPos++];
                  mask = 128;
                }

                dest[destPos] = elem & mask ? 0 : 255;
                destPos += 4;
                mask >>= 1;
              }
            }

            ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT);
          }
        }

        function copyCtxState(sourceCtx, destCtx) {
          var properties = ["strokeStyle", "fillStyle", "fillRule", "globalAlpha", "lineWidth", "lineCap", "lineJoin", "miterLimit", "globalCompositeOperation", "font"];

          for (var i = 0, ii = properties.length; i < ii; i++) {
            var property = properties[i];

            if (sourceCtx[property] !== undefined) {
              destCtx[property] = sourceCtx[property];
            }
          }

          if (sourceCtx.setLineDash !== undefined) {
            destCtx.setLineDash(sourceCtx.getLineDash());
            destCtx.lineDashOffset = sourceCtx.lineDashOffset;
          }
        }

        function resetCtxToDefault(ctx) {
          ctx.strokeStyle = "#000000";
          ctx.fillStyle = "#000000";
          ctx.fillRule = "nonzero";
          ctx.globalAlpha = 1;
          ctx.lineWidth = 1;
          ctx.lineCap = "butt";
          ctx.lineJoin = "miter";
          ctx.miterLimit = 10;
          ctx.globalCompositeOperation = "source-over";
          ctx.font = "10px sans-serif";

          if (ctx.setLineDash !== undefined) {
            ctx.setLineDash([]);
            ctx.lineDashOffset = 0;
          }
        }

        function composeSMaskBackdrop(bytes, r0, g0, b0) {
          var length = bytes.length;

          for (var i = 3; i < length; i += 4) {
            var alpha = bytes[i];

            if (alpha === 0) {
              bytes[i - 3] = r0;
              bytes[i - 2] = g0;
              bytes[i - 1] = b0;
            } else if (alpha < 255) {
              var alpha_ = 255 - alpha;
              bytes[i - 3] = bytes[i - 3] * alpha + r0 * alpha_ >> 8;
              bytes[i - 2] = bytes[i - 2] * alpha + g0 * alpha_ >> 8;
              bytes[i - 1] = bytes[i - 1] * alpha + b0 * alpha_ >> 8;
            }
          }
        }

        function composeSMaskAlpha(maskData, layerData, transferMap) {
          var length = maskData.length;
          var scale = 1 / 255;

          for (var i = 3; i < length; i += 4) {
            var alpha = transferMap ? transferMap[maskData[i]] : maskData[i];
            layerData[i] = layerData[i] * alpha * scale | 0;
          }
        }

        function composeSMaskLuminosity(maskData, layerData, transferMap) {
          var length = maskData.length;

          for (var i = 3; i < length; i += 4) {
            var y = maskData[i - 3] * 77 + maskData[i - 2] * 152 + maskData[i - 1] * 28;
            layerData[i] = transferMap ? layerData[i] * transferMap[y >> 8] >> 8 : layerData[i] * y >> 16;
          }
        }

        function genericComposeSMask(maskCtx, layerCtx, width, height, subtype, backdrop, transferMap) {
          var hasBackdrop = !!backdrop;
          var r0 = hasBackdrop ? backdrop[0] : 0;
          var g0 = hasBackdrop ? backdrop[1] : 0;
          var b0 = hasBackdrop ? backdrop[2] : 0;
          var composeFn;

          if (subtype === "Luminosity") {
            composeFn = composeSMaskLuminosity;
          } else {
            composeFn = composeSMaskAlpha;
          }

          var PIXELS_TO_PROCESS = 1048576;
          var chunkSize = Math.min(height, Math.ceil(PIXELS_TO_PROCESS / width));

          for (var row = 0; row < height; row += chunkSize) {
            var chunkHeight = Math.min(chunkSize, height - row);
            var maskData = maskCtx.getImageData(0, row, width, chunkHeight);
            var layerData = layerCtx.getImageData(0, row, width, chunkHeight);

            if (hasBackdrop) {
              composeSMaskBackdrop(maskData.data, r0, g0, b0);
            }

            composeFn(maskData.data, layerData.data, transferMap);
            maskCtx.putImageData(layerData, 0, row);
          }
        }

        function composeSMask(ctx, smask, layerCtx, webGLContext) {
          var mask = smask.canvas;
          var maskCtx = smask.context;
          ctx.setTransform(smask.scaleX, 0, 0, smask.scaleY, smask.offsetX, smask.offsetY);
          var backdrop = smask.backdrop || null;

          if (!smask.transferMap && webGLContext.isEnabled) {
            const composed = webGLContext.composeSMask({
              layer: layerCtx.canvas,
              mask,
              properties: {
                subtype: smask.subtype,
                backdrop
              }
            });
            ctx.setTransform(1, 0, 0, 1, 0, 0);
            ctx.drawImage(composed, smask.offsetX, smask.offsetY);
            return;
          }

          genericComposeSMask(maskCtx, layerCtx, mask.width, mask.height, smask.subtype, backdrop, smask.transferMap);
          ctx.drawImage(mask, 0, 0);
        }

        var LINE_CAP_STYLES = ["butt", "round", "square"];
        var LINE_JOIN_STYLES = ["miter", "round", "bevel"];
        var NORMAL_CLIP = {};
        var EO_CLIP = {};
        CanvasGraphics.prototype = {
          beginDrawing({
            transform,
            viewport,
            transparency = false,
            background = null
          }) {
            var width = this.ctx.canvas.width;
            var height = this.ctx.canvas.height;
            this.ctx.save();
            this.ctx.fillStyle = background || "rgb(255, 255, 255)";
            this.ctx.fillRect(0, 0, width, height);
            this.ctx.restore();

            if (transparency) {
              var transparentCanvas = this.cachedCanvases.getCanvas("transparent", width, height, true);
              this.compositeCtx = this.ctx;
              this.transparentCanvas = transparentCanvas.canvas;
              this.ctx = transparentCanvas.context;
              this.ctx.save();
              this.ctx.transform.apply(this.ctx, this.compositeCtx.mozCurrentTransform);
            }

            this.ctx.save();
            resetCtxToDefault(this.ctx);

            if (transform) {
              this.ctx.transform.apply(this.ctx, transform);
            }

            this.ctx.transform.apply(this.ctx, viewport.transform);
            this.baseTransform = this.ctx.mozCurrentTransform.slice();

            if (this.imageLayer) {
              this.imageLayer.beginLayout();
            }
          },

          executeOperatorList: function CanvasGraphics_executeOperatorList(operatorList, executionStartIdx, continueCallback, stepper) {
            var argsArray = operatorList.argsArray;
            var fnArray = operatorList.fnArray;
            var i = executionStartIdx || 0;
            var argsArrayLen = argsArray.length;

            if (argsArrayLen === i) {
              return i;
            }

            var chunkOperations = argsArrayLen - i > EXECUTION_STEPS && typeof continueCallback === "function";
            var endTime = chunkOperations ? Date.now() + EXECUTION_TIME : 0;
            var steps = 0;
            var commonObjs = this.commonObjs;
            var objs = this.objs;
            var fnId;

            while (true) {
              if (stepper !== undefined && i === stepper.nextBreakPoint) {
                stepper.breakIt(i, continueCallback);
                return i;
              }

              fnId = fnArray[i];

              if (fnId !== _util.OPS.dependency) {
                this[fnId].apply(this, argsArray[i]);
              } else {
                for (const depObjId of argsArray[i]) {
                  const objsPool = depObjId.startsWith("g_") ? commonObjs : objs;

                  if (!objsPool.has(depObjId)) {
                    objsPool.get(depObjId, continueCallback);
                    return i;
                  }
                }
              }

              i++;

              if (i === argsArrayLen) {
                return i;
              }

              if (chunkOperations && ++steps > EXECUTION_STEPS) {
                if (Date.now() > endTime) {
                  continueCallback();
                  return i;
                }

                steps = 0;
              }
            }
          },
          endDrawing: function CanvasGraphics_endDrawing() {
            if (this.current.activeSMask !== null) {
              this.endSMaskGroup();
            }

            this.ctx.restore();

            if (this.transparentCanvas) {
              this.ctx = this.compositeCtx;
              this.ctx.save();
              this.ctx.setTransform(1, 0, 0, 1, 0, 0);
              this.ctx.drawImage(this.transparentCanvas, 0, 0);
              this.ctx.restore();
              this.transparentCanvas = null;
            }

            this.cachedCanvases.clear();
            this.webGLContext.clear();

            if (this.imageLayer) {
              this.imageLayer.endLayout();
            }
          },
          setLineWidth: function CanvasGraphics_setLineWidth(width) {
            this.current.lineWidth = width;
            this.ctx.lineWidth = width;
          },
          setLineCap: function CanvasGraphics_setLineCap(style) {
            this.ctx.lineCap = LINE_CAP_STYLES[style];
          },
          setLineJoin: function CanvasGraphics_setLineJoin(style) {
            this.ctx.lineJoin = LINE_JOIN_STYLES[style];
          },
          setMiterLimit: function CanvasGraphics_setMiterLimit(limit) {
            this.ctx.miterLimit = limit;
          },
          setDash: function CanvasGraphics_setDash(dashArray, dashPhase) {
            var ctx = this.ctx;

            if (ctx.setLineDash !== undefined) {
              ctx.setLineDash(dashArray);
              ctx.lineDashOffset = dashPhase;
            }
          },

          setRenderingIntent(intent) {},

          setFlatness(flatness) {},

          setGState: function CanvasGraphics_setGState(states) {
            for (var i = 0, ii = states.length; i < ii; i++) {
              var state = states[i];
              var key = state[0];
              var value = state[1];

              switch (key) {
                case "LW":
                  this.setLineWidth(value);
                  break;

                case "LC":
                  this.setLineCap(value);
                  break;

                case "LJ":
                  this.setLineJoin(value);
                  break;

                case "ML":
                  this.setMiterLimit(value);
                  break;

                case "D":
                  this.setDash(value[0], value[1]);
                  break;

                case "RI":
                  this.setRenderingIntent(value);
                  break;

                case "FL":
                  this.setFlatness(value);
                  break;

                case "Font":
                  this.setFont(value[0], value[1]);
                  break;

                case "CA":
                  this.current.strokeAlpha = state[1];
                  break;

                case "ca":
                  this.current.fillAlpha = state[1];
                  this.ctx.globalAlpha = state[1];
                  break;

                case "BM":
                  this.ctx.globalCompositeOperation = value;
                  break;

                case "SMask":
                  if (this.current.activeSMask) {
                    if (this.stateStack.length > 0 && this.stateStack[this.stateStack.length - 1].activeSMask === this.current.activeSMask) {
                      this.suspendSMaskGroup();
                    } else {
                      this.endSMaskGroup();
                    }
                  }

                  this.current.activeSMask = value ? this.tempSMask : null;

                  if (this.current.activeSMask) {
                    this.beginSMaskGroup();
                  }

                  this.tempSMask = null;
                  break;
              }
            }
          },
          beginSMaskGroup: function CanvasGraphics_beginSMaskGroup() {
            var activeSMask = this.current.activeSMask;
            var drawnWidth = activeSMask.canvas.width;
            var drawnHeight = activeSMask.canvas.height;
            var cacheId = "smaskGroupAt" + this.groupLevel;
            var scratchCanvas = this.cachedCanvases.getCanvas(cacheId, drawnWidth, drawnHeight, true);
            var currentCtx = this.ctx;
            var currentTransform = currentCtx.mozCurrentTransform;
            this.ctx.save();
            var groupCtx = scratchCanvas.context;
            groupCtx.scale(1 / activeSMask.scaleX, 1 / activeSMask.scaleY);
            groupCtx.translate(-activeSMask.offsetX, -activeSMask.offsetY);
            groupCtx.transform.apply(groupCtx, currentTransform);
            activeSMask.startTransformInverse = groupCtx.mozCurrentTransformInverse;
            copyCtxState(currentCtx, groupCtx);
            this.ctx = groupCtx;
            this.setGState([["BM", "source-over"], ["ca", 1], ["CA", 1]]);
            this.groupStack.push(currentCtx);
            this.groupLevel++;
          },
          suspendSMaskGroup: function CanvasGraphics_endSMaskGroup() {
            var groupCtx = this.ctx;
            this.groupLevel--;
            this.ctx = this.groupStack.pop();
            composeSMask(this.ctx, this.current.activeSMask, groupCtx, this.webGLContext);
            this.ctx.restore();
            this.ctx.save();
            copyCtxState(groupCtx, this.ctx);
            this.current.resumeSMaskCtx = groupCtx;

            var deltaTransform = _util.Util.transform(this.current.activeSMask.startTransformInverse, groupCtx.mozCurrentTransform);

            this.ctx.transform.apply(this.ctx, deltaTransform);
            groupCtx.save();
            groupCtx.setTransform(1, 0, 0, 1, 0, 0);
            groupCtx.clearRect(0, 0, groupCtx.canvas.width, groupCtx.canvas.height);
            groupCtx.restore();
          },
          resumeSMaskGroup: function CanvasGraphics_endSMaskGroup() {
            var groupCtx = this.current.resumeSMaskCtx;
            var currentCtx = this.ctx;
            this.ctx = groupCtx;
            this.groupStack.push(currentCtx);
            this.groupLevel++;
          },
          endSMaskGroup: function CanvasGraphics_endSMaskGroup() {
            var groupCtx = this.ctx;
            this.groupLevel--;
            this.ctx = this.groupStack.pop();
            composeSMask(this.ctx, this.current.activeSMask, groupCtx, this.webGLContext);
            this.ctx.restore();
            copyCtxState(groupCtx, this.ctx);

            var deltaTransform = _util.Util.transform(this.current.activeSMask.startTransformInverse, groupCtx.mozCurrentTransform);

            this.ctx.transform.apply(this.ctx, deltaTransform);
          },
          save: function CanvasGraphics_save() {
            this.ctx.save();
            var old = this.current;
            this.stateStack.push(old);
            this.current = old.clone();
            this.current.resumeSMaskCtx = null;
          },
          restore: function CanvasGraphics_restore() {
            if (this.current.resumeSMaskCtx) {
              this.resumeSMaskGroup();
            }

            if (this.current.activeSMask !== null && (this.stateStack.length === 0 || this.stateStack[this.stateStack.length - 1].activeSMask !== this.current.activeSMask)) {
              this.endSMaskGroup();
            }

            if (this.stateStack.length !== 0) {
              this.current = this.stateStack.pop();
              this.ctx.restore();
              this.pendingClip = null;
              this._cachedGetSinglePixelWidth = null;
            }
          },
          transform: function CanvasGraphics_transform(a, b, c, d, e, f) {
            this.ctx.transform(a, b, c, d, e, f);
            this._cachedGetSinglePixelWidth = null;
          },
          constructPath: function CanvasGraphics_constructPath(ops, args) {
            var ctx = this.ctx;
            var current = this.current;
            var x = current.x,
                y = current.y;

            for (var i = 0, j = 0, ii = ops.length; i < ii; i++) {
              switch (ops[i] | 0) {
                case _util.OPS.rectangle:
                  x = args[j++];
                  y = args[j++];
                  var width = args[j++];
                  var height = args[j++];

                  if (width === 0) {
                    width = this.getSinglePixelWidth();
                  }

                  if (height === 0) {
                    height = this.getSinglePixelWidth();
                  }

                  var xw = x + width;
                  var yh = y + height;
                  this.ctx.moveTo(x, y);
                  this.ctx.lineTo(xw, y);
                  this.ctx.lineTo(xw, yh);
                  this.ctx.lineTo(x, yh);
                  this.ctx.lineTo(x, y);
                  this.ctx.closePath();
                  break;

                case _util.OPS.moveTo:
                  x = args[j++];
                  y = args[j++];
                  ctx.moveTo(x, y);
                  break;

                case _util.OPS.lineTo:
                  x = args[j++];
                  y = args[j++];
                  ctx.lineTo(x, y);
                  break;

                case _util.OPS.curveTo:
                  x = args[j + 4];
                  y = args[j + 5];
                  ctx.bezierCurveTo(args[j], args[j + 1], args[j + 2], args[j + 3], x, y);
                  j += 6;
                  break;

                case _util.OPS.curveTo2:
                  ctx.bezierCurveTo(x, y, args[j], args[j + 1], args[j + 2], args[j + 3]);
                  x = args[j + 2];
                  y = args[j + 3];
                  j += 4;
                  break;

                case _util.OPS.curveTo3:
                  x = args[j + 2];
                  y = args[j + 3];
                  ctx.bezierCurveTo(args[j], args[j + 1], x, y, x, y);
                  j += 4;
                  break;

                case _util.OPS.closePath:
                  ctx.closePath();
                  break;
              }
            }

            current.setCurrentPoint(x, y);
          },
          closePath: function CanvasGraphics_closePath() {
            this.ctx.closePath();
          },
          stroke: function CanvasGraphics_stroke(consumePath) {
            consumePath = typeof consumePath !== "undefined" ? consumePath : true;
            var ctx = this.ctx;
            var strokeColor = this.current.strokeColor;
            ctx.globalAlpha = this.current.strokeAlpha;

            if (strokeColor && strokeColor.hasOwnProperty("type") && strokeColor.type === "Pattern") {
              ctx.save();
              const transform = ctx.mozCurrentTransform;

              const scale = _util.Util.singularValueDecompose2dScale(transform)[0];

              ctx.strokeStyle = strokeColor.getPattern(ctx, this);
              ctx.lineWidth = Math.max(this.getSinglePixelWidth() * MIN_WIDTH_FACTOR, this.current.lineWidth * scale);
              ctx.stroke();
              ctx.restore();
            } else {
              ctx.lineWidth = Math.max(this.getSinglePixelWidth() * MIN_WIDTH_FACTOR, this.current.lineWidth);
              ctx.stroke();
            }

            if (consumePath) {
              this.consumePath();
            }

            ctx.globalAlpha = this.current.fillAlpha;
          },
          closeStroke: function CanvasGraphics_closeStroke() {
            this.closePath();
            this.stroke();
          },
          fill: function CanvasGraphics_fill(consumePath) {
            consumePath = typeof consumePath !== "undefined" ? consumePath : true;
            var ctx = this.ctx;
            var fillColor = this.current.fillColor;
            var isPatternFill = this.current.patternFill;
            var needRestore = false;

            if (isPatternFill) {
              ctx.save();

              if (this.baseTransform) {
                ctx.setTransform.apply(ctx, this.baseTransform);
              }

              ctx.fillStyle = fillColor.getPattern(ctx, this);
              needRestore = true;
            }

            if (this.pendingEOFill) {
              ctx.fill("evenodd");
              this.pendingEOFill = false;
            } else {
              ctx.fill();
            }

            if (needRestore) {
              ctx.restore();
            }

            if (consumePath) {
              this.consumePath();
            }
          },
          eoFill: function CanvasGraphics_eoFill() {
            this.pendingEOFill = true;
            this.fill();
          },
          fillStroke: function CanvasGraphics_fillStroke() {
            this.fill(false);
            this.stroke(false);
            this.consumePath();
          },
          eoFillStroke: function CanvasGraphics_eoFillStroke() {
            this.pendingEOFill = true;
            this.fillStroke();
          },
          closeFillStroke: function CanvasGraphics_closeFillStroke() {
            this.closePath();
            this.fillStroke();
          },
          closeEOFillStroke: function CanvasGraphics_closeEOFillStroke() {
            this.pendingEOFill = true;
            this.closePath();
            this.fillStroke();
          },
          endPath: function CanvasGraphics_endPath() {
            this.consumePath();
          },
          clip: function CanvasGraphics_clip() {
            this.pendingClip = NORMAL_CLIP;
          },
          eoClip: function CanvasGraphics_eoClip() {
            this.pendingClip = EO_CLIP;
          },
          beginText: function CanvasGraphics_beginText() {
            this.current.textMatrix = _util.IDENTITY_MATRIX;
            this.current.textMatrixScale = 1;
            this.current.x = this.current.lineX = 0;
            this.current.y = this.current.lineY = 0;
          },
          endText: function CanvasGraphics_endText() {
            var paths = this.pendingTextPaths;
            var ctx = this.ctx;

            if (paths === undefined) {
              ctx.beginPath();
              return;
            }

            ctx.save();
            ctx.beginPath();

            for (var i = 0; i < paths.length; i++) {
              var path = paths[i];
              ctx.setTransform.apply(ctx, path.transform);
              ctx.translate(path.x, path.y);
              path.addToPath(ctx, path.fontSize);
            }

            ctx.restore();
            ctx.clip();
            ctx.beginPath();
            delete this.pendingTextPaths;
          },
          setCharSpacing: function CanvasGraphics_setCharSpacing(spacing) {
            this.current.charSpacing = spacing;
          },
          setWordSpacing: function CanvasGraphics_setWordSpacing(spacing) {
            this.current.wordSpacing = spacing;
          },
          setHScale: function CanvasGraphics_setHScale(scale) {
            this.current.textHScale = scale / 100;
          },
          setLeading: function CanvasGraphics_setLeading(leading) {
            this.current.leading = -leading;
          },
          setFont: function CanvasGraphics_setFont(fontRefName, size) {
            var fontObj = this.commonObjs.get(fontRefName);
            var current = this.current;

            if (!fontObj) {
              throw new Error(`Can't find font for ${fontRefName}`);
            }

            current.fontMatrix = fontObj.fontMatrix ? fontObj.fontMatrix : _util.FONT_IDENTITY_MATRIX;

            if (current.fontMatrix[0] === 0 || current.fontMatrix[3] === 0) {
              (0, _util.warn)("Invalid font matrix for font " + fontRefName);
            }

            if (size < 0) {
              size = -size;
              current.fontDirection = -1;
            } else {
              current.fontDirection = 1;
            }

            this.current.font = fontObj;
            this.current.fontSize = size;

            if (fontObj.isType3Font) {
              return;
            }

            var name = fontObj.loadedName || "sans-serif";
            let bold = "normal";

            if (fontObj.black) {
              bold = "900";
            } else if (fontObj.bold) {
              bold = "bold";
            }

            var italic = fontObj.italic ? "italic" : "normal";
            var typeface = `"${name}", ${fontObj.fallbackName}`;
            let browserFontSize = size;

            if (size < MIN_FONT_SIZE) {
              browserFontSize = MIN_FONT_SIZE;
            } else if (size > MAX_FONT_SIZE) {
              browserFontSize = MAX_FONT_SIZE;
            }

            this.current.fontSizeScale = size / browserFontSize;
            this.ctx.font = `${italic} ${bold} ${browserFontSize}px ${typeface}`;
          },
          setTextRenderingMode: function CanvasGraphics_setTextRenderingMode(mode) {
            this.current.textRenderingMode = mode;
          },
          setTextRise: function CanvasGraphics_setTextRise(rise) {
            this.current.textRise = rise;
          },
          moveText: function CanvasGraphics_moveText(x, y) {
            this.current.x = this.current.lineX += x;
            this.current.y = this.current.lineY += y;
          },
          setLeadingMoveText: function CanvasGraphics_setLeadingMoveText(x, y) {
            this.setLeading(-y);
            this.moveText(x, y);
          },
          setTextMatrix: function CanvasGraphics_setTextMatrix(a, b, c, d, e, f) {
            this.current.textMatrix = [a, b, c, d, e, f];
            this.current.textMatrixScale = Math.sqrt(a * a + b * b);
            this.current.x = this.current.lineX = 0;
            this.current.y = this.current.lineY = 0;
          },
          nextLine: function CanvasGraphics_nextLine() {
            this.moveText(0, this.current.leading);
          },

          paintChar(character, x, y, patternTransform) {
            var ctx = this.ctx;
            var current = this.current;
            var font = current.font;
            var textRenderingMode = current.textRenderingMode;
            var fontSize = current.fontSize / current.fontSizeScale;
            var fillStrokeMode = textRenderingMode & _util.TextRenderingMode.FILL_STROKE_MASK;
            var isAddToPathSet = !!(textRenderingMode & _util.TextRenderingMode.ADD_TO_PATH_FLAG);
            const patternFill = current.patternFill && !font.missingFile;
            var addToPath;

            if (font.disableFontFace || isAddToPathSet || patternFill) {
              addToPath = font.getPathGenerator(this.commonObjs, character);
            }

            if (font.disableFontFace || patternFill) {
              ctx.save();
              ctx.translate(x, y);
              ctx.beginPath();
              addToPath(ctx, fontSize);

              if (patternTransform) {
                ctx.setTransform.apply(ctx, patternTransform);
              }

              if (fillStrokeMode === _util.TextRenderingMode.FILL || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) {
                ctx.fill();
              }

              if (fillStrokeMode === _util.TextRenderingMode.STROKE || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) {
                ctx.stroke();
              }

              ctx.restore();
            } else {
              if (fillStrokeMode === _util.TextRenderingMode.FILL || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) {
                ctx.fillText(character, x, y);
              }

              if (fillStrokeMode === _util.TextRenderingMode.STROKE || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) {
                ctx.strokeText(character, x, y);
              }
            }

            if (isAddToPathSet) {
              var paths = this.pendingTextPaths || (this.pendingTextPaths = []);
              paths.push({
                transform: ctx.mozCurrentTransform,
                x,
                y,
                fontSize,
                addToPath
              });
            }
          },

          get isFontSubpixelAAEnabled() {
            const {
              context: ctx
            } = this.cachedCanvases.getCanvas("isFontSubpixelAAEnabled", 10, 10);
            ctx.scale(1.5, 1);
            ctx.fillText("I", 0, 10);
            var data = ctx.getImageData(0, 0, 10, 10).data;
            var enabled = false;

            for (var i = 3; i < data.length; i += 4) {
              if (data[i] > 0 && data[i] < 255) {
                enabled = true;
                break;
              }
            }

            return (0, _util.shadow)(this, "isFontSubpixelAAEnabled", enabled);
          },

          showText: function CanvasGraphics_showText(glyphs) {
            var current = this.current;
            var font = current.font;

            if (font.isType3Font) {
              return this.showType3Text(glyphs);
            }

            var fontSize = current.fontSize;

            if (fontSize === 0) {
              return undefined;
            }

            var ctx = this.ctx;
            var fontSizeScale = current.fontSizeScale;
            var charSpacing = current.charSpacing;
            var wordSpacing = current.wordSpacing;
            var fontDirection = current.fontDirection;
            var textHScale = current.textHScale * fontDirection;
            var glyphsLength = glyphs.length;
            var vertical = font.vertical;
            var spacingDir = vertical ? 1 : -1;
            var defaultVMetrics = font.defaultVMetrics;
            var widthAdvanceScale = fontSize * current.fontMatrix[0];
            var simpleFillText = current.textRenderingMode === _util.TextRenderingMode.FILL && !font.disableFontFace && !current.patternFill;
            ctx.save();
            let patternTransform;

            if (current.patternFill) {
              ctx.save();
              const pattern = current.fillColor.getPattern(ctx, this);
              patternTransform = ctx.mozCurrentTransform;
              ctx.restore();
              ctx.fillStyle = pattern;
            }

            ctx.transform.apply(ctx, current.textMatrix);
            ctx.translate(current.x, current.y + current.textRise);

            if (fontDirection > 0) {
              ctx.scale(textHScale, -1);
            } else {
              ctx.scale(textHScale, 1);
            }

            var lineWidth = current.lineWidth;
            var scale = current.textMatrixScale;

            if (scale === 0 || lineWidth === 0) {
              var fillStrokeMode = current.textRenderingMode & _util.TextRenderingMode.FILL_STROKE_MASK;

              if (fillStrokeMode === _util.TextRenderingMode.STROKE || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) {
                this._cachedGetSinglePixelWidth = null;
                lineWidth = this.getSinglePixelWidth() * MIN_WIDTH_FACTOR;
              }
            } else {
              lineWidth /= scale;
            }

            if (fontSizeScale !== 1.0) {
              ctx.scale(fontSizeScale, fontSizeScale);
              lineWidth /= fontSizeScale;
            }

            ctx.lineWidth = lineWidth;
            var x = 0,
                i;

            for (i = 0; i < glyphsLength; ++i) {
              var glyph = glyphs[i];

              if ((0, _util.isNum)(glyph)) {
                x += spacingDir * glyph * fontSize / 1000;
                continue;
              }

              var restoreNeeded = false;
              var spacing = (glyph.isSpace ? wordSpacing : 0) + charSpacing;
              var character = glyph.fontChar;
              var accent = glyph.accent;
              var scaledX, scaledY, scaledAccentX, scaledAccentY;
              var width = glyph.width;

              if (vertical) {
                var vmetric, vx, vy;
                vmetric = glyph.vmetric || defaultVMetrics;
                vx = glyph.vmetric ? vmetric[1] : width * 0.5;
                vx = -vx * widthAdvanceScale;
                vy = vmetric[2] * widthAdvanceScale;
                width = vmetric ? -vmetric[0] : width;
                scaledX = vx / fontSizeScale;
                scaledY = (x + vy) / fontSizeScale;
              } else {
                scaledX = x / fontSizeScale;
                scaledY = 0;
              }

              if (font.remeasure && width > 0) {
                var measuredWidth = ctx.measureText(character).width * 1000 / fontSize * fontSizeScale;

                if (width < measuredWidth && this.isFontSubpixelAAEnabled) {
                  var characterScaleX = width / measuredWidth;
                  restoreNeeded = true;
                  ctx.save();
                  ctx.scale(characterScaleX, 1);
                  scaledX /= characterScaleX;
                } else if (width !== measuredWidth) {
                  scaledX += (width - measuredWidth) / 2000 * fontSize / fontSizeScale;
                }
              }

              if (glyph.isInFont || font.missingFile) {
                if (simpleFillText && !accent) {
                  ctx.fillText(character, scaledX, scaledY);
                } else {
                  this.paintChar(character, scaledX, scaledY, patternTransform);

                  if (accent) {
                    scaledAccentX = scaledX + accent.offset.x / fontSizeScale;
                    scaledAccentY = scaledY - accent.offset.y / fontSizeScale;
                    this.paintChar(accent.fontChar, scaledAccentX, scaledAccentY, patternTransform);
                  }
                }
              }

              var charWidth;

              if (vertical) {
                charWidth = width * widthAdvanceScale - spacing * fontDirection;
              } else {
                charWidth = width * widthAdvanceScale + spacing * fontDirection;
              }

              x += charWidth;

              if (restoreNeeded) {
                ctx.restore();
              }
            }

            if (vertical) {
              current.y -= x;
            } else {
              current.x += x * textHScale;
            }

            ctx.restore();
          },
          showType3Text: function CanvasGraphics_showType3Text(glyphs) {
            var ctx = this.ctx;
            var current = this.current;
            var font = current.font;
            var fontSize = current.fontSize;
            var fontDirection = current.fontDirection;
            var spacingDir = font.vertical ? 1 : -1;
            var charSpacing = current.charSpacing;
            var wordSpacing = current.wordSpacing;
            var textHScale = current.textHScale * fontDirection;
            var fontMatrix = current.fontMatrix || _util.FONT_IDENTITY_MATRIX;
            var glyphsLength = glyphs.length;
            var isTextInvisible = current.textRenderingMode === _util.TextRenderingMode.INVISIBLE;
            var i, glyph, width, spacingLength;

            if (isTextInvisible || fontSize === 0) {
              return;
            }

            this._cachedGetSinglePixelWidth = null;
            ctx.save();
            ctx.transform.apply(ctx, current.textMatrix);
            ctx.translate(current.x, current.y);
            ctx.scale(textHScale, fontDirection);

            for (i = 0; i < glyphsLength; ++i) {
              glyph = glyphs[i];

              if ((0, _util.isNum)(glyph)) {
                spacingLength = spacingDir * glyph * fontSize / 1000;
                this.ctx.translate(spacingLength, 0);
                current.x += spacingLength * textHScale;
                continue;
              }

              var spacing = (glyph.isSpace ? wordSpacing : 0) + charSpacing;
              var operatorList = font.charProcOperatorList[glyph.operatorListId];

              if (!operatorList) {
                (0, _util.warn)(`Type3 character "${glyph.operatorListId}" is not available.`);
                continue;
              }

              this.processingType3 = glyph;
              this.save();
              ctx.scale(fontSize, fontSize);
              ctx.transform.apply(ctx, fontMatrix);
              this.executeOperatorList(operatorList);
              this.restore();

              var transformed = _util.Util.applyTransform([glyph.width, 0], fontMatrix);

              width = transformed[0] * fontSize + spacing;
              ctx.translate(width, 0);
              current.x += width * textHScale;
            }

            ctx.restore();
            this.processingType3 = null;
          },
          setCharWidth: function CanvasGraphics_setCharWidth(xWidth, yWidth) {},
          setCharWidthAndBounds: function CanvasGraphics_setCharWidthAndBounds(xWidth, yWidth, llx, lly, urx, ury) {
            this.ctx.rect(llx, lly, urx - llx, ury - lly);
            this.clip();
            this.endPath();
          },
          getColorN_Pattern: function CanvasGraphics_getColorN_Pattern(IR) {
            var pattern;

            if (IR[0] === "TilingPattern") {
              var color = IR[1];
              var baseTransform = this.baseTransform || this.ctx.mozCurrentTransform.slice();
              var canvasGraphicsFactory = {
                createCanvasGraphics: ctx => {
                  return new CanvasGraphics(ctx, this.commonObjs, this.objs, this.canvasFactory, this.webGLContext);
                }
              };
              pattern = new _pattern_helper.TilingPattern(IR, color, this.ctx, canvasGraphicsFactory, baseTransform);
            } else {
              pattern = (0, _pattern_helper.getShadingPatternFromIR)(IR);
            }

            return pattern;
          },
          setStrokeColorN: function CanvasGraphics_setStrokeColorN() {
            this.current.strokeColor = this.getColorN_Pattern(arguments);
          },
          setFillColorN: function CanvasGraphics_setFillColorN() {
            this.current.fillColor = this.getColorN_Pattern(arguments);
            this.current.patternFill = true;
          },
          setStrokeRGBColor: function CanvasGraphics_setStrokeRGBColor(r, g, b) {
            var color = _util.Util.makeCssRgb(r, g, b);

            this.ctx.strokeStyle = color;
            this.current.strokeColor = color;
          },
          setFillRGBColor: function CanvasGraphics_setFillRGBColor(r, g, b) {
            var color = _util.Util.makeCssRgb(r, g, b);

            this.ctx.fillStyle = color;
            this.current.fillColor = color;
            this.current.patternFill = false;
          },
          shadingFill: function CanvasGraphics_shadingFill(patternIR) {
            var ctx = this.ctx;
            this.save();
            var pattern = (0, _pattern_helper.getShadingPatternFromIR)(patternIR);
            ctx.fillStyle = pattern.getPattern(ctx, this, true);
            var inv = ctx.mozCurrentTransformInverse;

            if (inv) {
              var canvas = ctx.canvas;
              var width = canvas.width;
              var height = canvas.height;

              var bl = _util.Util.applyTransform([0, 0], inv);

              var br = _util.Util.applyTransform([0, height], inv);

              var ul = _util.Util.applyTransform([width, 0], inv);

              var ur = _util.Util.applyTransform([width, height], inv);

              var x0 = Math.min(bl[0], br[0], ul[0], ur[0]);
              var y0 = Math.min(bl[1], br[1], ul[1], ur[1]);
              var x1 = Math.max(bl[0], br[0], ul[0], ur[0]);
              var y1 = Math.max(bl[1], br[1], ul[1], ur[1]);
              this.ctx.fillRect(x0, y0, x1 - x0, y1 - y0);
            } else {
              this.ctx.fillRect(-1e10, -1e10, 2e10, 2e10);
            }

            this.restore();
          },
          beginInlineImage: function CanvasGraphics_beginInlineImage() {
            (0, _util.unreachable)("Should not call beginInlineImage");
          },
          beginImageData: function CanvasGraphics_beginImageData() {
            (0, _util.unreachable)("Should not call beginImageData");
          },
          paintFormXObjectBegin: function CanvasGraphics_paintFormXObjectBegin(matrix, bbox) {
            this.save();
            this.baseTransformStack.push(this.baseTransform);

            if (Array.isArray(matrix) && matrix.length === 6) {
              this.transform.apply(this, matrix);
            }

            this.baseTransform = this.ctx.mozCurrentTransform;

            if (bbox) {
              var width = bbox[2] - bbox[0];
              var height = bbox[3] - bbox[1];
              this.ctx.rect(bbox[0], bbox[1], width, height);
              this.clip();
              this.endPath();
            }
          },
          paintFormXObjectEnd: function CanvasGraphics_paintFormXObjectEnd() {
            this.restore();
            this.baseTransform = this.baseTransformStack.pop();
          },
          beginGroup: function CanvasGraphics_beginGroup(group) {
            this.save();
            var currentCtx = this.ctx;

            if (!group.isolated) {
              (0, _util.info)("TODO: Support non-isolated groups.");
            }

            if (group.knockout) {
              (0, _util.warn)("Knockout groups not supported.");
            }

            var currentTransform = currentCtx.mozCurrentTransform;

            if (group.matrix) {
              currentCtx.transform.apply(currentCtx, group.matrix);
            }

            if (!group.bbox) {
              throw new Error("Bounding box is required.");
            }

            var bounds = _util.Util.getAxialAlignedBoundingBox(group.bbox, currentCtx.mozCurrentTransform);

            var canvasBounds = [0, 0, currentCtx.canvas.width, currentCtx.canvas.height];
            bounds = _util.Util.intersect(bounds, canvasBounds) || [0, 0, 0, 0];
            var offsetX = Math.floor(bounds[0]);
            var offsetY = Math.floor(bounds[1]);
            var drawnWidth = Math.max(Math.ceil(bounds[2]) - offsetX, 1);
            var drawnHeight = Math.max(Math.ceil(bounds[3]) - offsetY, 1);
            var scaleX = 1,
                scaleY = 1;

            if (drawnWidth > MAX_GROUP_SIZE) {
              scaleX = drawnWidth / MAX_GROUP_SIZE;
              drawnWidth = MAX_GROUP_SIZE;
            }

            if (drawnHeight > MAX_GROUP_SIZE) {
              scaleY = drawnHeight / MAX_GROUP_SIZE;
              drawnHeight = MAX_GROUP_SIZE;
            }

            var cacheId = "groupAt" + this.groupLevel;

            if (group.smask) {
              cacheId += "_smask_" + this.smaskCounter++ % 2;
            }

            var scratchCanvas = this.cachedCanvases.getCanvas(cacheId, drawnWidth, drawnHeight, true);
            var groupCtx = scratchCanvas.context;
            groupCtx.scale(1 / scaleX, 1 / scaleY);
            groupCtx.translate(-offsetX, -offsetY);
            groupCtx.transform.apply(groupCtx, currentTransform);

            if (group.smask) {
              this.smaskStack.push({
                canvas: scratchCanvas.canvas,
                context: groupCtx,
                offsetX,
                offsetY,
                scaleX,
                scaleY,
                subtype: group.smask.subtype,
                backdrop: group.smask.backdrop,
                transferMap: group.smask.transferMap || null,
                startTransformInverse: null
              });
            } else {
              currentCtx.setTransform(1, 0, 0, 1, 0, 0);
              currentCtx.translate(offsetX, offsetY);
              currentCtx.scale(scaleX, scaleY);
            }

            copyCtxState(currentCtx, groupCtx);
            this.ctx = groupCtx;
            this.setGState([["BM", "source-over"], ["ca", 1], ["CA", 1]]);
            this.groupStack.push(currentCtx);
            this.groupLevel++;
            this.current.activeSMask = null;
          },
          endGroup: function CanvasGraphics_endGroup(group) {
            this.groupLevel--;
            var groupCtx = this.ctx;
            this.ctx = this.groupStack.pop();

            if (this.ctx.imageSmoothingEnabled !== undefined) {
              this.ctx.imageSmoothingEnabled = false;
            } else {
              this.ctx.mozImageSmoothingEnabled = false;
            }

            if (group.smask) {
              this.tempSMask = this.smaskStack.pop();
            } else {
              this.ctx.drawImage(groupCtx.canvas, 0, 0);
            }

            this.restore();
          },
          beginAnnotations: function CanvasGraphics_beginAnnotations() {
            this.save();

            if (this.baseTransform) {
              this.ctx.setTransform.apply(this.ctx, this.baseTransform);
            }
          },
          endAnnotations: function CanvasGraphics_endAnnotations() {
            this.restore();
          },
          beginAnnotation: function CanvasGraphics_beginAnnotation(rect, transform, matrix) {
            this.save();
            resetCtxToDefault(this.ctx);
            this.current = new CanvasExtraState();

            if (Array.isArray(rect) && rect.length === 4) {
              var width = rect[2] - rect[0];
              var height = rect[3] - rect[1];
              this.ctx.rect(rect[0], rect[1], width, height);
              this.clip();
              this.endPath();
            }

            this.transform.apply(this, transform);
            this.transform.apply(this, matrix);
          },
          endAnnotation: function CanvasGraphics_endAnnotation() {
            this.restore();
          },
          paintImageMaskXObject: function CanvasGraphics_paintImageMaskXObject(img) {
            var ctx = this.ctx;
            var width = img.width,
                height = img.height;
            var fillColor = this.current.fillColor;
            var isPatternFill = this.current.patternFill;
            var glyph = this.processingType3;

            if (COMPILE_TYPE3_GLYPHS && glyph && glyph.compiled === undefined) {
              if (width <= MAX_SIZE_TO_COMPILE && height <= MAX_SIZE_TO_COMPILE) {
                glyph.compiled = compileType3Glyph({
                  data: img.data,
                  width,
                  height
                });
              } else {
                glyph.compiled = null;
              }
            }

            if (glyph && glyph.compiled) {
              glyph.compiled(ctx);
              return;
            }

            var maskCanvas = this.cachedCanvases.getCanvas("maskCanvas", width, height);
            var maskCtx = maskCanvas.context;
            maskCtx.save();
            putBinaryImageMask(maskCtx, img);
            maskCtx.globalCompositeOperation = "source-in";
            maskCtx.fillStyle = isPatternFill ? fillColor.getPattern(maskCtx, this) : fillColor;
            maskCtx.fillRect(0, 0, width, height);
            maskCtx.restore();
            this.paintInlineImageXObject(maskCanvas.canvas);
          },
          paintImageMaskXObjectRepeat: function CanvasGraphics_paintImageMaskXObjectRepeat(imgData, scaleX, scaleY, positions) {
            var width = imgData.width;
            var height = imgData.height;
            var fillColor = this.current.fillColor;
            var isPatternFill = this.current.patternFill;
            var maskCanvas = this.cachedCanvases.getCanvas("maskCanvas", width, height);
            var maskCtx = maskCanvas.context;
            maskCtx.save();
            putBinaryImageMask(maskCtx, imgData);
            maskCtx.globalCompositeOperation = "source-in";
            maskCtx.fillStyle = isPatternFill ? fillColor.getPattern(maskCtx, this) : fillColor;
            maskCtx.fillRect(0, 0, width, height);
            maskCtx.restore();
            var ctx = this.ctx;

            for (var i = 0, ii = positions.length; i < ii; i += 2) {
              ctx.save();
              ctx.transform(scaleX, 0, 0, scaleY, positions[i], positions[i + 1]);
              ctx.scale(1, -1);
              ctx.drawImage(maskCanvas.canvas, 0, 0, width, height, 0, -1, 1, 1);
              ctx.restore();
            }
          },
          paintImageMaskXObjectGroup: function CanvasGraphics_paintImageMaskXObjectGroup(images) {
            var ctx = this.ctx;
            var fillColor = this.current.fillColor;
            var isPatternFill = this.current.patternFill;

            for (var i = 0, ii = images.length; i < ii; i++) {
              var image = images[i];
              var width = image.width,
                  height = image.height;
              var maskCanvas = this.cachedCanvases.getCanvas("maskCanvas", width, height);
              var maskCtx = maskCanvas.context;
              maskCtx.save();
              putBinaryImageMask(maskCtx, image);
              maskCtx.globalCompositeOperation = "source-in";
              maskCtx.fillStyle = isPatternFill ? fillColor.getPattern(maskCtx, this) : fillColor;
              maskCtx.fillRect(0, 0, width, height);
              maskCtx.restore();
              ctx.save();
              ctx.transform.apply(ctx, image.transform);
              ctx.scale(1, -1);
              ctx.drawImage(maskCanvas.canvas, 0, 0, width, height, 0, -1, 1, 1);
              ctx.restore();
            }
          },
          paintImageXObject: function CanvasGraphics_paintImageXObject(objId) {
            const imgData = objId.startsWith("g_") ? this.commonObjs.get(objId) : this.objs.get(objId);

            if (!imgData) {
              (0, _util.warn)("Dependent image isn't ready yet");
              return;
            }

            this.paintInlineImageXObject(imgData);
          },
          paintImageXObjectRepeat: function CanvasGraphics_paintImageXObjectRepeat(objId, scaleX, scaleY, positions) {
            const imgData = objId.startsWith("g_") ? this.commonObjs.get(objId) : this.objs.get(objId);

            if (!imgData) {
              (0, _util.warn)("Dependent image isn't ready yet");
              return;
            }

            var width = imgData.width;
            var height = imgData.height;
            var map = [];

            for (var i = 0, ii = positions.length; i < ii; i += 2) {
              map.push({
                transform: [scaleX, 0, 0, scaleY, positions[i], positions[i + 1]],
                x: 0,
                y: 0,
                w: width,
                h: height
              });
            }

            this.paintInlineImageXObjectGroup(imgData, map);
          },
          paintInlineImageXObject: function CanvasGraphics_paintInlineImageXObject(imgData) {
            var width = imgData.width;
            var height = imgData.height;
            var ctx = this.ctx;
            this.save();
            ctx.scale(1 / width, -1 / height);
            var currentTransform = ctx.mozCurrentTransformInverse;
            var a = currentTransform[0],
                b = currentTransform[1];
            var widthScale = Math.max(Math.sqrt(a * a + b * b), 1);
            var c = currentTransform[2],
                d = currentTransform[3];
            var heightScale = Math.max(Math.sqrt(c * c + d * d), 1);
            var imgToPaint, tmpCanvas;

            if (typeof HTMLElement === "function" && imgData instanceof HTMLElement || !imgData.data) {
              imgToPaint = imgData;
            } else {
              tmpCanvas = this.cachedCanvases.getCanvas("inlineImage", width, height);
              var tmpCtx = tmpCanvas.context;
              putBinaryImageData(tmpCtx, imgData);
              imgToPaint = tmpCanvas.canvas;
            }

            var paintWidth = width,
                paintHeight = height;
            var tmpCanvasId = "prescale1";

            while (widthScale > 2 && paintWidth > 1 || heightScale > 2 && paintHeight > 1) {
              var newWidth = paintWidth,
                  newHeight = paintHeight;

              if (widthScale > 2 && paintWidth > 1) {
                newWidth = Math.ceil(paintWidth / 2);
                widthScale /= paintWidth / newWidth;
              }

              if (heightScale > 2 && paintHeight > 1) {
                newHeight = Math.ceil(paintHeight / 2);
                heightScale /= paintHeight / newHeight;
              }

              tmpCanvas = this.cachedCanvases.getCanvas(tmpCanvasId, newWidth, newHeight);
              tmpCtx = tmpCanvas.context;
              tmpCtx.clearRect(0, 0, newWidth, newHeight);
              tmpCtx.drawImage(imgToPaint, 0, 0, paintWidth, paintHeight, 0, 0, newWidth, newHeight);
              imgToPaint = tmpCanvas.canvas;
              paintWidth = newWidth;
              paintHeight = newHeight;
              tmpCanvasId = tmpCanvasId === "prescale1" ? "prescale2" : "prescale1";
            }

            ctx.drawImage(imgToPaint, 0, 0, paintWidth, paintHeight, 0, -height, width, height);

            if (this.imageLayer) {
              var position = this.getCanvasPosition(0, -height);
              this.imageLayer.appendImage({
                imgData,
                left: position[0],
                top: position[1],
                width: width / currentTransform[0],
                height: height / currentTransform[3]
              });
            }

            this.restore();
          },
          paintInlineImageXObjectGroup: function CanvasGraphics_paintInlineImageXObjectGroup(imgData, map) {
            var ctx = this.ctx;
            var w = imgData.width;
            var h = imgData.height;
            var tmpCanvas = this.cachedCanvases.getCanvas("inlineImage", w, h);
            var tmpCtx = tmpCanvas.context;
            putBinaryImageData(tmpCtx, imgData);

            for (var i = 0, ii = map.length; i < ii; i++) {
              var entry = map[i];
              ctx.save();
              ctx.transform.apply(ctx, entry.transform);
              ctx.scale(1, -1);
              ctx.drawImage(tmpCanvas.canvas, entry.x, entry.y, entry.w, entry.h, 0, -1, 1, 1);

              if (this.imageLayer) {
                var position = this.getCanvasPosition(entry.x, entry.y);
                this.imageLayer.appendImage({
                  imgData,
                  left: position[0],
                  top: position[1],
                  width: w,
                  height: h
                });
              }

              ctx.restore();
            }
          },
          paintSolidColorImageMask: function CanvasGraphics_paintSolidColorImageMask() {
            this.ctx.fillRect(0, 0, 1, 1);
          },
          paintXObject: function CanvasGraphics_paintXObject() {
            (0, _util.warn)("Unsupported 'paintXObject' command.");
          },
          markPoint: function CanvasGraphics_markPoint(tag) {},
          markPointProps: function CanvasGraphics_markPointProps(tag, properties) {},
          beginMarkedContent: function CanvasGraphics_beginMarkedContent(tag) {},
          beginMarkedContentProps: function CanvasGraphics_beginMarkedContentProps(tag, properties) {},
          endMarkedContent: function CanvasGraphics_endMarkedContent() {},
          beginCompat: function CanvasGraphics_beginCompat() {},
          endCompat: function CanvasGraphics_endCompat() {},
          consumePath: function CanvasGraphics_consumePath() {
            var ctx = this.ctx;

            if (this.pendingClip) {
              if (this.pendingClip === EO_CLIP) {
                ctx.clip("evenodd");
              } else {
                ctx.clip();
              }

              this.pendingClip = null;
            }

            ctx.beginPath();
          },

          getSinglePixelWidth(scale) {
            if (this._cachedGetSinglePixelWidth === null) {
              const inverse = this.ctx.mozCurrentTransformInverse;
              this._cachedGetSinglePixelWidth = Math.sqrt(Math.max(inverse[0] * inverse[0] + inverse[1] * inverse[1], inverse[2] * inverse[2] + inverse[3] * inverse[3]));
            }

            return this._cachedGetSinglePixelWidth;
          },

          getCanvasPosition: function CanvasGraphics_getCanvasPosition(x, y) {
            var transform = this.ctx.mozCurrentTransform;
            return [transform[0] * x + transform[2] * y + transform[4], transform[1] * x + transform[3] * y + transform[5]];
          }
        };

        for (var op in _util.OPS) {
          CanvasGraphics.prototype[_util.OPS[op]] = CanvasGraphics.prototype[op];
        }

        return CanvasGraphics;
      }();

      exports.CanvasGraphics = CanvasGraphics;
      /***/
    },
    /* 9 */

    /***/
    function (module, exports, __w_pdfjs_require__) {
      "use strict";

      Object.defineProperty(exports, "__esModule", {
        value: true
      });
      exports.getShadingPatternFromIR = getShadingPatternFromIR;
      exports.TilingPattern = void 0;

      var _util = __w_pdfjs_require__(2);

      var ShadingIRs = {};

      function applyBoundingBox(ctx, bbox) {
        if (!bbox || typeof Path2D === "undefined") {
          return;
        }

        const width = bbox[2] - bbox[0];
        const height = bbox[3] - bbox[1];
        const region = new Path2D();
        region.rect(bbox[0], bbox[1], width, height);
        ctx.clip(region);
      }

      ShadingIRs.RadialAxial = {
        fromIR: function RadialAxial_fromIR(raw) {
          var type = raw[1];
          var bbox = raw[2];
          var colorStops = raw[3];
          var p0 = raw[4];
          var p1 = raw[5];
          var r0 = raw[6];
          var r1 = raw[7];
          return {
            type: "Pattern",
            getPattern: function RadialAxial_getPattern(ctx) {
              applyBoundingBox(ctx, bbox);
              var grad;

              if (type === "axial") {
                grad = ctx.createLinearGradient(p0[0], p0[1], p1[0], p1[1]);
              } else if (type === "radial") {
                grad = ctx.createRadialGradient(p0[0], p0[1], r0, p1[0], p1[1], r1);
              }

              for (var i = 0, ii = colorStops.length; i < ii; ++i) {
                var c = colorStops[i];
                grad.addColorStop(c[0], c[1]);
              }

              return grad;
            }
          };
        }
      };

      var createMeshCanvas = function createMeshCanvasClosure() {
        function drawTriangle(data, context, p1, p2, p3, c1, c2, c3) {
          var coords = context.coords,
              colors = context.colors;
          var bytes = data.data,
              rowSize = data.width * 4;
          var tmp;

          if (coords[p1 + 1] > coords[p2 + 1]) {
            tmp = p1;
            p1 = p2;
            p2 = tmp;
            tmp = c1;
            c1 = c2;
            c2 = tmp;
          }

          if (coords[p2 + 1] > coords[p3 + 1]) {
            tmp = p2;
            p2 = p3;
            p3 = tmp;
            tmp = c2;
            c2 = c3;
            c3 = tmp;
          }

          if (coords[p1 + 1] > coords[p2 + 1]) {
            tmp = p1;
            p1 = p2;
            p2 = tmp;
            tmp = c1;
            c1 = c2;
            c2 = tmp;
          }

          var x1 = (coords[p1] + context.offsetX) * context.scaleX;
          var y1 = (coords[p1 + 1] + context.offsetY) * context.scaleY;
          var x2 = (coords[p2] + context.offsetX) * context.scaleX;
          var y2 = (coords[p2 + 1] + context.offsetY) * context.scaleY;
          var x3 = (coords[p3] + context.offsetX) * context.scaleX;
          var y3 = (coords[p3 + 1] + context.offsetY) * context.scaleY;

          if (y1 >= y3) {
            return;
          }

          var c1r = colors[c1],
              c1g = colors[c1 + 1],
              c1b = colors[c1 + 2];
          var c2r = colors[c2],
              c2g = colors[c2 + 1],
              c2b = colors[c2 + 2];
          var c3r = colors[c3],
              c3g = colors[c3 + 1],
              c3b = colors[c3 + 2];
          var minY = Math.round(y1),
              maxY = Math.round(y3);
          var xa, car, cag, cab;
          var xb, cbr, cbg, cbb;

          for (var y = minY; y <= maxY; y++) {
            if (y < y2) {
              let k;

              if (y < y1) {
                k = 0;
              } else if (y1 === y2) {
                k = 1;
              } else {
                k = (y1 - y) / (y1 - y2);
              }

              xa = x1 - (x1 - x2) * k;
              car = c1r - (c1r - c2r) * k;
              cag = c1g - (c1g - c2g) * k;
              cab = c1b - (c1b - c2b) * k;
            } else {
              let k;

              if (y > y3) {
                k = 1;
              } else if (y2 === y3) {
                k = 0;
              } else {
                k = (y2 - y) / (y2 - y3);
              }

              xa = x2 - (x2 - x3) * k;
              car = c2r - (c2r - c3r) * k;
              cag = c2g - (c2g - c3g) * k;
              cab = c2b - (c2b - c3b) * k;
            }

            let k;

            if (y < y1) {
              k = 0;
            } else if (y > y3) {
              k = 1;
            } else {
              k = (y1 - y) / (y1 - y3);
            }

            xb = x1 - (x1 - x3) * k;
            cbr = c1r - (c1r - c3r) * k;
            cbg = c1g - (c1g - c3g) * k;
            cbb = c1b - (c1b - c3b) * k;
            var x1_ = Math.round(Math.min(xa, xb));
            var x2_ = Math.round(Math.max(xa, xb));
            var j = rowSize * y + x1_ * 4;

            for (var x = x1_; x <= x2_; x++) {
              k = (xa - x) / (xa - xb);

              if (k < 0) {
                k = 0;
              } else if (k > 1) {
                k = 1;
              }

              bytes[j++] = car - (car - cbr) * k | 0;
              bytes[j++] = cag - (cag - cbg) * k | 0;
              bytes[j++] = cab - (cab - cbb) * k | 0;
              bytes[j++] = 255;
            }
          }
        }

        function drawFigure(data, figure, context) {
          var ps = figure.coords;
          var cs = figure.colors;
          var i, ii;

          switch (figure.type) {
            case "lattice":
              var verticesPerRow = figure.verticesPerRow;
              var rows = Math.floor(ps.length / verticesPerRow) - 1;
              var cols = verticesPerRow - 1;

              for (i = 0; i < rows; i++) {
                var q = i * verticesPerRow;

                for (var j = 0; j < cols; j++, q++) {
                  drawTriangle(data, context, ps[q], ps[q + 1], ps[q + verticesPerRow], cs[q], cs[q + 1], cs[q + verticesPerRow]);
                  drawTriangle(data, context, ps[q + verticesPerRow + 1], ps[q + 1], ps[q + verticesPerRow], cs[q + verticesPerRow + 1], cs[q + 1], cs[q + verticesPerRow]);
                }
              }

              break;

            case "triangles":
              for (i = 0, ii = ps.length; i < ii; i += 3) {
                drawTriangle(data, context, ps[i], ps[i + 1], ps[i + 2], cs[i], cs[i + 1], cs[i + 2]);
              }

              break;

            default:
              throw new Error("illegal figure");
          }
        }

        function createMeshCanvas(bounds, combinesScale, coords, colors, figures, backgroundColor, cachedCanvases, webGLContext) {
          var EXPECTED_SCALE = 1.1;
          var MAX_PATTERN_SIZE = 3000;
          var BORDER_SIZE = 2;
          var offsetX = Math.floor(bounds[0]);
          var offsetY = Math.floor(bounds[1]);
          var boundsWidth = Math.ceil(bounds[2]) - offsetX;
          var boundsHeight = Math.ceil(bounds[3]) - offsetY;
          var width = Math.min(Math.ceil(Math.abs(boundsWidth * combinesScale[0] * EXPECTED_SCALE)), MAX_PATTERN_SIZE);
          var height = Math.min(Math.ceil(Math.abs(boundsHeight * combinesScale[1] * EXPECTED_SCALE)), MAX_PATTERN_SIZE);
          var scaleX = boundsWidth / width;
          var scaleY = boundsHeight / height;
          var context = {
            coords,
            colors,
            offsetX: -offsetX,
            offsetY: -offsetY,
            scaleX: 1 / scaleX,
            scaleY: 1 / scaleY
          };
          var paddedWidth = width + BORDER_SIZE * 2;
          var paddedHeight = height + BORDER_SIZE * 2;
          var canvas, tmpCanvas, i, ii;

          if (webGLContext.isEnabled) {
            canvas = webGLContext.drawFigures({
              width,
              height,
              backgroundColor,
              figures,
              context
            });
            tmpCanvas = cachedCanvases.getCanvas("mesh", paddedWidth, paddedHeight, false);
            tmpCanvas.context.drawImage(canvas, BORDER_SIZE, BORDER_SIZE);
            canvas = tmpCanvas.canvas;
          } else {
            tmpCanvas = cachedCanvases.getCanvas("mesh", paddedWidth, paddedHeight, false);
            var tmpCtx = tmpCanvas.context;
            var data = tmpCtx.createImageData(width, height);

            if (backgroundColor) {
              var bytes = data.data;

              for (i = 0, ii = bytes.length; i < ii; i += 4) {
                bytes[i] = backgroundColor[0];
                bytes[i + 1] = backgroundColor[1];
                bytes[i + 2] = backgroundColor[2];
                bytes[i + 3] = 255;
              }
            }

            for (i = 0; i < figures.length; i++) {
              drawFigure(data, figures[i], context);
            }

            tmpCtx.putImageData(data, BORDER_SIZE, BORDER_SIZE);
            canvas = tmpCanvas.canvas;
          }

          return {
            canvas,
            offsetX: offsetX - BORDER_SIZE * scaleX,
            offsetY: offsetY - BORDER_SIZE * scaleY,
            scaleX,
            scaleY
          };
        }

        return createMeshCanvas;
      }();

      ShadingIRs.Mesh = {
        fromIR: function Mesh_fromIR(raw) {
          var coords = raw[2];
          var colors = raw[3];
          var figures = raw[4];
          var bounds = raw[5];
          var matrix = raw[6];
          var bbox = raw[7];
          var background = raw[8];
          return {
            type: "Pattern",
            getPattern: function Mesh_getPattern(ctx, owner, shadingFill) {
              applyBoundingBox(ctx, bbox);
              var scale;

              if (shadingFill) {
                scale = _util.Util.singularValueDecompose2dScale(ctx.mozCurrentTransform);
              } else {
                scale = _util.Util.singularValueDecompose2dScale(owner.baseTransform);

                if (matrix) {
                  var matrixScale = _util.Util.singularValueDecompose2dScale(matrix);

                  scale = [scale[0] * matrixScale[0], scale[1] * matrixScale[1]];
                }
              }

              var temporaryPatternCanvas = createMeshCanvas(bounds, scale, coords, colors, figures, shadingFill ? null : background, owner.cachedCanvases, owner.webGLContext);

              if (!shadingFill) {
                ctx.setTransform.apply(ctx, owner.baseTransform);

                if (matrix) {
                  ctx.transform.apply(ctx, matrix);
                }
              }

              ctx.translate(temporaryPatternCanvas.offsetX, temporaryPatternCanvas.offsetY);
              ctx.scale(temporaryPatternCanvas.scaleX, temporaryPatternCanvas.scaleY);
              return ctx.createPattern(temporaryPatternCanvas.canvas, "no-repeat");
            }
          };
        }
      };
      ShadingIRs.Dummy = {
        fromIR: function Dummy_fromIR() {
          return {
            type: "Pattern",
            getPattern: function Dummy_fromIR_getPattern() {
              return "hotpink";
            }
          };
        }
      };

      function getShadingPatternFromIR(raw) {
        var shadingIR = ShadingIRs[raw[0]];

        if (!shadingIR) {
          throw new Error(`Unknown IR type: ${raw[0]}`);
        }

        return shadingIR.fromIR(raw);
      }

      var TilingPattern = function TilingPatternClosure() {
        var PaintType = {
          COLORED: 1,
          UNCOLORED: 2
        };
        var MAX_PATTERN_SIZE = 3000;

        function TilingPattern(IR, color, ctx, canvasGraphicsFactory, baseTransform) {
          this.operatorList = IR[2];
          this.matrix = IR[3] || [1, 0, 0, 1, 0, 0];
          this.bbox = IR[4];
          this.xstep = IR[5];
          this.ystep = IR[6];
          this.paintType = IR[7];
          this.tilingType = IR[8];
          this.color = color;
          this.canvasGraphicsFactory = canvasGraphicsFactory;
          this.baseTransform = baseTransform;
          this.type = "Pattern";
          this.ctx = ctx;
        }

        TilingPattern.prototype = {
          createPatternCanvas: function TilinPattern_createPatternCanvas(owner) {
            var operatorList = this.operatorList;
            var bbox = this.bbox;
            var xstep = this.xstep;
            var ystep = this.ystep;
            var paintType = this.paintType;
            var tilingType = this.tilingType;
            var color = this.color;
            var canvasGraphicsFactory = this.canvasGraphicsFactory;
            (0, _util.info)("TilingType: " + tilingType);
            var x0 = bbox[0],
                y0 = bbox[1],
                x1 = bbox[2],
                y1 = bbox[3];

            var matrixScale = _util.Util.singularValueDecompose2dScale(this.matrix);

            var curMatrixScale = _util.Util.singularValueDecompose2dScale(this.baseTransform);

            var combinedScale = [matrixScale[0] * curMatrixScale[0], matrixScale[1] * curMatrixScale[1]];
            var dimx = this.getSizeAndScale(xstep, this.ctx.canvas.width, combinedScale[0]);
            var dimy = this.getSizeAndScale(ystep, this.ctx.canvas.height, combinedScale[1]);
            var tmpCanvas = owner.cachedCanvases.getCanvas("pattern", dimx.size, dimy.size, true);
            var tmpCtx = tmpCanvas.context;
            var graphics = canvasGraphicsFactory.createCanvasGraphics(tmpCtx);
            graphics.groupLevel = owner.groupLevel;
            this.setFillAndStrokeStyleToContext(graphics, paintType, color);
            graphics.transform(dimx.scale, 0, 0, dimy.scale, 0, 0);
            graphics.transform(1, 0, 0, 1, -x0, -y0);
            this.clipBbox(graphics, bbox, x0, y0, x1, y1);
            graphics.executeOperatorList(operatorList);
            this.ctx.transform(1, 0, 0, 1, x0, y0);
            this.ctx.scale(1 / dimx.scale, 1 / dimy.scale);
            return tmpCanvas.canvas;
          },
          getSizeAndScale: function TilingPattern_getSizeAndScale(step, realOutputSize, scale) {
            step = Math.abs(step);
            var maxSize = Math.max(MAX_PATTERN_SIZE, realOutputSize);
            var size = Math.ceil(step * scale);

            if (size >= maxSize) {
              size = maxSize;
            } else {
              scale = size / step;
            }

            return {
              scale,
              size
            };
          },
          clipBbox: function clipBbox(graphics, bbox, x0, y0, x1, y1) {
            if (Array.isArray(bbox) && bbox.length === 4) {
              var bboxWidth = x1 - x0;
              var bboxHeight = y1 - y0;
              graphics.ctx.rect(x0, y0, bboxWidth, bboxHeight);
              graphics.clip();
              graphics.endPath();
            }
          },
          setFillAndStrokeStyleToContext: function setFillAndStrokeStyleToContext(graphics, paintType, color) {
            const context = graphics.ctx,
                  current = graphics.current;

            switch (paintType) {
              case PaintType.COLORED:
                var ctx = this.ctx;
                context.fillStyle = ctx.fillStyle;
                context.strokeStyle = ctx.strokeStyle;
                current.fillColor = ctx.fillStyle;
                current.strokeColor = ctx.strokeStyle;
                break;

              case PaintType.UNCOLORED:
                var cssColor = _util.Util.makeCssRgb(color[0], color[1], color[2]);

                context.fillStyle = cssColor;
                context.strokeStyle = cssColor;
                current.fillColor = cssColor;
                current.strokeColor = cssColor;
                break;

              default:
                throw new _util.FormatError(`Unsupported paint type: ${paintType}`);
            }
          },
          getPattern: function TilingPattern_getPattern(ctx, owner) {
            ctx = this.ctx;
            ctx.setTransform.apply(ctx, this.baseTransform);
            ctx.transform.apply(ctx, this.matrix);
            var temporaryPatternCanvas = this.createPatternCanvas(owner);
            return ctx.createPattern(temporaryPatternCanvas, "repeat");
          }
        };
        return TilingPattern;
      }();

      exports.TilingPattern = TilingPattern;
      /***/
    },
    /* 10 */

    /***/
    function (module, exports, __w_pdfjs_require__) {
      "use strict";

      Object.defineProperty(exports, "__esModule", {
        value: true
      });
      exports.GlobalWorkerOptions = void 0;
      const GlobalWorkerOptions = Object.create(null);
      exports.GlobalWorkerOptions = GlobalWorkerOptions;
      GlobalWorkerOptions.workerPort = GlobalWorkerOptions.workerPort === undefined ? null : GlobalWorkerOptions.workerPort;
      GlobalWorkerOptions.workerSrc = GlobalWorkerOptions.workerSrc === undefined ? "" : GlobalWorkerOptions.workerSrc;
      /***/
    },
    /* 11 */

    /***/
    function (module, exports, __w_pdfjs_require__) {
      "use strict";

      Object.defineProperty(exports, "__esModule", {
        value: true
      });
      exports.MessageHandler = void 0;

      var _util = __w_pdfjs_require__(2);

      const CallbackKind = {
        UNKNOWN: 0,
        DATA: 1,
        ERROR: 2
      };
      const StreamKind = {
        UNKNOWN: 0,
        CANCEL: 1,
        CANCEL_COMPLETE: 2,
        CLOSE: 3,
        ENQUEUE: 4,
        ERROR: 5,
        PULL: 6,
        PULL_COMPLETE: 7,
        START_COMPLETE: 8
      };

      function wrapReason(reason) {
        if (typeof reason !== "object" || reason === null) {
          return reason;
        }

        switch (reason.name) {
          case "AbortException":
            return new _util.AbortException(reason.message);

          case "MissingPDFException":
            return new _util.MissingPDFException(reason.message);

          case "UnexpectedResponseException":
            return new _util.UnexpectedResponseException(reason.message, reason.status);

          case "UnknownErrorException":
            return new _util.UnknownErrorException(reason.message, reason.details);

          default:
            return new _util.UnknownErrorException(reason.message, reason.toString());
        }
      }

      class MessageHandler {
        constructor(sourceName, targetName, comObj) {
          this.sourceName = sourceName;
          this.targetName = targetName;
          this.comObj = comObj;
          this.callbackId = 1;
          this.streamId = 1;
          this.postMessageTransfers = true;
          this.streamSinks = Object.create(null);
          this.streamControllers = Object.create(null);
          this.callbackCapabilities = Object.create(null);
          this.actionHandler = Object.create(null);

          this._onComObjOnMessage = event => {
            const data = event.data;

            if (data.targetName !== this.sourceName) {
              return;
            }

            if (data.stream) {
              this._processStreamMessage(data);

              return;
            }

            if (data.callback) {
              const callbackId = data.callbackId;
              const capability = this.callbackCapabilities[callbackId];

              if (!capability) {
                throw new Error(`Cannot resolve callback ${callbackId}`);
              }

              delete this.callbackCapabilities[callbackId];

              if (data.callback === CallbackKind.DATA) {
                capability.resolve(data.data);
              } else if (data.callback === CallbackKind.ERROR) {
                capability.reject(wrapReason(data.reason));
              } else {
                throw new Error("Unexpected callback case");
              }

              return;
            }

            const action = this.actionHandler[data.action];

            if (!action) {
              throw new Error(`Unknown action from worker: ${data.action}`);
            }

            if (data.callbackId) {
              const cbSourceName = this.sourceName;
              const cbTargetName = data.sourceName;
              new Promise(function (resolve) {
                resolve(action(data.data));
              }).then(function (result) {
                comObj.postMessage({
                  sourceName: cbSourceName,
                  targetName: cbTargetName,
                  callback: CallbackKind.DATA,
                  callbackId: data.callbackId,
                  data: result
                });
              }, function (reason) {
                comObj.postMessage({
                  sourceName: cbSourceName,
                  targetName: cbTargetName,
                  callback: CallbackKind.ERROR,
                  callbackId: data.callbackId,
                  reason: wrapReason(reason)
                });
              });
              return;
            }

            if (data.streamId) {
              this._createStreamSink(data);

              return;
            }

            action(data.data);
          };

          comObj.addEventListener("message", this._onComObjOnMessage);
        }

        on(actionName, handler) {
          const ah = this.actionHandler;

          if (ah[actionName]) {
            throw new Error(`There is already an actionName called "${actionName}"`);
          }

          ah[actionName] = handler;
        }

        send(actionName, data, transfers) {
          this._postMessage({
            sourceName: this.sourceName,
            targetName: this.targetName,
            action: actionName,
            data
          }, transfers);
        }

        sendWithPromise(actionName, data, transfers) {
          const callbackId = this.callbackId++;
          const capability = (0, _util.createPromiseCapability)();
          this.callbackCapabilities[callbackId] = capability;

          try {
            this._postMessage({
              sourceName: this.sourceName,
              targetName: this.targetName,
              action: actionName,
              callbackId,
              data
            }, transfers);
          } catch (ex) {
            capability.reject(ex);
          }

          return capability.promise;
        }

        sendWithStream(actionName, data, queueingStrategy, transfers) {
          const streamId = this.streamId++;
          const sourceName = this.sourceName;
          const targetName = this.targetName;
          const comObj = this.comObj;
          return new ReadableStream({
            start: controller => {
              const startCapability = (0, _util.createPromiseCapability)();
              this.streamControllers[streamId] = {
                controller,
                startCall: startCapability,
                pullCall: null,
                cancelCall: null,
                isClosed: false
              };

              this._postMessage({
                sourceName,
                targetName,
                action: actionName,
                streamId,
                data,
                desiredSize: controller.desiredSize
              }, transfers);

              return startCapability.promise;
            },
            pull: controller => {
              const pullCapability = (0, _util.createPromiseCapability)();
              this.streamControllers[streamId].pullCall = pullCapability;
              comObj.postMessage({
                sourceName,
                targetName,
                stream: StreamKind.PULL,
                streamId,
                desiredSize: controller.desiredSize
              });
              return pullCapability.promise;
            },
            cancel: reason => {
              (0, _util.assert)(reason instanceof Error, "cancel must have a valid reason");
              const cancelCapability = (0, _util.createPromiseCapability)();
              this.streamControllers[streamId].cancelCall = cancelCapability;
              this.streamControllers[streamId].isClosed = true;
              comObj.postMessage({
                sourceName,
                targetName,
                stream: StreamKind.CANCEL,
                streamId,
                reason: wrapReason(reason)
              });
              return cancelCapability.promise;
            }
          }, queueingStrategy);
        }

        _createStreamSink(data) {
          const self = this;
          const action = this.actionHandler[data.action];
          const streamId = data.streamId;
          const sourceName = this.sourceName;
          const targetName = data.sourceName;
          const comObj = this.comObj;
          const streamSink = {
            enqueue(chunk, size = 1, transfers) {
              if (this.isCancelled) {
                return;
              }

              const lastDesiredSize = this.desiredSize;
              this.desiredSize -= size;

              if (lastDesiredSize > 0 && this.desiredSize <= 0) {
                this.sinkCapability = (0, _util.createPromiseCapability)();
                this.ready = this.sinkCapability.promise;
              }

              self._postMessage({
                sourceName,
                targetName,
                stream: StreamKind.ENQUEUE,
                streamId,
                chunk
              }, transfers);
            },

            close() {
              if (this.isCancelled) {
                return;
              }

              this.isCancelled = true;
              comObj.postMessage({
                sourceName,
                targetName,
                stream: StreamKind.CLOSE,
                streamId
              });
              delete self.streamSinks[streamId];
            },

            error(reason) {
              (0, _util.assert)(reason instanceof Error, "error must have a valid reason");

              if (this.isCancelled) {
                return;
              }

              this.isCancelled = true;
              comObj.postMessage({
                sourceName,
                targetName,
                stream: StreamKind.ERROR,
                streamId,
                reason: wrapReason(reason)
              });
            },

            sinkCapability: (0, _util.createPromiseCapability)(),
            onPull: null,
            onCancel: null,
            isCancelled: false,
            desiredSize: data.desiredSize,
            ready: null
          };
          streamSink.sinkCapability.resolve();
          streamSink.ready = streamSink.sinkCapability.promise;
          this.streamSinks[streamId] = streamSink;
          new Promise(function (resolve) {
            resolve(action(data.data, streamSink));
          }).then(function () {
            comObj.postMessage({
              sourceName,
              targetName,
              stream: StreamKind.START_COMPLETE,
              streamId,
              success: true
            });
          }, function (reason) {
            comObj.postMessage({
              sourceName,
              targetName,
              stream: StreamKind.START_COMPLETE,
              streamId,
              reason: wrapReason(reason)
            });
          });
        }

        _processStreamMessage(data) {
          const streamId = data.streamId;
          const sourceName = this.sourceName;
          const targetName = data.sourceName;
          const comObj = this.comObj;

          switch (data.stream) {
            case StreamKind.START_COMPLETE:
              if (data.success) {
                this.streamControllers[streamId].startCall.resolve();
              } else {
                this.streamControllers[streamId].startCall.reject(wrapReason(data.reason));
              }

              break;

            case StreamKind.PULL_COMPLETE:
              if (data.success) {
                this.streamControllers[streamId].pullCall.resolve();
              } else {
                this.streamControllers[streamId].pullCall.reject(wrapReason(data.reason));
              }

              break;

            case StreamKind.PULL:
              if (!this.streamSinks[streamId]) {
                comObj.postMessage({
                  sourceName,
                  targetName,
                  stream: StreamKind.PULL_COMPLETE,
                  streamId,
                  success: true
                });
                break;
              }

              if (this.streamSinks[streamId].desiredSize <= 0 && data.desiredSize > 0) {
                this.streamSinks[streamId].sinkCapability.resolve();
              }

              this.streamSinks[streamId].desiredSize = data.desiredSize;
              const {
                onPull
              } = this.streamSinks[data.streamId];
              new Promise(function (resolve) {
                resolve(onPull && onPull());
              }).then(function () {
                comObj.postMessage({
                  sourceName,
                  targetName,
                  stream: StreamKind.PULL_COMPLETE,
                  streamId,
                  success: true
                });
              }, function (reason) {
                comObj.postMessage({
                  sourceName,
                  targetName,
                  stream: StreamKind.PULL_COMPLETE,
                  streamId,
                  reason: wrapReason(reason)
                });
              });
              break;

            case StreamKind.ENQUEUE:
              (0, _util.assert)(this.streamControllers[streamId], "enqueue should have stream controller");

              if (this.streamControllers[streamId].isClosed) {
                break;
              }

              this.streamControllers[streamId].controller.enqueue(data.chunk);
              break;

            case StreamKind.CLOSE:
              (0, _util.assert)(this.streamControllers[streamId], "close should have stream controller");

              if (this.streamControllers[streamId].isClosed) {
                break;
              }

              this.streamControllers[streamId].isClosed = true;
              this.streamControllers[streamId].controller.close();

              this._deleteStreamController(streamId);

              break;

            case StreamKind.ERROR:
              (0, _util.assert)(this.streamControllers[streamId], "error should have stream controller");
              this.streamControllers[streamId].controller.error(wrapReason(data.reason));

              this._deleteStreamController(streamId);

              break;

            case StreamKind.CANCEL_COMPLETE:
              if (data.success) {
                this.streamControllers[streamId].cancelCall.resolve();
              } else {
                this.streamControllers[streamId].cancelCall.reject(wrapReason(data.reason));
              }

              this._deleteStreamController(streamId);

              break;

            case StreamKind.CANCEL:
              if (!this.streamSinks[streamId]) {
                break;
              }

              const {
                onCancel
              } = this.streamSinks[data.streamId];
              new Promise(function (resolve) {
                resolve(onCancel && onCancel(wrapReason(data.reason)));
              }).then(function () {
                comObj.postMessage({
                  sourceName,
                  targetName,
                  stream: StreamKind.CANCEL_COMPLETE,
                  streamId,
                  success: true
                });
              }, function (reason) {
                comObj.postMessage({
                  sourceName,
                  targetName,
                  stream: StreamKind.CANCEL_COMPLETE,
                  streamId,
                  reason: wrapReason(reason)
                });
              });
              this.streamSinks[streamId].sinkCapability.reject(wrapReason(data.reason));
              this.streamSinks[streamId].isCancelled = true;
              delete this.streamSinks[streamId];
              break;

            default:
              throw new Error("Unexpected stream case");
          }
        }

        async _deleteStreamController(streamId) {
          await Promise.allSettled([this.streamControllers[streamId].startCall, this.streamControllers[streamId].pullCall, this.streamControllers[streamId].cancelCall].map(function (capability) {
            return capability && capability.promise;
          }));
          delete this.streamControllers[streamId];
        }

        _postMessage(message, transfers) {
          if (transfers && this.postMessageTransfers) {
            this.comObj.postMessage(message, transfers);
          } else {
            this.comObj.postMessage(message);
          }
        }

        destroy() {
          this.comObj.removeEventListener("message", this._onComObjOnMessage);
        }

      }

      exports.MessageHandler = MessageHandler;
      /***/
    },
    /* 12 */

    /***/
    function (module, exports, __w_pdfjs_require__) {
      "use strict";

      Object.defineProperty(exports, "__esModule", {
        value: true
      });
      exports.Metadata = void 0;

      var _util = __w_pdfjs_require__(2);

      var _xml_parser = __w_pdfjs_require__(13);

      class Metadata {
        constructor(data) {
          (0, _util.assert)(typeof data === "string", "Metadata: input is not a string");
          data = this._repair(data);
          const parser = new _xml_parser.SimpleXMLParser();
          const xmlDocument = parser.parseFromString(data);
          this._metadataMap = new Map();

          if (xmlDocument) {
            this._parse(xmlDocument);
          }
        }

        _repair(data) {
          return data.replace(/^[^<]+/, "").replace(/>\\376\\377([^<]+)/g, function (all, codes) {
            const bytes = codes.replace(/\\([0-3])([0-7])([0-7])/g, function (code, d1, d2, d3) {
              return String.fromCharCode(d1 * 64 + d2 * 8 + d3 * 1);
            }).replace(/&(amp|apos|gt|lt|quot);/g, function (str, name) {
              switch (name) {
                case "amp":
                  return "&";

                case "apos":
                  return "'";

                case "gt":
                  return ">";

                case "lt":
                  return "<";

                case "quot":
                  return '"';
              }

              throw new Error(`_repair: ${name} isn't defined.`);
            });
            let chars = "";

            for (let i = 0, ii = bytes.length; i < ii; i += 2) {
              const code = bytes.charCodeAt(i) * 256 + bytes.charCodeAt(i + 1);

              if (code >= 32 && code < 127 && code !== 60 && code !== 62 && code !== 38) {
                chars += String.fromCharCode(code);
              } else {
                chars += "&#x" + (0x10000 + code).toString(16).substring(1) + ";";
              }
            }

            return ">" + chars;
          });
        }

        _parse(xmlDocument) {
          let rdf = xmlDocument.documentElement;

          if (rdf.nodeName.toLowerCase() !== "rdf:rdf") {
            rdf = rdf.firstChild;

            while (rdf && rdf.nodeName.toLowerCase() !== "rdf:rdf") {
              rdf = rdf.nextSibling;
            }
          }

          const nodeName = rdf ? rdf.nodeName.toLowerCase() : null;

          if (!rdf || nodeName !== "rdf:rdf" || !rdf.hasChildNodes()) {
            return;
          }

          const children = rdf.childNodes;

          for (let i = 0, ii = children.length; i < ii; i++) {
            const desc = children[i];

            if (desc.nodeName.toLowerCase() !== "rdf:description") {
              continue;
            }

            for (let j = 0, jj = desc.childNodes.length; j < jj; j++) {
              if (desc.childNodes[j].nodeName.toLowerCase() !== "#text") {
                const entry = desc.childNodes[j];
                const name = entry.nodeName.toLowerCase();

                this._metadataMap.set(name, entry.textContent.trim());
              }
            }
          }
        }

        get(name) {
          return this._metadataMap.has(name) ? this._metadataMap.get(name) : null;
        }

        getAll() {
          const obj = Object.create(null);

          for (const [key, value] of this._metadataMap) {
            obj[key] = value;
          }

          return obj;
        }

        has(name) {
          return this._metadataMap.has(name);
        }

      }

      exports.Metadata = Metadata;
      /***/
    },
    /* 13 */

    /***/
    function (module, exports, __w_pdfjs_require__) {
      "use strict";

      Object.defineProperty(exports, "__esModule", {
        value: true
      });
      exports.SimpleXMLParser = void 0;
      const XMLParserErrorCode = {
        NoError: 0,
        EndOfDocument: -1,
        UnterminatedCdat: -2,
        UnterminatedXmlDeclaration: -3,
        UnterminatedDoctypeDeclaration: -4,
        UnterminatedComment: -5,
        MalformedElement: -6,
        OutOfMemory: -7,
        UnterminatedAttributeValue: -8,
        UnterminatedElement: -9,
        ElementNeverBegun: -10
      };

      function isWhitespace(s, index) {
        const ch = s[index];
        return ch === " " || ch === "\n" || ch === "\r" || ch === "\t";
      }

      function isWhitespaceString(s) {
        for (let i = 0, ii = s.length; i < ii; i++) {
          if (!isWhitespace(s, i)) {
            return false;
          }
        }

        return true;
      }

      class XMLParserBase {
        _resolveEntities(s) {
          return s.replace(/&([^;]+);/g, (all, entity) => {
            if (entity.substring(0, 2) === "#x") {
              return String.fromCharCode(parseInt(entity.substring(2), 16));
            } else if (entity.substring(0, 1) === "#") {
              return String.fromCharCode(parseInt(entity.substring(1), 10));
            }

            switch (entity) {
              case "lt":
                return "<";

              case "gt":
                return ">";

              case "amp":
                return "&";

              case "quot":
                return '"';
            }

            return this.onResolveEntity(entity);
          });
        }

        _parseContent(s, start) {
          const attributes = [];
          let pos = start;

          function skipWs() {
            while (pos < s.length && isWhitespace(s, pos)) {
              ++pos;
            }
          }

          while (pos < s.length && !isWhitespace(s, pos) && s[pos] !== ">" && s[pos] !== "/") {
            ++pos;
          }

          const name = s.substring(start, pos);
          skipWs();

          while (pos < s.length && s[pos] !== ">" && s[pos] !== "/" && s[pos] !== "?") {
            skipWs();
            let attrName = "",
                attrValue = "";

            while (pos < s.length && !isWhitespace(s, pos) && s[pos] !== "=") {
              attrName += s[pos];
              ++pos;
            }

            skipWs();

            if (s[pos] !== "=") {
              return null;
            }

            ++pos;
            skipWs();
            const attrEndChar = s[pos];

            if (attrEndChar !== '"' && attrEndChar !== "'") {
              return null;
            }

            const attrEndIndex = s.indexOf(attrEndChar, ++pos);

            if (attrEndIndex < 0) {
              return null;
            }

            attrValue = s.substring(pos, attrEndIndex);
            attributes.push({
              name: attrName,
              value: this._resolveEntities(attrValue)
            });
            pos = attrEndIndex + 1;
            skipWs();
          }

          return {
            name,
            attributes,
            parsed: pos - start
          };
        }

        _parseProcessingInstruction(s, start) {
          let pos = start;

          function skipWs() {
            while (pos < s.length && isWhitespace(s, pos)) {
              ++pos;
            }
          }

          while (pos < s.length && !isWhitespace(s, pos) && s[pos] !== ">" && s[pos] !== "/") {
            ++pos;
          }

          const name = s.substring(start, pos);
          skipWs();
          const attrStart = pos;

          while (pos < s.length && (s[pos] !== "?" || s[pos + 1] !== ">")) {
            ++pos;
          }

          const value = s.substring(attrStart, pos);
          return {
            name,
            value,
            parsed: pos - start
          };
        }

        parseXml(s) {
          let i = 0;

          while (i < s.length) {
            const ch = s[i];
            let j = i;

            if (ch === "<") {
              ++j;
              const ch2 = s[j];
              let q;

              switch (ch2) {
                case "/":
                  ++j;
                  q = s.indexOf(">", j);

                  if (q < 0) {
                    this.onError(XMLParserErrorCode.UnterminatedElement);
                    return;
                  }

                  this.onEndElement(s.substring(j, q));
                  j = q + 1;
                  break;

                case "?":
                  ++j;

                  const pi = this._parseProcessingInstruction(s, j);

                  if (s.substring(j + pi.parsed, j + pi.parsed + 2) !== "?>") {
                    this.onError(XMLParserErrorCode.UnterminatedXmlDeclaration);
                    return;
                  }

                  this.onPi(pi.name, pi.value);
                  j += pi.parsed + 2;
                  break;

                case "!":
                  if (s.substring(j + 1, j + 3) === "--") {
                    q = s.indexOf("-->", j + 3);

                    if (q < 0) {
                      this.onError(XMLParserErrorCode.UnterminatedComment);
                      return;
                    }

                    this.onComment(s.substring(j + 3, q));
                    j = q + 3;
                  } else if (s.substring(j + 1, j + 8) === "[CDATA[") {
                    q = s.indexOf("]]>", j + 8);

                    if (q < 0) {
                      this.onError(XMLParserErrorCode.UnterminatedCdat);
                      return;
                    }

                    this.onCdata(s.substring(j + 8, q));
                    j = q + 3;
                  } else if (s.substring(j + 1, j + 8) === "DOCTYPE") {
                    const q2 = s.indexOf("[", j + 8);
                    let complexDoctype = false;
                    q = s.indexOf(">", j + 8);

                    if (q < 0) {
                      this.onError(XMLParserErrorCode.UnterminatedDoctypeDeclaration);
                      return;
                    }

                    if (q2 > 0 && q > q2) {
                      q = s.indexOf("]>", j + 8);

                      if (q < 0) {
                        this.onError(XMLParserErrorCode.UnterminatedDoctypeDeclaration);
                        return;
                      }

                      complexDoctype = true;
                    }

                    const doctypeContent = s.substring(j + 8, q + (complexDoctype ? 1 : 0));
                    this.onDoctype(doctypeContent);
                    j = q + (complexDoctype ? 2 : 1);
                  } else {
                    this.onError(XMLParserErrorCode.MalformedElement);
                    return;
                  }

                  break;

                default:
                  const content = this._parseContent(s, j);

                  if (content === null) {
                    this.onError(XMLParserErrorCode.MalformedElement);
                    return;
                  }

                  let isClosed = false;

                  if (s.substring(j + content.parsed, j + content.parsed + 2) === "/>") {
                    isClosed = true;
                  } else if (s.substring(j + content.parsed, j + content.parsed + 1) !== ">") {
                    this.onError(XMLParserErrorCode.UnterminatedElement);
                    return;
                  }

                  this.onBeginElement(content.name, content.attributes, isClosed);
                  j += content.parsed + (isClosed ? 2 : 1);
                  break;
              }
            } else {
              while (j < s.length && s[j] !== "<") {
                j++;
              }

              const text = s.substring(i, j);
              this.onText(this._resolveEntities(text));
            }

            i = j;
          }
        }

        onResolveEntity(name) {
          return `&${name};`;
        }

        onPi(name, value) {}

        onComment(text) {}

        onCdata(text) {}

        onDoctype(doctypeContent) {}

        onText(text) {}

        onBeginElement(name, attributes, isEmpty) {}

        onEndElement(name) {}

        onError(code) {}

      }

      class SimpleDOMNode {
        constructor(nodeName, nodeValue) {
          this.nodeName = nodeName;
          this.nodeValue = nodeValue;
          Object.defineProperty(this, "parentNode", {
            value: null,
            writable: true
          });
        }

        get firstChild() {
          return this.childNodes && this.childNodes[0];
        }

        get nextSibling() {
          const childNodes = this.parentNode.childNodes;

          if (!childNodes) {
            return undefined;
          }

          const index = childNodes.indexOf(this);

          if (index === -1) {
            return undefined;
          }

          return childNodes[index + 1];
        }

        get textContent() {
          if (!this.childNodes) {
            return this.nodeValue || "";
          }

          return this.childNodes.map(function (child) {
            return child.textContent;
          }).join("");
        }

        hasChildNodes() {
          return this.childNodes && this.childNodes.length > 0;
        }

      }

      class SimpleXMLParser extends XMLParserBase {
        constructor() {
          super();
          this._currentFragment = null;
          this._stack = null;
          this._errorCode = XMLParserErrorCode.NoError;
        }

        parseFromString(data) {
          this._currentFragment = [];
          this._stack = [];
          this._errorCode = XMLParserErrorCode.NoError;
          this.parseXml(data);

          if (this._errorCode !== XMLParserErrorCode.NoError) {
            return undefined;
          }

          const [documentElement] = this._currentFragment;

          if (!documentElement) {
            return undefined;
          }

          return {
            documentElement
          };
        }

        onResolveEntity(name) {
          switch (name) {
            case "apos":
              return "'";
          }

          return super.onResolveEntity(name);
        }

        onText(text) {
          if (isWhitespaceString(text)) {
            return;
          }

          const node = new SimpleDOMNode("#text", text);

          this._currentFragment.push(node);
        }

        onCdata(text) {
          const node = new SimpleDOMNode("#text", text);

          this._currentFragment.push(node);
        }

        onBeginElement(name, attributes, isEmpty) {
          const node = new SimpleDOMNode(name);
          node.childNodes = [];

          this._currentFragment.push(node);

          if (isEmpty) {
            return;
          }

          this._stack.push(this._currentFragment);

          this._currentFragment = node.childNodes;
        }

        onEndElement(name) {
          this._currentFragment = this._stack.pop() || [];
          const lastElement = this._currentFragment[this._currentFragment.length - 1];

          if (!lastElement) {
            return;
          }

          for (let i = 0, ii = lastElement.childNodes.length; i < ii; i++) {
            lastElement.childNodes[i].parentNode = lastElement;
          }
        }

        onError(code) {
          this._errorCode = code;
        }

      }

      exports.SimpleXMLParser = SimpleXMLParser;
      /***/
    },
    /* 14 */

    /***/
    function (module, exports, __w_pdfjs_require__) {
      "use strict";

      Object.defineProperty(exports, "__esModule", {
        value: true
      });
      exports.PDFDataTransportStream = void 0;

      var _util = __w_pdfjs_require__(2);

      class PDFDataTransportStream {
        constructor(params, pdfDataRangeTransport) {
          (0, _util.assert)(pdfDataRangeTransport, 'PDFDataTransportStream - missing required "pdfDataRangeTransport" argument.');
          this._queuedChunks = [];
          this._progressiveDone = params.progressiveDone || false;
          const initialData = params.initialData;

          if (initialData && initialData.length > 0) {
            const buffer = new Uint8Array(initialData).buffer;

            this._queuedChunks.push(buffer);
          }

          this._pdfDataRangeTransport = pdfDataRangeTransport;
          this._isStreamingSupported = !params.disableStream;
          this._isRangeSupported = !params.disableRange;
          this._contentLength = params.length;
          this._fullRequestReader = null;
          this._rangeReaders = [];

          this._pdfDataRangeTransport.addRangeListener((begin, chunk) => {
            this._onReceiveData({
              begin,
              chunk
            });
          });

          this._pdfDataRangeTransport.addProgressListener((loaded, total) => {
            this._onProgress({
              loaded,
              total
            });
          });

          this._pdfDataRangeTransport.addProgressiveReadListener(chunk => {
            this._onReceiveData({
              chunk
            });
          });

          this._pdfDataRangeTransport.addProgressiveDoneListener(() => {
            this._onProgressiveDone();
          });

          this._pdfDataRangeTransport.transportReady();
        }

        _onReceiveData(args) {
          const buffer = new Uint8Array(args.chunk).buffer;

          if (args.begin === undefined) {
            if (this._fullRequestReader) {
              this._fullRequestReader._enqueue(buffer);
            } else {
              this._queuedChunks.push(buffer);
            }
          } else {
            const found = this._rangeReaders.some(function (rangeReader) {
              if (rangeReader._begin !== args.begin) {
                return false;
              }

              rangeReader._enqueue(buffer);

              return true;
            });

            (0, _util.assert)(found, "_onReceiveData - no `PDFDataTransportStreamRangeReader` instance found.");
          }
        }

        get _progressiveDataLength() {
          return this._fullRequestReader ? this._fullRequestReader._loaded : 0;
        }

        _onProgress(evt) {
          if (evt.total === undefined) {
            const firstReader = this._rangeReaders[0];

            if (firstReader && firstReader.onProgress) {
              firstReader.onProgress({
                loaded: evt.loaded
              });
            }
          } else {
            const fullReader = this._fullRequestReader;

            if (fullReader && fullReader.onProgress) {
              fullReader.onProgress({
                loaded: evt.loaded,
                total: evt.total
              });
            }
          }
        }

        _onProgressiveDone() {
          if (this._fullRequestReader) {
            this._fullRequestReader.progressiveDone();
          }

          this._progressiveDone = true;
        }

        _removeRangeReader(reader) {
          const i = this._rangeReaders.indexOf(reader);

          if (i >= 0) {
            this._rangeReaders.splice(i, 1);
          }
        }

        getFullReader() {
          (0, _util.assert)(!this._fullRequestReader, "PDFDataTransportStream.getFullReader can only be called once.");
          const queuedChunks = this._queuedChunks;
          this._queuedChunks = null;
          return new PDFDataTransportStreamReader(this, queuedChunks, this._progressiveDone);
        }

        getRangeReader(begin, end) {
          if (end <= this._progressiveDataLength) {
            return null;
          }

          const reader = new PDFDataTransportStreamRangeReader(this, begin, end);

          this._pdfDataRangeTransport.requestDataRange(begin, end);

          this._rangeReaders.push(reader);

          return reader;
        }

        cancelAllRequests(reason) {
          if (this._fullRequestReader) {
            this._fullRequestReader.cancel(reason);
          }

          const readers = this._rangeReaders.slice(0);

          readers.forEach(function (rangeReader) {
            rangeReader.cancel(reason);
          });

          this._pdfDataRangeTransport.abort();
        }

      }

      exports.PDFDataTransportStream = PDFDataTransportStream;

      class PDFDataTransportStreamReader {
        constructor(stream, queuedChunks, progressiveDone = false) {
          this._stream = stream;
          this._done = progressiveDone || false;
          this._filename = null;
          this._queuedChunks = queuedChunks || [];
          this._loaded = 0;

          for (const chunk of this._queuedChunks) {
            this._loaded += chunk.byteLength;
          }

          this._requests = [];
          this._headersReady = Promise.resolve();
          stream._fullRequestReader = this;
          this.onProgress = null;
        }

        _enqueue(chunk) {
          if (this._done) {
            return;
          }

          if (this._requests.length > 0) {
            const requestCapability = this._requests.shift();

            requestCapability.resolve({
              value: chunk,
              done: false
            });
          } else {
            this._queuedChunks.push(chunk);
          }

          this._loaded += chunk.byteLength;
        }

        get headersReady() {
          return this._headersReady;
        }

        get filename() {
          return this._filename;
        }

        get isRangeSupported() {
          return this._stream._isRangeSupported;
        }

        get isStreamingSupported() {
          return this._stream._isStreamingSupported;
        }

        get contentLength() {
          return this._stream._contentLength;
        }

        async read() {
          if (this._queuedChunks.length > 0) {
            const chunk = this._queuedChunks.shift();

            return {
              value: chunk,
              done: false
            };
          }

          if (this._done) {
            return {
              value: undefined,
              done: true
            };
          }

          const requestCapability = (0, _util.createPromiseCapability)();

          this._requests.push(requestCapability);

          return requestCapability.promise;
        }

        cancel(reason) {
          this._done = true;

          this._requests.forEach(function (requestCapability) {
            requestCapability.resolve({
              value: undefined,
              done: true
            });
          });

          this._requests = [];
        }

        progressiveDone() {
          if (this._done) {
            return;
          }

          this._done = true;
        }

      }

      class PDFDataTransportStreamRangeReader {
        constructor(stream, begin, end) {
          this._stream = stream;
          this._begin = begin;
          this._end = end;
          this._queuedChunk = null;
          this._requests = [];
          this._done = false;
          this.onProgress = null;
        }

        _enqueue(chunk) {
          if (this._done) {
            return;
          }

          if (this._requests.length === 0) {
            this._queuedChunk = chunk;
          } else {
            const requestsCapability = this._requests.shift();

            requestsCapability.resolve({
              value: chunk,
              done: false
            });

            this._requests.forEach(function (requestCapability) {
              requestCapability.resolve({
                value: undefined,
                done: true
              });
            });

            this._requests = [];
          }

          this._done = true;

          this._stream._removeRangeReader(this);
        }

        get isStreamingSupported() {
          return false;
        }

        async read() {
          if (this._queuedChunk) {
            const chunk = this._queuedChunk;
            this._queuedChunk = null;
            return {
              value: chunk,
              done: false
            };
          }

          if (this._done) {
            return {
              value: undefined,
              done: true
            };
          }

          const requestCapability = (0, _util.createPromiseCapability)();

          this._requests.push(requestCapability);

          return requestCapability.promise;
        }

        cancel(reason) {
          this._done = true;

          this._requests.forEach(function (requestCapability) {
            requestCapability.resolve({
              value: undefined,
              done: true
            });
          });

          this._requests = [];

          this._stream._removeRangeReader(this);
        }

      }
      /***/

    },
    /* 15 */

    /***/
    function (module, exports, __w_pdfjs_require__) {
      "use strict";

      Object.defineProperty(exports, "__esModule", {
        value: true
      });
      exports.WebGLContext = void 0;

      var _util = __w_pdfjs_require__(2);

      class WebGLContext {
        constructor({
          enable = false
        }) {
          this._enabled = enable === true;
        }

        get isEnabled() {
          let enabled = this._enabled;

          if (enabled) {
            enabled = WebGLUtils.tryInitGL();
          }

          return (0, _util.shadow)(this, "isEnabled", enabled);
        }

        composeSMask({
          layer,
          mask,
          properties
        }) {
          return WebGLUtils.composeSMask(layer, mask, properties);
        }

        drawFigures({
          width,
          height,
          backgroundColor,
          figures,
          context
        }) {
          return WebGLUtils.drawFigures(width, height, backgroundColor, figures, context);
        }

        clear() {
          WebGLUtils.cleanup();
        }

      }

      exports.WebGLContext = WebGLContext;

      var WebGLUtils = function WebGLUtilsClosure() {
        function loadShader(gl, code, shaderType) {
          var shader = gl.createShader(shaderType);
          gl.shaderSource(shader, code);
          gl.compileShader(shader);
          var compiled = gl.getShaderParameter(shader, gl.COMPILE_STATUS);

          if (!compiled) {
            var errorMsg = gl.getShaderInfoLog(shader);
            throw new Error("Error during shader compilation: " + errorMsg);
          }

          return shader;
        }

        function createVertexShader(gl, code) {
          return loadShader(gl, code, gl.VERTEX_SHADER);
        }

        function createFragmentShader(gl, code) {
          return loadShader(gl, code, gl.FRAGMENT_SHADER);
        }

        function createProgram(gl, shaders) {
          var program = gl.createProgram();

          for (var i = 0, ii = shaders.length; i < ii; ++i) {
            gl.attachShader(program, shaders[i]);
          }

          gl.linkProgram(program);
          var linked = gl.getProgramParameter(program, gl.LINK_STATUS);

          if (!linked) {
            var errorMsg = gl.getProgramInfoLog(program);
            throw new Error("Error during program linking: " + errorMsg);
          }

          return program;
        }

        function createTexture(gl, image, textureId) {
          gl.activeTexture(textureId);
          var texture = gl.createTexture();
          gl.bindTexture(gl.TEXTURE_2D, texture);
          gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
          gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
          gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
          gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
          gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, image);
          return texture;
        }

        var currentGL, currentCanvas;

        function generateGL() {
          if (currentGL) {
            return;
          }

          currentCanvas = document.createElement("canvas");
          currentGL = currentCanvas.getContext("webgl", {
            premultipliedalpha: false
          });
        }

        var smaskVertexShaderCode = "\
  attribute vec2 a_position;                                    \
  attribute vec2 a_texCoord;                                    \
                                                                \
  uniform vec2 u_resolution;                                    \
                                                                \
  varying vec2 v_texCoord;                                      \
                                                                \
  void main() {                                                 \
    vec2 clipSpace = (a_position / u_resolution) * 2.0 - 1.0;   \
    gl_Position = vec4(clipSpace * vec2(1, -1), 0, 1);          \
                                                                \
    v_texCoord = a_texCoord;                                    \
  }                                                             ";
        var smaskFragmentShaderCode = "\
  precision mediump float;                                      \
                                                                \
  uniform vec4 u_backdrop;                                      \
  uniform int u_subtype;                                        \
  uniform sampler2D u_image;                                    \
  uniform sampler2D u_mask;                                     \
                                                                \
  varying vec2 v_texCoord;                                      \
                                                                \
  void main() {                                                 \
    vec4 imageColor = texture2D(u_image, v_texCoord);           \
    vec4 maskColor = texture2D(u_mask, v_texCoord);             \
    if (u_backdrop.a > 0.0) {                                   \
      maskColor.rgb = maskColor.rgb * maskColor.a +             \
                      u_backdrop.rgb * (1.0 - maskColor.a);     \
    }                                                           \
    float lum;                                                  \
    if (u_subtype == 0) {                                       \
      lum = maskColor.a;                                        \
    } else {                                                    \
      lum = maskColor.r * 0.3 + maskColor.g * 0.59 +            \
            maskColor.b * 0.11;                                 \
    }                                                           \
    imageColor.a *= lum;                                        \
    imageColor.rgb *= imageColor.a;                             \
    gl_FragColor = imageColor;                                  \
  }                                                             ";
        var smaskCache = null;

        function initSmaskGL() {
          var canvas, gl;
          generateGL();
          canvas = currentCanvas;
          currentCanvas = null;
          gl = currentGL;
          currentGL = null;
          var vertexShader = createVertexShader(gl, smaskVertexShaderCode);
          var fragmentShader = createFragmentShader(gl, smaskFragmentShaderCode);
          var program = createProgram(gl, [vertexShader, fragmentShader]);
          gl.useProgram(program);
          var cache = {};
          cache.gl = gl;
          cache.canvas = canvas;
          cache.resolutionLocation = gl.getUniformLocation(program, "u_resolution");
          cache.positionLocation = gl.getAttribLocation(program, "a_position");
          cache.backdropLocation = gl.getUniformLocation(program, "u_backdrop");
          cache.subtypeLocation = gl.getUniformLocation(program, "u_subtype");
          var texCoordLocation = gl.getAttribLocation(program, "a_texCoord");
          var texLayerLocation = gl.getUniformLocation(program, "u_image");
          var texMaskLocation = gl.getUniformLocation(program, "u_mask");
          var texCoordBuffer = gl.createBuffer();
          gl.bindBuffer(gl.ARRAY_BUFFER, texCoordBuffer);
          gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 1.0, 1.0, 0.0, 1.0, 1.0]), gl.STATIC_DRAW);
          gl.enableVertexAttribArray(texCoordLocation);
          gl.vertexAttribPointer(texCoordLocation, 2, gl.FLOAT, false, 0, 0);
          gl.uniform1i(texLayerLocation, 0);
          gl.uniform1i(texMaskLocation, 1);
          smaskCache = cache;
        }

        function composeSMask(layer, mask, properties) {
          var width = layer.width,
              height = layer.height;

          if (!smaskCache) {
            initSmaskGL();
          }

          var cache = smaskCache,
              canvas = cache.canvas,
              gl = cache.gl;
          canvas.width = width;
          canvas.height = height;
          gl.viewport(0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight);
          gl.uniform2f(cache.resolutionLocation, width, height);

          if (properties.backdrop) {
            gl.uniform4f(cache.resolutionLocation, properties.backdrop[0], properties.backdrop[1], properties.backdrop[2], 1);
          } else {
            gl.uniform4f(cache.resolutionLocation, 0, 0, 0, 0);
          }

          gl.uniform1i(cache.subtypeLocation, properties.subtype === "Luminosity" ? 1 : 0);
          var texture = createTexture(gl, layer, gl.TEXTURE0);
          var maskTexture = createTexture(gl, mask, gl.TEXTURE1);
          var buffer = gl.createBuffer();
          gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
          gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([0, 0, width, 0, 0, height, 0, height, width, 0, width, height]), gl.STATIC_DRAW);
          gl.enableVertexAttribArray(cache.positionLocation);
          gl.vertexAttribPointer(cache.positionLocation, 2, gl.FLOAT, false, 0, 0);
          gl.clearColor(0, 0, 0, 0);
          gl.enable(gl.BLEND);
          gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA);
          gl.clear(gl.COLOR_BUFFER_BIT);
          gl.drawArrays(gl.TRIANGLES, 0, 6);
          gl.flush();
          gl.deleteTexture(texture);
          gl.deleteTexture(maskTexture);
          gl.deleteBuffer(buffer);
          return canvas;
        }

        var figuresVertexShaderCode = "\
  attribute vec2 a_position;                                    \
  attribute vec3 a_color;                                       \
                                                                \
  uniform vec2 u_resolution;                                    \
  uniform vec2 u_scale;                                         \
  uniform vec2 u_offset;                                        \
                                                                \
  varying vec4 v_color;                                         \
                                                                \
  void main() {                                                 \
    vec2 position = (a_position + u_offset) * u_scale;          \
    vec2 clipSpace = (position / u_resolution) * 2.0 - 1.0;     \
    gl_Position = vec4(clipSpace * vec2(1, -1), 0, 1);          \
                                                                \
    v_color = vec4(a_color / 255.0, 1.0);                       \
  }                                                             ";
        var figuresFragmentShaderCode = "\
  precision mediump float;                                      \
                                                                \
  varying vec4 v_color;                                         \
                                                                \
  void main() {                                                 \
    gl_FragColor = v_color;                                     \
  }                                                             ";
        var figuresCache = null;

        function initFiguresGL() {
          var canvas, gl;
          generateGL();
          canvas = currentCanvas;
          currentCanvas = null;
          gl = currentGL;
          currentGL = null;
          var vertexShader = createVertexShader(gl, figuresVertexShaderCode);
          var fragmentShader = createFragmentShader(gl, figuresFragmentShaderCode);
          var program = createProgram(gl, [vertexShader, fragmentShader]);
          gl.useProgram(program);
          var cache = {};
          cache.gl = gl;
          cache.canvas = canvas;
          cache.resolutionLocation = gl.getUniformLocation(program, "u_resolution");
          cache.scaleLocation = gl.getUniformLocation(program, "u_scale");
          cache.offsetLocation = gl.getUniformLocation(program, "u_offset");
          cache.positionLocation = gl.getAttribLocation(program, "a_position");
          cache.colorLocation = gl.getAttribLocation(program, "a_color");
          figuresCache = cache;
        }

        function drawFigures(width, height, backgroundColor, figures, context) {
          if (!figuresCache) {
            initFiguresGL();
          }

          var cache = figuresCache,
              canvas = cache.canvas,
              gl = cache.gl;
          canvas.width = width;
          canvas.height = height;
          gl.viewport(0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight);
          gl.uniform2f(cache.resolutionLocation, width, height);
          var count = 0;
          var i, ii, rows;

          for (i = 0, ii = figures.length; i < ii; i++) {
            switch (figures[i].type) {
              case "lattice":
                rows = figures[i].coords.length / figures[i].verticesPerRow | 0;
                count += (rows - 1) * (figures[i].verticesPerRow - 1) * 6;
                break;

              case "triangles":
                count += figures[i].coords.length;
                break;
            }
          }

          var coords = new Float32Array(count * 2);
          var colors = new Uint8Array(count * 3);
          var coordsMap = context.coords,
              colorsMap = context.colors;
          var pIndex = 0,
              cIndex = 0;

          for (i = 0, ii = figures.length; i < ii; i++) {
            var figure = figures[i],
                ps = figure.coords,
                cs = figure.colors;

            switch (figure.type) {
              case "lattice":
                var cols = figure.verticesPerRow;
                rows = ps.length / cols | 0;

                for (var row = 1; row < rows; row++) {
                  var offset = row * cols + 1;

                  for (var col = 1; col < cols; col++, offset++) {
                    coords[pIndex] = coordsMap[ps[offset - cols - 1]];
                    coords[pIndex + 1] = coordsMap[ps[offset - cols - 1] + 1];
                    coords[pIndex + 2] = coordsMap[ps[offset - cols]];
                    coords[pIndex + 3] = coordsMap[ps[offset - cols] + 1];
                    coords[pIndex + 4] = coordsMap[ps[offset - 1]];
                    coords[pIndex + 5] = coordsMap[ps[offset - 1] + 1];
                    colors[cIndex] = colorsMap[cs[offset - cols - 1]];
                    colors[cIndex + 1] = colorsMap[cs[offset - cols - 1] + 1];
                    colors[cIndex + 2] = colorsMap[cs[offset - cols - 1] + 2];
                    colors[cIndex + 3] = colorsMap[cs[offset - cols]];
                    colors[cIndex + 4] = colorsMap[cs[offset - cols] + 1];
                    colors[cIndex + 5] = colorsMap[cs[offset - cols] + 2];
                    colors[cIndex + 6] = colorsMap[cs[offset - 1]];
                    colors[cIndex + 7] = colorsMap[cs[offset - 1] + 1];
                    colors[cIndex + 8] = colorsMap[cs[offset - 1] + 2];
                    coords[pIndex + 6] = coords[pIndex + 2];
                    coords[pIndex + 7] = coords[pIndex + 3];
                    coords[pIndex + 8] = coords[pIndex + 4];
                    coords[pIndex + 9] = coords[pIndex + 5];
                    coords[pIndex + 10] = coordsMap[ps[offset]];
                    coords[pIndex + 11] = coordsMap[ps[offset] + 1];
                    colors[cIndex + 9] = colors[cIndex + 3];
                    colors[cIndex + 10] = colors[cIndex + 4];
                    colors[cIndex + 11] = colors[cIndex + 5];
                    colors[cIndex + 12] = colors[cIndex + 6];
                    colors[cIndex + 13] = colors[cIndex + 7];
                    colors[cIndex + 14] = colors[cIndex + 8];
                    colors[cIndex + 15] = colorsMap[cs[offset]];
                    colors[cIndex + 16] = colorsMap[cs[offset] + 1];
                    colors[cIndex + 17] = colorsMap[cs[offset] + 2];
                    pIndex += 12;
                    cIndex += 18;
                  }
                }

                break;

              case "triangles":
                for (var j = 0, jj = ps.length; j < jj; j++) {
                  coords[pIndex] = coordsMap[ps[j]];
                  coords[pIndex + 1] = coordsMap[ps[j] + 1];
                  colors[cIndex] = colorsMap[cs[j]];
                  colors[cIndex + 1] = colorsMap[cs[j] + 1];
                  colors[cIndex + 2] = colorsMap[cs[j] + 2];
                  pIndex += 2;
                  cIndex += 3;
                }

                break;
            }
          }

          if (backgroundColor) {
            gl.clearColor(backgroundColor[0] / 255, backgroundColor[1] / 255, backgroundColor[2] / 255, 1.0);
          } else {
            gl.clearColor(0, 0, 0, 0);
          }

          gl.clear(gl.COLOR_BUFFER_BIT);
          var coordsBuffer = gl.createBuffer();
          gl.bindBuffer(gl.ARRAY_BUFFER, coordsBuffer);
          gl.bufferData(gl.ARRAY_BUFFER, coords, gl.STATIC_DRAW);
          gl.enableVertexAttribArray(cache.positionLocation);
          gl.vertexAttribPointer(cache.positionLocation, 2, gl.FLOAT, false, 0, 0);
          var colorsBuffer = gl.createBuffer();
          gl.bindBuffer(gl.ARRAY_BUFFER, colorsBuffer);
          gl.bufferData(gl.ARRAY_BUFFER, colors, gl.STATIC_DRAW);
          gl.enableVertexAttribArray(cache.colorLocation);
          gl.vertexAttribPointer(cache.colorLocation, 3, gl.UNSIGNED_BYTE, false, 0, 0);
          gl.uniform2f(cache.scaleLocation, context.scaleX, context.scaleY);
          gl.uniform2f(cache.offsetLocation, context.offsetX, context.offsetY);
          gl.drawArrays(gl.TRIANGLES, 0, count);
          gl.flush();
          gl.deleteBuffer(coordsBuffer);
          gl.deleteBuffer(colorsBuffer);
          return canvas;
        }

        return {
          tryInitGL() {
            try {
              generateGL();
              return !!currentGL;
            } catch (ex) {}

            return false;
          },

          composeSMask,
          drawFigures,

          cleanup() {
            if (smaskCache && smaskCache.canvas) {
              smaskCache.canvas.width = 0;
              smaskCache.canvas.height = 0;
            }

            if (figuresCache && figuresCache.canvas) {
              figuresCache.canvas.width = 0;
              figuresCache.canvas.height = 0;
            }

            smaskCache = null;
            figuresCache = null;
          }

        };
      }();
      /***/

    },
    /* 16 */

    /***/
    function (module, exports, __w_pdfjs_require__) {
      "use strict";

      Object.defineProperty(exports, "__esModule", {
        value: true
      });
      exports.AnnotationLayer = void 0;

      var _display_utils = __w_pdfjs_require__(1);

      var _util = __w_pdfjs_require__(2);

      class AnnotationElementFactory {
        static create(parameters) {
          const subtype = parameters.data.annotationType;

          switch (subtype) {
            case _util.AnnotationType.LINK:
              return new LinkAnnotationElement(parameters);

            case _util.AnnotationType.TEXT:
              return new TextAnnotationElement(parameters);

            case _util.AnnotationType.WIDGET:
              const fieldType = parameters.data.fieldType;

              switch (fieldType) {
                case "Tx":
                  return new TextWidgetAnnotationElement(parameters);

                case "Btn":
                  if (parameters.data.radioButton) {
                    return new RadioButtonWidgetAnnotationElement(parameters);
                  } else if (parameters.data.checkBox) {
                    return new CheckboxWidgetAnnotationElement(parameters);
                  }

                  return new PushButtonWidgetAnnotationElement(parameters);

                case "Ch":
                  return new ChoiceWidgetAnnotationElement(parameters);
              }

              return new WidgetAnnotationElement(parameters);

            case _util.AnnotationType.POPUP:
              return new PopupAnnotationElement(parameters);

            case _util.AnnotationType.FREETEXT:
              return new FreeTextAnnotationElement(parameters);

            case _util.AnnotationType.LINE:
              return new LineAnnotationElement(parameters);

            case _util.AnnotationType.SQUARE:
              return new SquareAnnotationElement(parameters);

            case _util.AnnotationType.CIRCLE:
              return new CircleAnnotationElement(parameters);

            case _util.AnnotationType.POLYLINE:
              return new PolylineAnnotationElement(parameters);

            case _util.AnnotationType.CARET:
              return new CaretAnnotationElement(parameters);

            case _util.AnnotationType.INK:
              return new InkAnnotationElement(parameters);

            case _util.AnnotationType.POLYGON:
              return new PolygonAnnotationElement(parameters);

            case _util.AnnotationType.HIGHLIGHT:
              return new HighlightAnnotationElement(parameters);

            case _util.AnnotationType.UNDERLINE:
              return new UnderlineAnnotationElement(parameters);

            case _util.AnnotationType.SQUIGGLY:
              return new SquigglyAnnotationElement(parameters);

            case _util.AnnotationType.STRIKEOUT:
              return new StrikeOutAnnotationElement(parameters);

            case _util.AnnotationType.STAMP:
              return new StampAnnotationElement(parameters);

            case _util.AnnotationType.FILEATTACHMENT:
              return new FileAttachmentAnnotationElement(parameters);

            default:
              return new AnnotationElement(parameters);
          }
        }

      }

      class AnnotationElement {
        constructor(parameters, isRenderable = false, ignoreBorder = false) {
          this.isRenderable = isRenderable;
          this.data = parameters.data;
          this.layer = parameters.layer;
          this.page = parameters.page;
          this.viewport = parameters.viewport;
          this.linkService = parameters.linkService;
          this.downloadManager = parameters.downloadManager;
          this.imageResourcesPath = parameters.imageResourcesPath;
          this.renderInteractiveForms = parameters.renderInteractiveForms;
          this.svgFactory = parameters.svgFactory;

          if (isRenderable) {
            this.container = this._createContainer(ignoreBorder);
          }
        }

        _createContainer(ignoreBorder = false) {
          const data = this.data,
                page = this.page,
                viewport = this.viewport;
          const container = document.createElement("section");
          let width = data.rect[2] - data.rect[0];
          let height = data.rect[3] - data.rect[1];
          container.setAttribute("data-annotation-id", data.id);

          const rect = _util.Util.normalizeRect([data.rect[0], page.view[3] - data.rect[1] + page.view[1], data.rect[2], page.view[3] - data.rect[3] + page.view[1]]);

          container.style.transform = `matrix(${viewport.transform.join(",")})`;
          container.style.transformOrigin = `-${rect[0]}px -${rect[1]}px`;

          if (!ignoreBorder && data.borderStyle.width > 0) {
            container.style.borderWidth = `${data.borderStyle.width}px`;

            if (data.borderStyle.style !== _util.AnnotationBorderStyleType.UNDERLINE) {
              width = width - 2 * data.borderStyle.width;
              height = height - 2 * data.borderStyle.width;
            }

            const horizontalRadius = data.borderStyle.horizontalCornerRadius;
            const verticalRadius = data.borderStyle.verticalCornerRadius;

            if (horizontalRadius > 0 || verticalRadius > 0) {
              const radius = `${horizontalRadius}px / ${verticalRadius}px`;
              container.style.borderRadius = radius;
            }

            switch (data.borderStyle.style) {
              case _util.AnnotationBorderStyleType.SOLID:
                container.style.borderStyle = "solid";
                break;

              case _util.AnnotationBorderStyleType.DASHED:
                container.style.borderStyle = "dashed";
                break;

              case _util.AnnotationBorderStyleType.BEVELED:
                (0, _util.warn)("Unimplemented border style: beveled");
                break;

              case _util.AnnotationBorderStyleType.INSET:
                (0, _util.warn)("Unimplemented border style: inset");
                break;

              case _util.AnnotationBorderStyleType.UNDERLINE:
                container.style.borderBottomStyle = "solid";
                break;

              default:
                break;
            }

            if (data.color) {
              container.style.borderColor = _util.Util.makeCssRgb(data.color[0] | 0, data.color[1] | 0, data.color[2] | 0);
            } else {
              container.style.borderWidth = 0;
            }
          }

          container.style.left = `${rect[0]}px`;
          container.style.top = `${rect[1]}px`;
          container.style.width = `${width}px`;
          container.style.height = `${height}px`;
          return container;
        }

        _createPopup(container, trigger, data) {
          if (!trigger) {
            trigger = document.createElement("div");
            trigger.style.height = container.style.height;
            trigger.style.width = container.style.width;
            container.appendChild(trigger);
          }

          const popupElement = new PopupElement({
            container,
            trigger,
            color: data.color,
            title: data.title,
            modificationDate: data.modificationDate,
            contents: data.contents,
            hideWrapper: true
          });
          const popup = popupElement.render();
          popup.style.left = container.style.width;
          container.appendChild(popup);
        }

        render() {
          (0, _util.unreachable)("Abstract method `AnnotationElement.render` called");
        }

      }

      class LinkAnnotationElement extends AnnotationElement {
        constructor(parameters) {
          const isRenderable = !!(parameters.data.url || parameters.data.dest || parameters.data.action);
          super(parameters, isRenderable);
        }

        render() {
          this.container.className = "linkAnnotation";
          const {
            data,
            linkService
          } = this;
          const link = document.createElement("a");

          if (data.url) {
            (0, _display_utils.addLinkAttributes)(link, {
              url: data.url,
              target: data.newWindow ? _display_utils.LinkTarget.BLANK : linkService.externalLinkTarget,
              rel: linkService.externalLinkRel,
              enabled: linkService.externalLinkEnabled
            });
          } else if (data.action) {
            this._bindNamedAction(link, data.action);
          } else {
            this._bindLink(link, data.dest);
          }

          this.container.appendChild(link);
          return this.container;
        }

        _bindLink(link, destination) {
          link.href = this.linkService.getDestinationHash(destination);

          link.onclick = () => {
            if (destination) {
              this.linkService.navigateTo(destination);
            }

            return false;
          };

          if (destination) {
            link.className = "internalLink";
          }
        }

        _bindNamedAction(link, action) {
          link.href = this.linkService.getAnchorUrl("");

          link.onclick = () => {
            this.linkService.executeNamedAction(action);
            return false;
          };

          link.className = "internalLink";
        }

      }

      class TextAnnotationElement extends AnnotationElement {
        constructor(parameters) {
          const isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents);
          super(parameters, isRenderable);
        }

        render() {
          this.container.className = "textAnnotation";
          const image = document.createElement("img");
          image.style.height = this.container.style.height;
          image.style.width = this.container.style.width;
          image.src = this.imageResourcesPath + "annotation-" + this.data.name.toLowerCase() + ".svg";
          image.alt = "[{{type}} Annotation]";
          image.dataset.l10nId = "text_annotation_type";
          image.dataset.l10nArgs = JSON.stringify({
            type: this.data.name
          });

          if (!this.data.hasPopup) {
            this._createPopup(this.container, image, this.data);
          }

          this.container.appendChild(image);
          return this.container;
        }

      }

      class WidgetAnnotationElement extends AnnotationElement {
        render() {
          return this.container;
        }

      }

      class TextWidgetAnnotationElement extends WidgetAnnotationElement {
        constructor(parameters) {
          const isRenderable = parameters.renderInteractiveForms || !parameters.data.hasAppearance && !!parameters.data.fieldValue;
          super(parameters, isRenderable);
        }

        render() {
          const TEXT_ALIGNMENT = ["left", "center", "right"];
          this.container.className = "textWidgetAnnotation";
          let element = null;

          if (this.renderInteractiveForms) {
            if (this.data.multiLine) {
              element = document.createElement("textarea");
              element.textContent = this.data.fieldValue;
            } else {
              element = document.createElement("input");
              element.type = "text";
              element.setAttribute("value", this.data.fieldValue);
            }

            element.disabled = this.data.readOnly;
            element.name = this.data.fieldName;

            if (this.data.maxLen !== null) {
              element.maxLength = this.data.maxLen;
            }

            if (this.data.comb) {
              const fieldWidth = this.data.rect[2] - this.data.rect[0];
              const combWidth = fieldWidth / this.data.maxLen;
              element.classList.add("comb");
              element.style.letterSpacing = `calc(${combWidth}px - 1ch)`;
            }
          } else {
            element = document.createElement("div");
            element.textContent = this.data.fieldValue;
            element.style.verticalAlign = "middle";
            element.style.display = "table-cell";
            let font = null;

            if (this.data.fontRefName && this.page.commonObjs.has(this.data.fontRefName)) {
              font = this.page.commonObjs.get(this.data.fontRefName);
            }

            this._setTextStyle(element, font);
          }

          if (this.data.textAlignment !== null) {
            element.style.textAlign = TEXT_ALIGNMENT[this.data.textAlignment];
          }

          this.container.appendChild(element);
          return this.container;
        }

        _setTextStyle(element, font) {
          const style = element.style;
          style.fontSize = `${this.data.fontSize}px`;
          style.direction = this.data.fontDirection < 0 ? "rtl" : "ltr";

          if (!font) {
            return;
          }

          let bold = "normal";

          if (font.black) {
            bold = "900";
          } else if (font.bold) {
            bold = "bold";
          }

          style.fontWeight = bold;
          style.fontStyle = font.italic ? "italic" : "normal";
          const fontFamily = font.loadedName ? `"${font.loadedName}", ` : "";
          const fallbackName = font.fallbackName || "Helvetica, sans-serif";
          style.fontFamily = fontFamily + fallbackName;
        }

      }

      class CheckboxWidgetAnnotationElement extends WidgetAnnotationElement {
        constructor(parameters) {
          super(parameters, parameters.renderInteractiveForms);
        }

        render() {
          this.container.className = "buttonWidgetAnnotation checkBox";
          const element = document.createElement("input");
          element.disabled = this.data.readOnly;
          element.type = "checkbox";
          element.name = this.data.fieldName;

          if (this.data.fieldValue && this.data.fieldValue !== "Off") {
            element.setAttribute("checked", true);
          }

          this.container.appendChild(element);
          return this.container;
        }

      }

      class RadioButtonWidgetAnnotationElement extends WidgetAnnotationElement {
        constructor(parameters) {
          super(parameters, parameters.renderInteractiveForms);
        }

        render() {
          this.container.className = "buttonWidgetAnnotation radioButton";
          const element = document.createElement("input");
          element.disabled = this.data.readOnly;
          element.type = "radio";
          element.name = this.data.fieldName;

          if (this.data.fieldValue === this.data.buttonValue) {
            element.setAttribute("checked", true);
          }

          this.container.appendChild(element);
          return this.container;
        }

      }

      class PushButtonWidgetAnnotationElement extends LinkAnnotationElement {
        render() {
          const container = super.render();
          container.className = "buttonWidgetAnnotation pushButton";
          return container;
        }

      }

      class ChoiceWidgetAnnotationElement extends WidgetAnnotationElement {
        constructor(parameters) {
          super(parameters, parameters.renderInteractiveForms);
        }

        render() {
          this.container.className = "choiceWidgetAnnotation";
          const selectElement = document.createElement("select");
          selectElement.disabled = this.data.readOnly;
          selectElement.name = this.data.fieldName;

          if (!this.data.combo) {
            selectElement.size = this.data.options.length;

            if (this.data.multiSelect) {
              selectElement.multiple = true;
            }
          }

          for (const option of this.data.options) {
            const optionElement = document.createElement("option");
            optionElement.textContent = option.displayValue;
            optionElement.value = option.exportValue;

            if (this.data.fieldValue.includes(option.displayValue)) {
              optionElement.setAttribute("selected", true);
            }

            selectElement.appendChild(optionElement);
          }

          this.container.appendChild(selectElement);
          return this.container;
        }

      }

      class PopupAnnotationElement extends AnnotationElement {
        constructor(parameters) {
          const isRenderable = !!(parameters.data.title || parameters.data.contents);
          super(parameters, isRenderable);
        }

        render() {
          const IGNORE_TYPES = ["Line", "Square", "Circle", "PolyLine", "Polygon", "Ink"];
          this.container.className = "popupAnnotation";

          if (IGNORE_TYPES.includes(this.data.parentType)) {
            return this.container;
          }

          const selector = `[data-annotation-id="${this.data.parentId}"]`;
          const parentElement = this.layer.querySelector(selector);

          if (!parentElement) {
            return this.container;
          }

          const popup = new PopupElement({
            container: this.container,
            trigger: parentElement,
            color: this.data.color,
            title: this.data.title,
            modificationDate: this.data.modificationDate,
            contents: this.data.contents
          });
          const parentLeft = parseFloat(parentElement.style.left);
          const parentWidth = parseFloat(parentElement.style.width);
          this.container.style.transformOrigin = `-${parentLeft + parentWidth}px -${parentElement.style.top}`;
          this.container.style.left = `${parentLeft + parentWidth}px`;
          this.container.appendChild(popup.render());
          return this.container;
        }

      }

      class PopupElement {
        constructor(parameters) {
          this.container = parameters.container;
          this.trigger = parameters.trigger;
          this.color = parameters.color;
          this.title = parameters.title;
          this.modificationDate = parameters.modificationDate;
          this.contents = parameters.contents;
          this.hideWrapper = parameters.hideWrapper || false;
          this.pinned = false;
        }

        render() {
          const BACKGROUND_ENLIGHT = 0.7;
          const wrapper = document.createElement("div");
          wrapper.className = "popupWrapper";
          this.hideElement = this.hideWrapper ? wrapper : this.container;
          this.hideElement.setAttribute("hidden", true);
          const popup = document.createElement("div");
          popup.className = "popup";
          const color = this.color;

          if (color) {
            const r = BACKGROUND_ENLIGHT * (255 - color[0]) + color[0];
            const g = BACKGROUND_ENLIGHT * (255 - color[1]) + color[1];
            const b = BACKGROUND_ENLIGHT * (255 - color[2]) + color[2];
            popup.style.backgroundColor = _util.Util.makeCssRgb(r | 0, g | 0, b | 0);
          }

          const title = document.createElement("h1");
          title.textContent = this.title;
          popup.appendChild(title);

          const dateObject = _display_utils.PDFDateString.toDateObject(this.modificationDate);

          if (dateObject) {
            const modificationDate = document.createElement("span");
            modificationDate.textContent = "{{date}}, {{time}}";
            modificationDate.dataset.l10nId = "annotation_date_string";
            modificationDate.dataset.l10nArgs = JSON.stringify({
              date: dateObject.toLocaleDateString(),
              time: dateObject.toLocaleTimeString()
            });
            popup.appendChild(modificationDate);
          }

          const contents = this._formatContents(this.contents);

          popup.appendChild(contents);
          this.trigger.addEventListener("click", this._toggle.bind(this));
          this.trigger.addEventListener("mouseover", this._show.bind(this, false));
          this.trigger.addEventListener("mouseout", this._hide.bind(this, false));
          popup.addEventListener("click", this._hide.bind(this, true));
          wrapper.appendChild(popup);
          return wrapper;
        }

        _formatContents(contents) {
          const p = document.createElement("p");
          const lines = contents.split(/(?:\r\n?|\n)/);

          for (let i = 0, ii = lines.length; i < ii; ++i) {
            const line = lines[i];
            p.appendChild(document.createTextNode(line));

            if (i < ii - 1) {
              p.appendChild(document.createElement("br"));
            }
          }

          return p;
        }

        _toggle() {
          if (this.pinned) {
            this._hide(true);
          } else {
            this._show(true);
          }
        }

        _show(pin = false) {
          if (pin) {
            this.pinned = true;
          }

          if (this.hideElement.hasAttribute("hidden")) {
            this.hideElement.removeAttribute("hidden");
            this.container.style.zIndex += 1;
          }
        }

        _hide(unpin = true) {
          if (unpin) {
            this.pinned = false;
          }

          if (!this.hideElement.hasAttribute("hidden") && !this.pinned) {
            this.hideElement.setAttribute("hidden", true);
            this.container.style.zIndex -= 1;
          }
        }

      }

      class FreeTextAnnotationElement extends AnnotationElement {
        constructor(parameters) {
          const isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents);
          super(parameters, isRenderable, true);
        }

        render() {
          this.container.className = "freeTextAnnotation";

          if (!this.data.hasPopup) {
            this._createPopup(this.container, null, this.data);
          }

          return this.container;
        }

      }

      class LineAnnotationElement extends AnnotationElement {
        constructor(parameters) {
          const isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents);
          super(parameters, isRenderable, true);
        }

        render() {
          this.container.className = "lineAnnotation";
          const data = this.data;
          const width = data.rect[2] - data.rect[0];
          const height = data.rect[3] - data.rect[1];
          const svg = this.svgFactory.create(width, height);
          const line = this.svgFactory.createElement("svg:line");
          line.setAttribute("x1", data.rect[2] - data.lineCoordinates[0]);
          line.setAttribute("y1", data.rect[3] - data.lineCoordinates[1]);
          line.setAttribute("x2", data.rect[2] - data.lineCoordinates[2]);
          line.setAttribute("y2", data.rect[3] - data.lineCoordinates[3]);
          line.setAttribute("stroke-width", data.borderStyle.width || 1);
          line.setAttribute("stroke", "transparent");
          svg.appendChild(line);
          this.container.append(svg);

          this._createPopup(this.container, line, data);

          return this.container;
        }

      }

      class SquareAnnotationElement extends AnnotationElement {
        constructor(parameters) {
          const isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents);
          super(parameters, isRenderable, true);
        }

        render() {
          this.container.className = "squareAnnotation";
          const data = this.data;
          const width = data.rect[2] - data.rect[0];
          const height = data.rect[3] - data.rect[1];
          const svg = this.svgFactory.create(width, height);
          const borderWidth = data.borderStyle.width;
          const square = this.svgFactory.createElement("svg:rect");
          square.setAttribute("x", borderWidth / 2);
          square.setAttribute("y", borderWidth / 2);
          square.setAttribute("width", width - borderWidth);
          square.setAttribute("height", height - borderWidth);
          square.setAttribute("stroke-width", borderWidth || 1);
          square.setAttribute("stroke", "transparent");
          square.setAttribute("fill", "none");
          svg.appendChild(square);
          this.container.append(svg);

          this._createPopup(this.container, square, data);

          return this.container;
        }

      }

      class CircleAnnotationElement extends AnnotationElement {
        constructor(parameters) {
          const isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents);
          super(parameters, isRenderable, true);
        }

        render() {
          this.container.className = "circleAnnotation";
          const data = this.data;
          const width = data.rect[2] - data.rect[0];
          const height = data.rect[3] - data.rect[1];
          const svg = this.svgFactory.create(width, height);
          const borderWidth = data.borderStyle.width;
          const circle = this.svgFactory.createElement("svg:ellipse");
          circle.setAttribute("cx", width / 2);
          circle.setAttribute("cy", height / 2);
          circle.setAttribute("rx", width / 2 - borderWidth / 2);
          circle.setAttribute("ry", height / 2 - borderWidth / 2);
          circle.setAttribute("stroke-width", borderWidth || 1);
          circle.setAttribute("stroke", "transparent");
          circle.setAttribute("fill", "none");
          svg.appendChild(circle);
          this.container.append(svg);

          this._createPopup(this.container, circle, data);

          return this.container;
        }

      }

      class PolylineAnnotationElement extends AnnotationElement {
        constructor(parameters) {
          const isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents);
          super(parameters, isRenderable, true);
          this.containerClassName = "polylineAnnotation";
          this.svgElementName = "svg:polyline";
        }

        render() {
          this.container.className = this.containerClassName;
          const data = this.data;
          const width = data.rect[2] - data.rect[0];
          const height = data.rect[3] - data.rect[1];
          const svg = this.svgFactory.create(width, height);
          let points = [];

          for (const coordinate of data.vertices) {
            const x = coordinate.x - data.rect[0];
            const y = data.rect[3] - coordinate.y;
            points.push(x + "," + y);
          }

          points = points.join(" ");
          const polyline = this.svgFactory.createElement(this.svgElementName);
          polyline.setAttribute("points", points);
          polyline.setAttribute("stroke-width", data.borderStyle.width || 1);
          polyline.setAttribute("stroke", "transparent");
          polyline.setAttribute("fill", "none");
          svg.appendChild(polyline);
          this.container.append(svg);

          this._createPopup(this.container, polyline, data);

          return this.container;
        }

      }

      class PolygonAnnotationElement extends PolylineAnnotationElement {
        constructor(parameters) {
          super(parameters);
          this.containerClassName = "polygonAnnotation";
          this.svgElementName = "svg:polygon";
        }

      }

      class CaretAnnotationElement extends AnnotationElement {
        constructor(parameters) {
          const isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents);
          super(parameters, isRenderable, true);
        }

        render() {
          this.container.className = "caretAnnotation";

          if (!this.data.hasPopup) {
            this._createPopup(this.container, null, this.data);
          }

          return this.container;
        }

      }

      class InkAnnotationElement extends AnnotationElement {
        constructor(parameters) {
          const isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents);
          super(parameters, isRenderable, true);
          this.containerClassName = "inkAnnotation";
          this.svgElementName = "svg:polyline";
        }

        render() {
          this.container.className = this.containerClassName;
          const data = this.data;
          const width = data.rect[2] - data.rect[0];
          const height = data.rect[3] - data.rect[1];
          const svg = this.svgFactory.create(width, height);

          for (const inkList of data.inkLists) {
            let points = [];

            for (const coordinate of inkList) {
              const x = coordinate.x - data.rect[0];
              const y = data.rect[3] - coordinate.y;
              points.push(`${x},${y}`);
            }

            points = points.join(" ");
            const polyline = this.svgFactory.createElement(this.svgElementName);
            polyline.setAttribute("points", points);
            polyline.setAttribute("stroke-width", data.borderStyle.width || 1);
            polyline.setAttribute("stroke", "transparent");
            polyline.setAttribute("fill", "none");

            this._createPopup(this.container, polyline, data);

            svg.appendChild(polyline);
          }

          this.container.append(svg);
          return this.container;
        }

      }

      class HighlightAnnotationElement extends AnnotationElement {
        constructor(parameters) {
          const isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents);
          super(parameters, isRenderable, true);
        }

        render() {
          this.container.className = "highlightAnnotation";

          if (!this.data.hasPopup) {
            this._createPopup(this.container, null, this.data);
          }

          return this.container;
        }

      }

      class UnderlineAnnotationElement extends AnnotationElement {
        constructor(parameters) {
          const isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents);
          super(parameters, isRenderable, true);
        }

        render() {
          this.container.className = "underlineAnnotation";

          if (!this.data.hasPopup) {
            this._createPopup(this.container, null, this.data);
          }

          return this.container;
        }

      }

      class SquigglyAnnotationElement extends AnnotationElement {
        constructor(parameters) {
          const isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents);
          super(parameters, isRenderable, true);
        }

        render() {
          this.container.className = "squigglyAnnotation";

          if (!this.data.hasPopup) {
            this._createPopup(this.container, null, this.data);
          }

          return this.container;
        }

      }

      class StrikeOutAnnotationElement extends AnnotationElement {
        constructor(parameters) {
          const isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents);
          super(parameters, isRenderable, true);
        }

        render() {
          this.container.className = "strikeoutAnnotation";

          if (!this.data.hasPopup) {
            this._createPopup(this.container, null, this.data);
          }

          return this.container;
        }

      }

      class StampAnnotationElement extends AnnotationElement {
        constructor(parameters) {
          const isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents);
          super(parameters, isRenderable, true);
        }

        render() {
          this.container.className = "stampAnnotation";

          if (!this.data.hasPopup) {
            this._createPopup(this.container, null, this.data);
          }

          return this.container;
        }

      }

      class FileAttachmentAnnotationElement extends AnnotationElement {
        constructor(parameters) {
          super(parameters, true);
          const {
            filename,
            content
          } = this.data.file;
          this.filename = (0, _display_utils.getFilenameFromUrl)(filename);
          this.content = content;

          if (this.linkService.eventBus) {
            this.linkService.eventBus.dispatch("fileattachmentannotation", {
              source: this,
              id: (0, _util.stringToPDFString)(filename),
              filename,
              content
            });
          }
        }

        render() {
          this.container.className = "fileAttachmentAnnotation";
          const trigger = document.createElement("div");
          trigger.style.height = this.container.style.height;
          trigger.style.width = this.container.style.width;
          trigger.addEventListener("dblclick", this._download.bind(this));

          if (!this.data.hasPopup && (this.data.title || this.data.contents)) {
            this._createPopup(this.container, trigger, this.data);
          }

          this.container.appendChild(trigger);
          return this.container;
        }

        _download() {
          if (!this.downloadManager) {
            (0, _util.warn)("Download cannot be started due to unavailable download manager");
            return;
          }

          this.downloadManager.downloadData(this.content, this.filename, "");
        }

      }

      class AnnotationLayer {
        static render(parameters) {
          const sortedAnnotations = [],
                popupAnnotations = [];

          for (const data of parameters.annotations) {
            if (!data) {
              continue;
            }

            if (data.annotationType === _util.AnnotationType.POPUP) {
              popupAnnotations.push(data);
              continue;
            }

            sortedAnnotations.push(data);
          }

          if (popupAnnotations.length) {
            sortedAnnotations.push(...popupAnnotations);
          }

          for (const data of sortedAnnotations) {
            const element = AnnotationElementFactory.create({
              data,
              layer: parameters.div,
              page: parameters.page,
              viewport: parameters.viewport,
              linkService: parameters.linkService,
              downloadManager: parameters.downloadManager,
              imageResourcesPath: parameters.imageResourcesPath || "",
              renderInteractiveForms: parameters.renderInteractiveForms || false,
              svgFactory: new _display_utils.DOMSVGFactory()
            });

            if (element.isRenderable) {
              parameters.div.appendChild(element.render());
            }
          }
        }

        static update(parameters) {
          for (const data of parameters.annotations) {
            const element = parameters.div.querySelector(`[data-annotation-id="${data.id}"]`);

            if (element) {
              element.style.transform = `matrix(${parameters.viewport.transform.join(",")})`;
            }
          }

          parameters.div.removeAttribute("hidden");
        }

      }

      exports.AnnotationLayer = AnnotationLayer;
      /***/
    },
    /* 17 */

    /***/
    function (module, exports, __w_pdfjs_require__) {
      "use strict";

      Object.defineProperty(exports, "__esModule", {
        value: true
      });
      exports.renderTextLayer = void 0;

      var _util = __w_pdfjs_require__(2);

      var renderTextLayer = function renderTextLayerClosure() {
        var MAX_TEXT_DIVS_TO_RENDER = 100000;
        var NonWhitespaceRegexp = /\S/;

        function isAllWhitespace(str) {
          return !NonWhitespaceRegexp.test(str);
        }

        function appendText(task, geom, styles) {
          var textDiv = document.createElement("span");
          var textDivProperties = {
            angle: 0,
            canvasWidth: 0,
            isWhitespace: false,
            originalTransform: null,
            paddingBottom: 0,
            paddingLeft: 0,
            paddingRight: 0,
            paddingTop: 0,
            scale: 1
          };

          task._textDivs.push(textDiv);

          if (isAllWhitespace(geom.str)) {
            textDivProperties.isWhitespace = true;

            task._textDivProperties.set(textDiv, textDivProperties);

            return;
          }

          var tx = _util.Util.transform(task._viewport.transform, geom.transform);

          var angle = Math.atan2(tx[1], tx[0]);
          var style = styles[geom.fontName];

          if (style.vertical) {
            angle += Math.PI / 2;
          }

          var fontHeight = Math.sqrt(tx[2] * tx[2] + tx[3] * tx[3]);
          var fontAscent = fontHeight;

          if (style.ascent) {
            fontAscent = style.ascent * fontAscent;
          } else if (style.descent) {
            fontAscent = (1 + style.descent) * fontAscent;
          }

          let left, top;

          if (angle === 0) {
            left = tx[4];
            top = tx[5] - fontAscent;
          } else {
            left = tx[4] + fontAscent * Math.sin(angle);
            top = tx[5] - fontAscent * Math.cos(angle);
          }

          textDiv.style.left = `${left}px`;
          textDiv.style.top = `${top}px`;
          textDiv.style.fontSize = `${fontHeight}px`;
          textDiv.style.fontFamily = style.fontFamily;
          textDiv.textContent = geom.str;

          if (task._fontInspectorEnabled) {
            textDiv.dataset.fontName = geom.fontName;
          }

          if (angle !== 0) {
            textDivProperties.angle = angle * (180 / Math.PI);
          }

          let shouldScaleText = false;

          if (geom.str.length > 1) {
            shouldScaleText = true;
          } else if (geom.transform[0] !== geom.transform[3]) {
            const absScaleX = Math.abs(geom.transform[0]),
                  absScaleY = Math.abs(geom.transform[3]);

            if (absScaleX !== absScaleY && Math.max(absScaleX, absScaleY) / Math.min(absScaleX, absScaleY) > 1.5) {
              shouldScaleText = true;
            }
          }

          if (shouldScaleText) {
            if (style.vertical) {
              textDivProperties.canvasWidth = geom.height * task._viewport.scale;
            } else {
              textDivProperties.canvasWidth = geom.width * task._viewport.scale;
            }
          }

          task._textDivProperties.set(textDiv, textDivProperties);

          if (task._textContentStream) {
            task._layoutText(textDiv);
          }

          if (task._enhanceTextSelection) {
            var angleCos = 1,
                angleSin = 0;

            if (angle !== 0) {
              angleCos = Math.cos(angle);
              angleSin = Math.sin(angle);
            }

            var divWidth = (style.vertical ? geom.height : geom.width) * task._viewport.scale;
            var divHeight = fontHeight;
            var m, b;

            if (angle !== 0) {
              m = [angleCos, angleSin, -angleSin, angleCos, left, top];
              b = _util.Util.getAxialAlignedBoundingBox([0, 0, divWidth, divHeight], m);
            } else {
              b = [left, top, left + divWidth, top + divHeight];
            }

            task._bounds.push({
              left: b[0],
              top: b[1],
              right: b[2],
              bottom: b[3],
              div: textDiv,
              size: [divWidth, divHeight],
              m
            });
          }
        }

        function render(task) {
          if (task._canceled) {
            return;
          }

          var textDivs = task._textDivs;
          var capability = task._capability;
          var textDivsLength = textDivs.length;

          if (textDivsLength > MAX_TEXT_DIVS_TO_RENDER) {
            task._renderingDone = true;
            capability.resolve();
            return;
          }

          if (!task._textContentStream) {
            for (var i = 0; i < textDivsLength; i++) {
              task._layoutText(textDivs[i]);
            }
          }

          task._renderingDone = true;
          capability.resolve();
        }

        function findPositiveMin(ts, offset, count) {
          let result = 0;

          for (let i = 0; i < count; i++) {
            const t = ts[offset++];

            if (t > 0) {
              result = result ? Math.min(t, result) : t;
            }
          }

          return result;
        }

        function expand(task) {
          var bounds = task._bounds;
          var viewport = task._viewport;
          var expanded = expandBounds(viewport.width, viewport.height, bounds);

          for (var i = 0; i < expanded.length; i++) {
            var div = bounds[i].div;

            var divProperties = task._textDivProperties.get(div);

            if (divProperties.angle === 0) {
              divProperties.paddingLeft = bounds[i].left - expanded[i].left;
              divProperties.paddingTop = bounds[i].top - expanded[i].top;
              divProperties.paddingRight = expanded[i].right - bounds[i].right;
              divProperties.paddingBottom = expanded[i].bottom - bounds[i].bottom;

              task._textDivProperties.set(div, divProperties);

              continue;
            }

            var e = expanded[i],
                b = bounds[i];
            var m = b.m,
                c = m[0],
                s = m[1];
            var points = [[0, 0], [0, b.size[1]], [b.size[0], 0], b.size];
            var ts = new Float64Array(64);
            points.forEach(function (p, j) {
              var t = _util.Util.applyTransform(p, m);

              ts[j + 0] = c && (e.left - t[0]) / c;
              ts[j + 4] = s && (e.top - t[1]) / s;
              ts[j + 8] = c && (e.right - t[0]) / c;
              ts[j + 12] = s && (e.bottom - t[1]) / s;
              ts[j + 16] = s && (e.left - t[0]) / -s;
              ts[j + 20] = c && (e.top - t[1]) / c;
              ts[j + 24] = s && (e.right - t[0]) / -s;
              ts[j + 28] = c && (e.bottom - t[1]) / c;
              ts[j + 32] = c && (e.left - t[0]) / -c;
              ts[j + 36] = s && (e.top - t[1]) / -s;
              ts[j + 40] = c && (e.right - t[0]) / -c;
              ts[j + 44] = s && (e.bottom - t[1]) / -s;
              ts[j + 48] = s && (e.left - t[0]) / s;
              ts[j + 52] = c && (e.top - t[1]) / -c;
              ts[j + 56] = s && (e.right - t[0]) / s;
              ts[j + 60] = c && (e.bottom - t[1]) / -c;
            });
            var boxScale = 1 + Math.min(Math.abs(c), Math.abs(s));
            divProperties.paddingLeft = findPositiveMin(ts, 32, 16) / boxScale;
            divProperties.paddingTop = findPositiveMin(ts, 48, 16) / boxScale;
            divProperties.paddingRight = findPositiveMin(ts, 0, 16) / boxScale;
            divProperties.paddingBottom = findPositiveMin(ts, 16, 16) / boxScale;

            task._textDivProperties.set(div, divProperties);
          }
        }

        function expandBounds(width, height, boxes) {
          var bounds = boxes.map(function (box, i) {
            return {
              x1: box.left,
              y1: box.top,
              x2: box.right,
              y2: box.bottom,
              index: i,
              x1New: undefined,
              x2New: undefined
            };
          });
          expandBoundsLTR(width, bounds);
          var expanded = new Array(boxes.length);
          bounds.forEach(function (b) {
            var i = b.index;
            expanded[i] = {
              left: b.x1New,
              top: 0,
              right: b.x2New,
              bottom: 0
            };
          });
          boxes.map(function (box, i) {
            var e = expanded[i],
                b = bounds[i];
            b.x1 = box.top;
            b.y1 = width - e.right;
            b.x2 = box.bottom;
            b.y2 = width - e.left;
            b.index = i;
            b.x1New = undefined;
            b.x2New = undefined;
          });
          expandBoundsLTR(height, bounds);
          bounds.forEach(function (b) {
            var i = b.index;
            expanded[i].top = b.x1New;
            expanded[i].bottom = b.x2New;
          });
          return expanded;
        }

        function expandBoundsLTR(width, bounds) {
          bounds.sort(function (a, b) {
            return a.x1 - b.x1 || a.index - b.index;
          });
          var fakeBoundary = {
            x1: -Infinity,
            y1: -Infinity,
            x2: 0,
            y2: Infinity,
            index: -1,
            x1New: 0,
            x2New: 0
          };
          var horizon = [{
            start: -Infinity,
            end: Infinity,
            boundary: fakeBoundary
          }];
          bounds.forEach(function (boundary) {
            var i = 0;

            while (i < horizon.length && horizon[i].end <= boundary.y1) {
              i++;
            }

            var j = horizon.length - 1;

            while (j >= 0 && horizon[j].start >= boundary.y2) {
              j--;
            }

            var horizonPart, affectedBoundary;
            var q,
                k,
                maxXNew = -Infinity;

            for (q = i; q <= j; q++) {
              horizonPart = horizon[q];
              affectedBoundary = horizonPart.boundary;
              var xNew;

              if (affectedBoundary.x2 > boundary.x1) {
                xNew = affectedBoundary.index > boundary.index ? affectedBoundary.x1New : boundary.x1;
              } else if (affectedBoundary.x2New === undefined) {
                xNew = (affectedBoundary.x2 + boundary.x1) / 2;
              } else {
                xNew = affectedBoundary.x2New;
              }

              if (xNew > maxXNew) {
                maxXNew = xNew;
              }
            }

            boundary.x1New = maxXNew;

            for (q = i; q <= j; q++) {
              horizonPart = horizon[q];
              affectedBoundary = horizonPart.boundary;

              if (affectedBoundary.x2New === undefined) {
                if (affectedBoundary.x2 > boundary.x1) {
                  if (affectedBoundary.index > boundary.index) {
                    affectedBoundary.x2New = affectedBoundary.x2;
                  }
                } else {
                  affectedBoundary.x2New = maxXNew;
                }
              } else if (affectedBoundary.x2New > maxXNew) {
                affectedBoundary.x2New = Math.max(maxXNew, affectedBoundary.x2);
              }
            }

            var changedHorizon = [],
                lastBoundary = null;

            for (q = i; q <= j; q++) {
              horizonPart = horizon[q];
              affectedBoundary = horizonPart.boundary;
              var useBoundary = affectedBoundary.x2 > boundary.x2 ? affectedBoundary : boundary;

              if (lastBoundary === useBoundary) {
                changedHorizon[changedHorizon.length - 1].end = horizonPart.end;
              } else {
                changedHorizon.push({
                  start: horizonPart.start,
                  end: horizonPart.end,
                  boundary: useBoundary
                });
                lastBoundary = useBoundary;
              }
            }

            if (horizon[i].start < boundary.y1) {
              changedHorizon[0].start = boundary.y1;
              changedHorizon.unshift({
                start: horizon[i].start,
                end: boundary.y1,
                boundary: horizon[i].boundary
              });
            }

            if (boundary.y2 < horizon[j].end) {
              changedHorizon[changedHorizon.length - 1].end = boundary.y2;
              changedHorizon.push({
                start: boundary.y2,
                end: horizon[j].end,
                boundary: horizon[j].boundary
              });
            }

            for (q = i; q <= j; q++) {
              horizonPart = horizon[q];
              affectedBoundary = horizonPart.boundary;

              if (affectedBoundary.x2New !== undefined) {
                continue;
              }

              var used = false;

              for (k = i - 1; !used && k >= 0 && horizon[k].start >= affectedBoundary.y1; k--) {
                used = horizon[k].boundary === affectedBoundary;
              }

              for (k = j + 1; !used && k < horizon.length && horizon[k].end <= affectedBoundary.y2; k++) {
                used = horizon[k].boundary === affectedBoundary;
              }

              for (k = 0; !used && k < changedHorizon.length; k++) {
                used = changedHorizon[k].boundary === affectedBoundary;
              }

              if (!used) {
                affectedBoundary.x2New = maxXNew;
              }
            }

            Array.prototype.splice.apply(horizon, [i, j - i + 1].concat(changedHorizon));
          });
          horizon.forEach(function (horizonPart) {
            var affectedBoundary = horizonPart.boundary;

            if (affectedBoundary.x2New === undefined) {
              affectedBoundary.x2New = Math.max(width, affectedBoundary.x2);
            }
          });
        }

        function TextLayerRenderTask({
          textContent,
          textContentStream,
          container,
          viewport,
          textDivs,
          textContentItemsStr,
          enhanceTextSelection
        }) {
          this._textContent = textContent;
          this._textContentStream = textContentStream;
          this._container = container;
          this._viewport = viewport;
          this._textDivs = textDivs || [];
          this._textContentItemsStr = textContentItemsStr || [];
          this._enhanceTextSelection = !!enhanceTextSelection;
          this._fontInspectorEnabled = !!(globalThis.FontInspector && globalThis.FontInspector.enabled);
          this._reader = null;
          this._layoutTextLastFontSize = null;
          this._layoutTextLastFontFamily = null;
          this._layoutTextCtx = null;
          this._textDivProperties = new WeakMap();
          this._renderingDone = false;
          this._canceled = false;
          this._capability = (0, _util.createPromiseCapability)();
          this._renderTimer = null;
          this._bounds = [];

          this._capability.promise.finally(() => {
            if (this._layoutTextCtx) {
              this._layoutTextCtx.canvas.width = 0;
              this._layoutTextCtx.canvas.height = 0;
              this._layoutTextCtx = null;
            }
          }).catch(() => {});
        }

        TextLayerRenderTask.prototype = {
          get promise() {
            return this._capability.promise;
          },

          cancel: function TextLayer_cancel() {
            this._canceled = true;

            if (this._reader) {
              this._reader.cancel(new _util.AbortException("TextLayer task cancelled."));

              this._reader = null;
            }

            if (this._renderTimer !== null) {
              clearTimeout(this._renderTimer);
              this._renderTimer = null;
            }

            this._capability.reject(new Error("TextLayer task cancelled."));
          },

          _processItems(items, styleCache) {
            for (let i = 0, len = items.length; i < len; i++) {
              this._textContentItemsStr.push(items[i].str);

              appendText(this, items[i], styleCache);
            }
          },

          _layoutText(textDiv) {
            const textDivProperties = this._textDivProperties.get(textDiv);

            if (textDivProperties.isWhitespace) {
              return;
            }

            let transform = "";

            if (textDivProperties.canvasWidth !== 0) {
              const {
                fontSize,
                fontFamily
              } = textDiv.style;

              if (fontSize !== this._layoutTextLastFontSize || fontFamily !== this._layoutTextLastFontFamily) {
                this._layoutTextCtx.font = `${fontSize} ${fontFamily}`;
                this._layoutTextLastFontSize = fontSize;
                this._layoutTextLastFontFamily = fontFamily;
              }

              const {
                width
              } = this._layoutTextCtx.measureText(textDiv.textContent);

              if (width > 0) {
                textDivProperties.scale = textDivProperties.canvasWidth / width;
                transform = `scaleX(${textDivProperties.scale})`;
              }
            }

            if (textDivProperties.angle !== 0) {
              transform = `rotate(${textDivProperties.angle}deg) ${transform}`;
            }

            if (transform.length > 0) {
              if (this._enhanceTextSelection) {
                textDivProperties.originalTransform = transform;
              }

              textDiv.style.transform = transform;
            }

            this._textDivProperties.set(textDiv, textDivProperties);

            this._container.appendChild(textDiv);
          },

          _render: function TextLayer_render(timeout) {
            const capability = (0, _util.createPromiseCapability)();
            let styleCache = Object.create(null);
            const canvas = document.createElement("canvas");
            canvas.mozOpaque = true;
            this._layoutTextCtx = canvas.getContext("2d", {
              alpha: false
            });

            if (this._textContent) {
              const textItems = this._textContent.items;
              const textStyles = this._textContent.styles;

              this._processItems(textItems, textStyles);

              capability.resolve();
            } else if (this._textContentStream) {
              const pump = () => {
                this._reader.read().then(({
                  value,
                  done
                }) => {
                  if (done) {
                    capability.resolve();
                    return;
                  }

                  Object.assign(styleCache, value.styles);

                  this._processItems(value.items, styleCache);

                  pump();
                }, capability.reject);
              };

              this._reader = this._textContentStream.getReader();
              pump();
            } else {
              throw new Error('Neither "textContent" nor "textContentStream"' + " parameters specified.");
            }

            capability.promise.then(() => {
              styleCache = null;

              if (!timeout) {
                render(this);
              } else {
                this._renderTimer = setTimeout(() => {
                  render(this);
                  this._renderTimer = null;
                }, timeout);
              }
            }, this._capability.reject);
          },
          expandTextDivs: function TextLayer_expandTextDivs(expandDivs) {
            if (!this._enhanceTextSelection || !this._renderingDone) {
              return;
            }

            if (this._bounds !== null) {
              expand(this);
              this._bounds = null;
            }

            const transformBuf = [],
                  paddingBuf = [];

            for (var i = 0, ii = this._textDivs.length; i < ii; i++) {
              const div = this._textDivs[i];

              const divProps = this._textDivProperties.get(div);

              if (divProps.isWhitespace) {
                continue;
              }

              if (expandDivs) {
                transformBuf.length = 0;
                paddingBuf.length = 0;

                if (divProps.originalTransform) {
                  transformBuf.push(divProps.originalTransform);
                }

                if (divProps.paddingTop > 0) {
                  paddingBuf.push(`${divProps.paddingTop}px`);
                  transformBuf.push(`translateY(${-divProps.paddingTop}px)`);
                } else {
                  paddingBuf.push(0);
                }

                if (divProps.paddingRight > 0) {
                  paddingBuf.push(`${divProps.paddingRight / divProps.scale}px`);
                } else {
                  paddingBuf.push(0);
                }

                if (divProps.paddingBottom > 0) {
                  paddingBuf.push(`${divProps.paddingBottom}px`);
                } else {
                  paddingBuf.push(0);
                }

                if (divProps.paddingLeft > 0) {
                  paddingBuf.push(`${divProps.paddingLeft / divProps.scale}px`);
                  transformBuf.push(`translateX(${-divProps.paddingLeft / divProps.scale}px)`);
                } else {
                  paddingBuf.push(0);
                }

                div.style.padding = paddingBuf.join(" ");

                if (transformBuf.length) {
                  div.style.transform = transformBuf.join(" ");
                }
              } else {
                div.style.padding = null;
                div.style.transform = divProps.originalTransform;
              }
            }
          }
        };

        function renderTextLayer(renderParameters) {
          var task = new TextLayerRenderTask({
            textContent: renderParameters.textContent,
            textContentStream: renderParameters.textContentStream,
            container: renderParameters.container,
            viewport: renderParameters.viewport,
            textDivs: renderParameters.textDivs,
            textContentItemsStr: renderParameters.textContentItemsStr,
            enhanceTextSelection: renderParameters.enhanceTextSelection
          });

          task._render(renderParameters.timeout);

          return task;
        }

        return renderTextLayer;
      }();

      exports.renderTextLayer = renderTextLayer;
      /***/
    },
    /* 18 */

    /***/
    function (module, exports, __w_pdfjs_require__) {
      "use strict";

      Object.defineProperty(exports, "__esModule", {
        value: true
      });
      exports.SVGGraphics = void 0;

      var _util = __w_pdfjs_require__(2);

      var _display_utils = __w_pdfjs_require__(1);

      var _is_node = __w_pdfjs_require__(4);

      let SVGGraphics = function () {
        throw new Error("Not implemented: SVGGraphics");
      };

      exports.SVGGraphics = SVGGraphics;
      {
        const SVG_DEFAULTS = {
          fontStyle: "normal",
          fontWeight: "normal",
          fillColor: "#000000"
        };
        const XML_NS = "http://www.w3.org/XML/1998/namespace";
        const XLINK_NS = "http://www.w3.org/1999/xlink";
        const LINE_CAP_STYLES = ["butt", "round", "square"];
        const LINE_JOIN_STYLES = ["miter", "round", "bevel"];

        const convertImgDataToPng = function () {
          const PNG_HEADER = new Uint8Array([0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a]);
          const CHUNK_WRAPPER_SIZE = 12;
          const crcTable = new Int32Array(256);

          for (let i = 0; i < 256; i++) {
            let c = i;

            for (let h = 0; h < 8; h++) {
              if (c & 1) {
                c = 0xedb88320 ^ c >> 1 & 0x7fffffff;
              } else {
                c = c >> 1 & 0x7fffffff;
              }
            }

            crcTable[i] = c;
          }

          function crc32(data, start, end) {
            let crc = -1;

            for (let i = start; i < end; i++) {
              const a = (crc ^ data[i]) & 0xff;
              const b = crcTable[a];
              crc = crc >>> 8 ^ b;
            }

            return crc ^ -1;
          }

          function writePngChunk(type, body, data, offset) {
            let p = offset;
            const len = body.length;
            data[p] = len >> 24 & 0xff;
            data[p + 1] = len >> 16 & 0xff;
            data[p + 2] = len >> 8 & 0xff;
            data[p + 3] = len & 0xff;
            p += 4;
            data[p] = type.charCodeAt(0) & 0xff;
            data[p + 1] = type.charCodeAt(1) & 0xff;
            data[p + 2] = type.charCodeAt(2) & 0xff;
            data[p + 3] = type.charCodeAt(3) & 0xff;
            p += 4;
            data.set(body, p);
            p += body.length;
            const crc = crc32(data, offset + 4, p);
            data[p] = crc >> 24 & 0xff;
            data[p + 1] = crc >> 16 & 0xff;
            data[p + 2] = crc >> 8 & 0xff;
            data[p + 3] = crc & 0xff;
          }

          function adler32(data, start, end) {
            let a = 1;
            let b = 0;

            for (let i = start; i < end; ++i) {
              a = (a + (data[i] & 0xff)) % 65521;
              b = (b + a) % 65521;
            }

            return b << 16 | a;
          }

          function deflateSync(literals) {
            if (!_is_node.isNodeJS) {
              return deflateSyncUncompressed(literals);
            }

            try {
              let input;

              if (parseInt(process.versions.node) >= 8) {
                input = literals;
              } else {
                input = Buffer.from(literals);
              }

              const output = __webpack_require__(148).deflateSync(input, {
                level: 9
              });

              return output instanceof Uint8Array ? output : new Uint8Array(output);
            } catch (e) {
              (0, _util.warn)("Not compressing PNG because zlib.deflateSync is unavailable: " + e);
            }

            return deflateSyncUncompressed(literals);
          }

          function deflateSyncUncompressed(literals) {
            let len = literals.length;
            const maxBlockLength = 0xffff;
            const deflateBlocks = Math.ceil(len / maxBlockLength);
            const idat = new Uint8Array(2 + len + deflateBlocks * 5 + 4);
            let pi = 0;
            idat[pi++] = 0x78;
            idat[pi++] = 0x9c;
            let pos = 0;

            while (len > maxBlockLength) {
              idat[pi++] = 0x00;
              idat[pi++] = 0xff;
              idat[pi++] = 0xff;
              idat[pi++] = 0x00;
              idat[pi++] = 0x00;
              idat.set(literals.subarray(pos, pos + maxBlockLength), pi);
              pi += maxBlockLength;
              pos += maxBlockLength;
              len -= maxBlockLength;
            }

            idat[pi++] = 0x01;
            idat[pi++] = len & 0xff;
            idat[pi++] = len >> 8 & 0xff;
            idat[pi++] = ~len & 0xffff & 0xff;
            idat[pi++] = (~len & 0xffff) >> 8 & 0xff;
            idat.set(literals.subarray(pos), pi);
            pi += literals.length - pos;
            const adler = adler32(literals, 0, literals.length);
            idat[pi++] = adler >> 24 & 0xff;
            idat[pi++] = adler >> 16 & 0xff;
            idat[pi++] = adler >> 8 & 0xff;
            idat[pi++] = adler & 0xff;
            return idat;
          }

          function encode(imgData, kind, forceDataSchema, isMask) {
            const width = imgData.width;
            const height = imgData.height;
            let bitDepth, colorType, lineSize;
            const bytes = imgData.data;

            switch (kind) {
              case _util.ImageKind.GRAYSCALE_1BPP:
                colorType = 0;
                bitDepth = 1;
                lineSize = width + 7 >> 3;
                break;

              case _util.ImageKind.RGB_24BPP:
                colorType = 2;
                bitDepth = 8;
                lineSize = width * 3;
                break;

              case _util.ImageKind.RGBA_32BPP:
                colorType = 6;
                bitDepth = 8;
                lineSize = width * 4;
                break;

              default:
                throw new Error("invalid format");
            }

            const literals = new Uint8Array((1 + lineSize) * height);
            let offsetLiterals = 0,
                offsetBytes = 0;

            for (let y = 0; y < height; ++y) {
              literals[offsetLiterals++] = 0;
              literals.set(bytes.subarray(offsetBytes, offsetBytes + lineSize), offsetLiterals);
              offsetBytes += lineSize;
              offsetLiterals += lineSize;
            }

            if (kind === _util.ImageKind.GRAYSCALE_1BPP && isMask) {
              offsetLiterals = 0;

              for (let y = 0; y < height; y++) {
                offsetLiterals++;

                for (let i = 0; i < lineSize; i++) {
                  literals[offsetLiterals++] ^= 0xff;
                }
              }
            }

            const ihdr = new Uint8Array([width >> 24 & 0xff, width >> 16 & 0xff, width >> 8 & 0xff, width & 0xff, height >> 24 & 0xff, height >> 16 & 0xff, height >> 8 & 0xff, height & 0xff, bitDepth, colorType, 0x00, 0x00, 0x00]);
            const idat = deflateSync(literals);
            const pngLength = PNG_HEADER.length + CHUNK_WRAPPER_SIZE * 3 + ihdr.length + idat.length;
            const data = new Uint8Array(pngLength);
            let offset = 0;
            data.set(PNG_HEADER, offset);
            offset += PNG_HEADER.length;
            writePngChunk("IHDR", ihdr, data, offset);
            offset += CHUNK_WRAPPER_SIZE + ihdr.length;
            writePngChunk("IDATA", idat, data, offset);
            offset += CHUNK_WRAPPER_SIZE + idat.length;
            writePngChunk("IEND", new Uint8Array(0), data, offset);
            return (0, _util.createObjectURL)(data, "image/png", forceDataSchema);
          }

          return function convertImgDataToPng(imgData, forceDataSchema, isMask) {
            const kind = imgData.kind === undefined ? _util.ImageKind.GRAYSCALE_1BPP : imgData.kind;
            return encode(imgData, kind, forceDataSchema, isMask);
          };
        }();

        class SVGExtraState {
          constructor() {
            this.fontSizeScale = 1;
            this.fontWeight = SVG_DEFAULTS.fontWeight;
            this.fontSize = 0;
            this.textMatrix = _util.IDENTITY_MATRIX;
            this.fontMatrix = _util.FONT_IDENTITY_MATRIX;
            this.leading = 0;
            this.textRenderingMode = _util.TextRenderingMode.FILL;
            this.textMatrixScale = 1;
            this.x = 0;
            this.y = 0;
            this.lineX = 0;
            this.lineY = 0;
            this.charSpacing = 0;
            this.wordSpacing = 0;
            this.textHScale = 1;
            this.textRise = 0;
            this.fillColor = SVG_DEFAULTS.fillColor;
            this.strokeColor = "#000000";
            this.fillAlpha = 1;
            this.strokeAlpha = 1;
            this.lineWidth = 1;
            this.lineJoin = "";
            this.lineCap = "";
            this.miterLimit = 0;
            this.dashArray = [];
            this.dashPhase = 0;
            this.dependencies = [];
            this.activeClipUrl = null;
            this.clipGroup = null;
            this.maskId = "";
          }

          clone() {
            return Object.create(this);
          }

          setCurrentPoint(x, y) {
            this.x = x;
            this.y = y;
          }

        }

        function opListToTree(opList) {
          let opTree = [];
          const tmp = [];

          for (const opListElement of opList) {
            if (opListElement.fn === "save") {
              opTree.push({
                fnId: 92,
                fn: "group",
                items: []
              });
              tmp.push(opTree);
              opTree = opTree[opTree.length - 1].items;
              continue;
            }

            if (opListElement.fn === "restore") {
              opTree = tmp.pop();
            } else {
              opTree.push(opListElement);
            }
          }

          return opTree;
        }

        function pf(value) {
          if (Number.isInteger(value)) {
            return value.toString();
          }

          const s = value.toFixed(10);
          let i = s.length - 1;

          if (s[i] !== "0") {
            return s;
          }

          do {
            i--;
          } while (s[i] === "0");

          return s.substring(0, s[i] === "." ? i : i + 1);
        }

        function pm(m) {
          if (m[4] === 0 && m[5] === 0) {
            if (m[1] === 0 && m[2] === 0) {
              if (m[0] === 1 && m[3] === 1) {
                return "";
              }

              return `scale(${pf(m[0])} ${pf(m[3])})`;
            }

            if (m[0] === m[3] && m[1] === -m[2]) {
              const a = Math.acos(m[0]) * 180 / Math.PI;
              return `rotate(${pf(a)})`;
            }
          } else {
            if (m[0] === 1 && m[1] === 0 && m[2] === 0 && m[3] === 1) {
              return `translate(${pf(m[4])} ${pf(m[5])})`;
            }
          }

          return `matrix(${pf(m[0])} ${pf(m[1])} ${pf(m[2])} ${pf(m[3])} ${pf(m[4])} ` + `${pf(m[5])})`;
        }

        let clipCount = 0;
        let maskCount = 0;
        let shadingCount = 0;
        exports.SVGGraphics = SVGGraphics = class SVGGraphics {
          constructor(commonObjs, objs, forceDataSchema = false) {
            this.svgFactory = new _display_utils.DOMSVGFactory();
            this.current = new SVGExtraState();
            this.transformMatrix = _util.IDENTITY_MATRIX;
            this.transformStack = [];
            this.extraStack = [];
            this.commonObjs = commonObjs;
            this.objs = objs;
            this.pendingClip = null;
            this.pendingEOFill = false;
            this.embedFonts = false;
            this.embeddedFonts = Object.create(null);
            this.cssStyle = null;
            this.forceDataSchema = !!forceDataSchema;
            this._operatorIdMapping = [];

            for (const op in _util.OPS) {
              this._operatorIdMapping[_util.OPS[op]] = op;
            }
          }

          save() {
            this.transformStack.push(this.transformMatrix);
            const old = this.current;
            this.extraStack.push(old);
            this.current = old.clone();
          }

          restore() {
            this.transformMatrix = this.transformStack.pop();
            this.current = this.extraStack.pop();
            this.pendingClip = null;
            this.tgrp = null;
          }

          group(items) {
            this.save();
            this.executeOpTree(items);
            this.restore();
          }

          loadDependencies(operatorList) {
            const fnArray = operatorList.fnArray;
            const argsArray = operatorList.argsArray;

            for (let i = 0, ii = fnArray.length; i < ii; i++) {
              if (fnArray[i] !== _util.OPS.dependency) {
                continue;
              }

              for (const obj of argsArray[i]) {
                const objsPool = obj.startsWith("g_") ? this.commonObjs : this.objs;
                const promise = new Promise(resolve => {
                  objsPool.get(obj, resolve);
                });
                this.current.dependencies.push(promise);
              }
            }

            return Promise.all(this.current.dependencies);
          }

          transform(a, b, c, d, e, f) {
            const transformMatrix = [a, b, c, d, e, f];
            this.transformMatrix = _util.Util.transform(this.transformMatrix, transformMatrix);
            this.tgrp = null;
          }

          getSVG(operatorList, viewport) {
            this.viewport = viewport;

            const svgElement = this._initialize(viewport);

            return this.loadDependencies(operatorList).then(() => {
              this.transformMatrix = _util.IDENTITY_MATRIX;
              this.executeOpTree(this.convertOpList(operatorList));
              return svgElement;
            });
          }

          convertOpList(operatorList) {
            const operatorIdMapping = this._operatorIdMapping;
            const argsArray = operatorList.argsArray;
            const fnArray = operatorList.fnArray;
            const opList = [];

            for (let i = 0, ii = fnArray.length; i < ii; i++) {
              const fnId = fnArray[i];
              opList.push({
                fnId,
                fn: operatorIdMapping[fnId],
                args: argsArray[i]
              });
            }

            return opListToTree(opList);
          }

          executeOpTree(opTree) {
            for (const opTreeElement of opTree) {
              const fn = opTreeElement.fn;
              const fnId = opTreeElement.fnId;
              const args = opTreeElement.args;

              switch (fnId | 0) {
                case _util.OPS.beginText:
                  this.beginText();
                  break;

                case _util.OPS.dependency:
                  break;

                case _util.OPS.setLeading:
                  this.setLeading(args);
                  break;

                case _util.OPS.setLeadingMoveText:
                  this.setLeadingMoveText(args[0], args[1]);
                  break;

                case _util.OPS.setFont:
                  this.setFont(args);
                  break;

                case _util.OPS.showText:
                  this.showText(args[0]);
                  break;

                case _util.OPS.showSpacedText:
                  this.showText(args[0]);
                  break;

                case _util.OPS.endText:
                  this.endText();
                  break;

                case _util.OPS.moveText:
                  this.moveText(args[0], args[1]);
                  break;

                case _util.OPS.setCharSpacing:
                  this.setCharSpacing(args[0]);
                  break;

                case _util.OPS.setWordSpacing:
                  this.setWordSpacing(args[0]);
                  break;

                case _util.OPS.setHScale:
                  this.setHScale(args[0]);
                  break;

                case _util.OPS.setTextMatrix:
                  this.setTextMatrix(args[0], args[1], args[2], args[3], args[4], args[5]);
                  break;

                case _util.OPS.setTextRise:
                  this.setTextRise(args[0]);
                  break;

                case _util.OPS.setTextRenderingMode:
                  this.setTextRenderingMode(args[0]);
                  break;

                case _util.OPS.setLineWidth:
                  this.setLineWidth(args[0]);
                  break;

                case _util.OPS.setLineJoin:
                  this.setLineJoin(args[0]);
                  break;

                case _util.OPS.setLineCap:
                  this.setLineCap(args[0]);
                  break;

                case _util.OPS.setMiterLimit:
                  this.setMiterLimit(args[0]);
                  break;

                case _util.OPS.setFillRGBColor:
                  this.setFillRGBColor(args[0], args[1], args[2]);
                  break;

                case _util.OPS.setStrokeRGBColor:
                  this.setStrokeRGBColor(args[0], args[1], args[2]);
                  break;

                case _util.OPS.setStrokeColorN:
                  this.setStrokeColorN(args);
                  break;

                case _util.OPS.setFillColorN:
                  this.setFillColorN(args);
                  break;

                case _util.OPS.shadingFill:
                  this.shadingFill(args[0]);
                  break;

                case _util.OPS.setDash:
                  this.setDash(args[0], args[1]);
                  break;

                case _util.OPS.setRenderingIntent:
                  this.setRenderingIntent(args[0]);
                  break;

                case _util.OPS.setFlatness:
                  this.setFlatness(args[0]);
                  break;

                case _util.OPS.setGState:
                  this.setGState(args[0]);
                  break;

                case _util.OPS.fill:
                  this.fill();
                  break;

                case _util.OPS.eoFill:
                  this.eoFill();
                  break;

                case _util.OPS.stroke:
                  this.stroke();
                  break;

                case _util.OPS.fillStroke:
                  this.fillStroke();
                  break;

                case _util.OPS.eoFillStroke:
                  this.eoFillStroke();
                  break;

                case _util.OPS.clip:
                  this.clip("nonzero");
                  break;

                case _util.OPS.eoClip:
                  this.clip("evenodd");
                  break;

                case _util.OPS.paintSolidColorImageMask:
                  this.paintSolidColorImageMask();
                  break;

                case _util.OPS.paintImageXObject:
                  this.paintImageXObject(args[0]);
                  break;

                case _util.OPS.paintInlineImageXObject:
                  this.paintInlineImageXObject(args[0]);
                  break;

                case _util.OPS.paintImageMaskXObject:
                  this.paintImageMaskXObject(args[0]);
                  break;

                case _util.OPS.paintFormXObjectBegin:
                  this.paintFormXObjectBegin(args[0], args[1]);
                  break;

                case _util.OPS.paintFormXObjectEnd:
                  this.paintFormXObjectEnd();
                  break;

                case _util.OPS.closePath:
                  this.closePath();
                  break;

                case _util.OPS.closeStroke:
                  this.closeStroke();
                  break;

                case _util.OPS.closeFillStroke:
                  this.closeFillStroke();
                  break;

                case _util.OPS.closeEOFillStroke:
                  this.closeEOFillStroke();
                  break;

                case _util.OPS.nextLine:
                  this.nextLine();
                  break;

                case _util.OPS.transform:
                  this.transform(args[0], args[1], args[2], args[3], args[4], args[5]);
                  break;

                case _util.OPS.constructPath:
                  this.constructPath(args[0], args[1]);
                  break;

                case _util.OPS.endPath:
                  this.endPath();
                  break;

                case 92:
                  this.group(opTreeElement.items);
                  break;

                default:
                  (0, _util.warn)(`Unimplemented operator ${fn}`);
                  break;
              }
            }
          }

          setWordSpacing(wordSpacing) {
            this.current.wordSpacing = wordSpacing;
          }

          setCharSpacing(charSpacing) {
            this.current.charSpacing = charSpacing;
          }

          nextLine() {
            this.moveText(0, this.current.leading);
          }

          setTextMatrix(a, b, c, d, e, f) {
            const current = this.current;
            current.textMatrix = current.lineMatrix = [a, b, c, d, e, f];
            current.textMatrixScale = Math.sqrt(a * a + b * b);
            current.x = current.lineX = 0;
            current.y = current.lineY = 0;
            current.xcoords = [];
            current.ycoords = [];
            current.tspan = this.svgFactory.createElement("svg:tspan");
            current.tspan.setAttributeNS(null, "font-family", current.fontFamily);
            current.tspan.setAttributeNS(null, "font-size", `${pf(current.fontSize)}px`);
            current.tspan.setAttributeNS(null, "y", pf(-current.y));
            current.txtElement = this.svgFactory.createElement("svg:text");
            current.txtElement.appendChild(current.tspan);
          }

          beginText() {
            const current = this.current;
            current.x = current.lineX = 0;
            current.y = current.lineY = 0;
            current.textMatrix = _util.IDENTITY_MATRIX;
            current.lineMatrix = _util.IDENTITY_MATRIX;
            current.textMatrixScale = 1;
            current.tspan = this.svgFactory.createElement("svg:tspan");
            current.txtElement = this.svgFactory.createElement("svg:text");
            current.txtgrp = this.svgFactory.createElement("svg:g");
            current.xcoords = [];
            current.ycoords = [];
          }

          moveText(x, y) {
            const current = this.current;
            current.x = current.lineX += x;
            current.y = current.lineY += y;
            current.xcoords = [];
            current.ycoords = [];
            current.tspan = this.svgFactory.createElement("svg:tspan");
            current.tspan.setAttributeNS(null, "font-family", current.fontFamily);
            current.tspan.setAttributeNS(null, "font-size", `${pf(current.fontSize)}px`);
            current.tspan.setAttributeNS(null, "y", pf(-current.y));
          }

          showText(glyphs) {
            const current = this.current;
            const font = current.font;
            const fontSize = current.fontSize;

            if (fontSize === 0) {
              return;
            }

            const fontSizeScale = current.fontSizeScale;
            const charSpacing = current.charSpacing;
            const wordSpacing = current.wordSpacing;
            const fontDirection = current.fontDirection;
            const textHScale = current.textHScale * fontDirection;
            const vertical = font.vertical;
            const spacingDir = vertical ? 1 : -1;
            const defaultVMetrics = font.defaultVMetrics;
            const widthAdvanceScale = fontSize * current.fontMatrix[0];
            let x = 0;

            for (const glyph of glyphs) {
              if (glyph === null) {
                x += fontDirection * wordSpacing;
                continue;
              } else if ((0, _util.isNum)(glyph)) {
                x += spacingDir * glyph * fontSize / 1000;
                continue;
              }

              const spacing = (glyph.isSpace ? wordSpacing : 0) + charSpacing;
              const character = glyph.fontChar;
              let scaledX, scaledY;
              let width = glyph.width;

              if (vertical) {
                let vx;
                const vmetric = glyph.vmetric || defaultVMetrics;
                vx = glyph.vmetric ? vmetric[1] : width * 0.5;
                vx = -vx * widthAdvanceScale;
                const vy = vmetric[2] * widthAdvanceScale;
                width = vmetric ? -vmetric[0] : width;
                scaledX = vx / fontSizeScale;
                scaledY = (x + vy) / fontSizeScale;
              } else {
                scaledX = x / fontSizeScale;
                scaledY = 0;
              }

              if (glyph.isInFont || font.missingFile) {
                current.xcoords.push(current.x + scaledX);

                if (vertical) {
                  current.ycoords.push(-current.y + scaledY);
                }

                current.tspan.textContent += character;
              } else {}

              let charWidth;

              if (vertical) {
                charWidth = width * widthAdvanceScale - spacing * fontDirection;
              } else {
                charWidth = width * widthAdvanceScale + spacing * fontDirection;
              }

              x += charWidth;
            }

            current.tspan.setAttributeNS(null, "x", current.xcoords.map(pf).join(" "));

            if (vertical) {
              current.tspan.setAttributeNS(null, "y", current.ycoords.map(pf).join(" "));
            } else {
              current.tspan.setAttributeNS(null, "y", pf(-current.y));
            }

            if (vertical) {
              current.y -= x;
            } else {
              current.x += x * textHScale;
            }

            current.tspan.setAttributeNS(null, "font-family", current.fontFamily);
            current.tspan.setAttributeNS(null, "font-size", `${pf(current.fontSize)}px`);

            if (current.fontStyle !== SVG_DEFAULTS.fontStyle) {
              current.tspan.setAttributeNS(null, "font-style", current.fontStyle);
            }

            if (current.fontWeight !== SVG_DEFAULTS.fontWeight) {
              current.tspan.setAttributeNS(null, "font-weight", current.fontWeight);
            }

            const fillStrokeMode = current.textRenderingMode & _util.TextRenderingMode.FILL_STROKE_MASK;

            if (fillStrokeMode === _util.TextRenderingMode.FILL || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) {
              if (current.fillColor !== SVG_DEFAULTS.fillColor) {
                current.tspan.setAttributeNS(null, "fill", current.fillColor);
              }

              if (current.fillAlpha < 1) {
                current.tspan.setAttributeNS(null, "fill-opacity", current.fillAlpha);
              }
            } else if (current.textRenderingMode === _util.TextRenderingMode.ADD_TO_PATH) {
              current.tspan.setAttributeNS(null, "fill", "transparent");
            } else {
              current.tspan.setAttributeNS(null, "fill", "none");
            }

            if (fillStrokeMode === _util.TextRenderingMode.STROKE || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) {
              const lineWidthScale = 1 / (current.textMatrixScale || 1);

              this._setStrokeAttributes(current.tspan, lineWidthScale);
            }

            let textMatrix = current.textMatrix;

            if (current.textRise !== 0) {
              textMatrix = textMatrix.slice();
              textMatrix[5] += current.textRise;
            }

            current.txtElement.setAttributeNS(null, "transform", `${pm(textMatrix)} scale(${pf(textHScale)}, -1)`);
            current.txtElement.setAttributeNS(XML_NS, "xml:space", "preserve");
            current.txtElement.appendChild(current.tspan);
            current.txtgrp.appendChild(current.txtElement);

            this._ensureTransformGroup().appendChild(current.txtElement);
          }

          setLeadingMoveText(x, y) {
            this.setLeading(-y);
            this.moveText(x, y);
          }

          addFontStyle(fontObj) {
            if (!fontObj.data) {
              throw new Error("addFontStyle: No font data available, " + 'ensure that the "fontExtraProperties" API parameter is set.');
            }

            if (!this.cssStyle) {
              this.cssStyle = this.svgFactory.createElement("svg:style");
              this.cssStyle.setAttributeNS(null, "type", "text/css");
              this.defs.appendChild(this.cssStyle);
            }

            const url = (0, _util.createObjectURL)(fontObj.data, fontObj.mimetype, this.forceDataSchema);
            this.cssStyle.textContent += `@font-face { font-family: "${fontObj.loadedName}";` + ` src: url(${url}); }\n`;
          }

          setFont(details) {
            const current = this.current;
            const fontObj = this.commonObjs.get(details[0]);
            let size = details[1];
            current.font = fontObj;

            if (this.embedFonts && !fontObj.missingFile && !this.embeddedFonts[fontObj.loadedName]) {
              this.addFontStyle(fontObj);
              this.embeddedFonts[fontObj.loadedName] = fontObj;
            }

            current.fontMatrix = fontObj.fontMatrix ? fontObj.fontMatrix : _util.FONT_IDENTITY_MATRIX;
            let bold = "normal";

            if (fontObj.black) {
              bold = "900";
            } else if (fontObj.bold) {
              bold = "bold";
            }

            const italic = fontObj.italic ? "italic" : "normal";

            if (size < 0) {
              size = -size;
              current.fontDirection = -1;
            } else {
              current.fontDirection = 1;
            }

            current.fontSize = size;
            current.fontFamily = fontObj.loadedName;
            current.fontWeight = bold;
            current.fontStyle = italic;
            current.tspan = this.svgFactory.createElement("svg:tspan");
            current.tspan.setAttributeNS(null, "y", pf(-current.y));
            current.xcoords = [];
            current.ycoords = [];
          }

          endText() {
            const current = this.current;

            if (current.textRenderingMode & _util.TextRenderingMode.ADD_TO_PATH_FLAG && current.txtElement && current.txtElement.hasChildNodes()) {
              current.element = current.txtElement;
              this.clip("nonzero");
              this.endPath();
            }
          }

          setLineWidth(width) {
            if (width > 0) {
              this.current.lineWidth = width;
            }
          }

          setLineCap(style) {
            this.current.lineCap = LINE_CAP_STYLES[style];
          }

          setLineJoin(style) {
            this.current.lineJoin = LINE_JOIN_STYLES[style];
          }

          setMiterLimit(limit) {
            this.current.miterLimit = limit;
          }

          setStrokeAlpha(strokeAlpha) {
            this.current.strokeAlpha = strokeAlpha;
          }

          setStrokeRGBColor(r, g, b) {
            this.current.strokeColor = _util.Util.makeCssRgb(r, g, b);
          }

          setFillAlpha(fillAlpha) {
            this.current.fillAlpha = fillAlpha;
          }

          setFillRGBColor(r, g, b) {
            this.current.fillColor = _util.Util.makeCssRgb(r, g, b);
            this.current.tspan = this.svgFactory.createElement("svg:tspan");
            this.current.xcoords = [];
            this.current.ycoords = [];
          }

          setStrokeColorN(args) {
            this.current.strokeColor = this._makeColorN_Pattern(args);
          }

          setFillColorN(args) {
            this.current.fillColor = this._makeColorN_Pattern(args);
          }

          shadingFill(args) {
            const width = this.viewport.width;
            const height = this.viewport.height;

            const inv = _util.Util.inverseTransform(this.transformMatrix);

            const bl = _util.Util.applyTransform([0, 0], inv);

            const br = _util.Util.applyTransform([0, height], inv);

            const ul = _util.Util.applyTransform([width, 0], inv);

            const ur = _util.Util.applyTransform([width, height], inv);

            const x0 = Math.min(bl[0], br[0], ul[0], ur[0]);
            const y0 = Math.min(bl[1], br[1], ul[1], ur[1]);
            const x1 = Math.max(bl[0], br[0], ul[0], ur[0]);
            const y1 = Math.max(bl[1], br[1], ul[1], ur[1]);
            const rect = this.svgFactory.createElement("svg:rect");
            rect.setAttributeNS(null, "x", x0);
            rect.setAttributeNS(null, "y", y0);
            rect.setAttributeNS(null, "width", x1 - x0);
            rect.setAttributeNS(null, "height", y1 - y0);
            rect.setAttributeNS(null, "fill", this._makeShadingPattern(args));

            if (this.current.fillAlpha < 1) {
              rect.setAttributeNS(null, "fill-opacity", this.current.fillAlpha);
            }

            this._ensureTransformGroup().appendChild(rect);
          }

          _makeColorN_Pattern(args) {
            if (args[0] === "TilingPattern") {
              return this._makeTilingPattern(args);
            }

            return this._makeShadingPattern(args);
          }

          _makeTilingPattern(args) {
            const color = args[1];
            const operatorList = args[2];
            const matrix = args[3] || _util.IDENTITY_MATRIX;
            const [x0, y0, x1, y1] = args[4];
            const xstep = args[5];
            const ystep = args[6];
            const paintType = args[7];
            const tilingId = `shading${shadingCount++}`;

            const [tx0, ty0] = _util.Util.applyTransform([x0, y0], matrix);

            const [tx1, ty1] = _util.Util.applyTransform([x1, y1], matrix);

            const [xscale, yscale] = _util.Util.singularValueDecompose2dScale(matrix);

            const txstep = xstep * xscale;
            const tystep = ystep * yscale;
            const tiling = this.svgFactory.createElement("svg:pattern");
            tiling.setAttributeNS(null, "id", tilingId);
            tiling.setAttributeNS(null, "patternUnits", "userSpaceOnUse");
            tiling.setAttributeNS(null, "width", txstep);
            tiling.setAttributeNS(null, "height", tystep);
            tiling.setAttributeNS(null, "x", `${tx0}`);
            tiling.setAttributeNS(null, "y", `${ty0}`);
            const svg = this.svg;
            const transformMatrix = this.transformMatrix;
            const fillColor = this.current.fillColor;
            const strokeColor = this.current.strokeColor;
            const bbox = this.svgFactory.create(tx1 - tx0, ty1 - ty0);
            this.svg = bbox;
            this.transformMatrix = matrix;

            if (paintType === 2) {
              const cssColor = _util.Util.makeCssRgb(...color);

              this.current.fillColor = cssColor;
              this.current.strokeColor = cssColor;
            }

            this.executeOpTree(this.convertOpList(operatorList));
            this.svg = svg;
            this.transformMatrix = transformMatrix;
            this.current.fillColor = fillColor;
            this.current.strokeColor = strokeColor;
            tiling.appendChild(bbox.childNodes[0]);
            this.defs.appendChild(tiling);
            return `url(#${tilingId})`;
          }

          _makeShadingPattern(args) {
            switch (args[0]) {
              case "RadialAxial":
                const shadingId = `shading${shadingCount++}`;
                const colorStops = args[3];
                let gradient;

                switch (args[1]) {
                  case "axial":
                    const point0 = args[4];
                    const point1 = args[5];
                    gradient = this.svgFactory.createElement("svg:linearGradient");
                    gradient.setAttributeNS(null, "id", shadingId);
                    gradient.setAttributeNS(null, "gradientUnits", "userSpaceOnUse");
                    gradient.setAttributeNS(null, "x1", point0[0]);
                    gradient.setAttributeNS(null, "y1", point0[1]);
                    gradient.setAttributeNS(null, "x2", point1[0]);
                    gradient.setAttributeNS(null, "y2", point1[1]);
                    break;

                  case "radial":
                    const focalPoint = args[4];
                    const circlePoint = args[5];
                    const focalRadius = args[6];
                    const circleRadius = args[7];
                    gradient = this.svgFactory.createElement("svg:radialGradient");
                    gradient.setAttributeNS(null, "id", shadingId);
                    gradient.setAttributeNS(null, "gradientUnits", "userSpaceOnUse");
                    gradient.setAttributeNS(null, "cx", circlePoint[0]);
                    gradient.setAttributeNS(null, "cy", circlePoint[1]);
                    gradient.setAttributeNS(null, "r", circleRadius);
                    gradient.setAttributeNS(null, "fx", focalPoint[0]);
                    gradient.setAttributeNS(null, "fy", focalPoint[1]);
                    gradient.setAttributeNS(null, "fr", focalRadius);
                    break;

                  default:
                    throw new Error(`Unknown RadialAxial type: ${args[1]}`);
                }

                for (const colorStop of colorStops) {
                  const stop = this.svgFactory.createElement("svg:stop");
                  stop.setAttributeNS(null, "offset", colorStop[0]);
                  stop.setAttributeNS(null, "stop-color", colorStop[1]);
                  gradient.appendChild(stop);
                }

                this.defs.appendChild(gradient);
                return `url(#${shadingId})`;

              case "Mesh":
                (0, _util.warn)("Unimplemented pattern Mesh");
                return null;

              case "Dummy":
                return "hotpink";

              default:
                throw new Error(`Unknown IR type: ${args[0]}`);
            }
          }

          setDash(dashArray, dashPhase) {
            this.current.dashArray = dashArray;
            this.current.dashPhase = dashPhase;
          }

          constructPath(ops, args) {
            const current = this.current;
            let x = current.x,
                y = current.y;
            let d = [];
            let j = 0;

            for (const op of ops) {
              switch (op | 0) {
                case _util.OPS.rectangle:
                  x = args[j++];
                  y = args[j++];
                  const width = args[j++];
                  const height = args[j++];
                  const xw = x + width;
                  const yh = y + height;
                  d.push("M", pf(x), pf(y), "L", pf(xw), pf(y), "L", pf(xw), pf(yh), "L", pf(x), pf(yh), "Z");
                  break;

                case _util.OPS.moveTo:
                  x = args[j++];
                  y = args[j++];
                  d.push("M", pf(x), pf(y));
                  break;

                case _util.OPS.lineTo:
                  x = args[j++];
                  y = args[j++];
                  d.push("L", pf(x), pf(y));
                  break;

                case _util.OPS.curveTo:
                  x = args[j + 4];
                  y = args[j + 5];
                  d.push("C", pf(args[j]), pf(args[j + 1]), pf(args[j + 2]), pf(args[j + 3]), pf(x), pf(y));
                  j += 6;
                  break;

                case _util.OPS.curveTo2:
                  d.push("C", pf(x), pf(y), pf(args[j]), pf(args[j + 1]), pf(args[j + 2]), pf(args[j + 3]));
                  x = args[j + 2];
                  y = args[j + 3];
                  j += 4;
                  break;

                case _util.OPS.curveTo3:
                  x = args[j + 2];
                  y = args[j + 3];
                  d.push("C", pf(args[j]), pf(args[j + 1]), pf(x), pf(y), pf(x), pf(y));
                  j += 4;
                  break;

                case _util.OPS.closePath:
                  d.push("Z");
                  break;
              }
            }

            d = d.join(" ");

            if (current.path && ops.length > 0 && ops[0] !== _util.OPS.rectangle && ops[0] !== _util.OPS.moveTo) {
              d = current.path.getAttributeNS(null, "d") + d;
            } else {
              current.path = this.svgFactory.createElement("svg:path");

              this._ensureTransformGroup().appendChild(current.path);
            }

            current.path.setAttributeNS(null, "d", d);
            current.path.setAttributeNS(null, "fill", "none");
            current.element = current.path;
            current.setCurrentPoint(x, y);
          }

          endPath() {
            const current = this.current;
            current.path = null;

            if (!this.pendingClip) {
              return;
            }

            if (!current.element) {
              this.pendingClip = null;
              return;
            }

            const clipId = `clippath${clipCount++}`;
            const clipPath = this.svgFactory.createElement("svg:clipPath");
            clipPath.setAttributeNS(null, "id", clipId);
            clipPath.setAttributeNS(null, "transform", pm(this.transformMatrix));
            const clipElement = current.element.cloneNode(true);

            if (this.pendingClip === "evenodd") {
              clipElement.setAttributeNS(null, "clip-rule", "evenodd");
            } else {
              clipElement.setAttributeNS(null, "clip-rule", "nonzero");
            }

            this.pendingClip = null;
            clipPath.appendChild(clipElement);
            this.defs.appendChild(clipPath);

            if (current.activeClipUrl) {
              current.clipGroup = null;
              this.extraStack.forEach(function (prev) {
                prev.clipGroup = null;
              });
              clipPath.setAttributeNS(null, "clip-path", current.activeClipUrl);
            }

            current.activeClipUrl = `url(#${clipId})`;
            this.tgrp = null;
          }

          clip(type) {
            this.pendingClip = type;
          }

          closePath() {
            const current = this.current;

            if (current.path) {
              const d = `${current.path.getAttributeNS(null, "d")}Z`;
              current.path.setAttributeNS(null, "d", d);
            }
          }

          setLeading(leading) {
            this.current.leading = -leading;
          }

          setTextRise(textRise) {
            this.current.textRise = textRise;
          }

          setTextRenderingMode(textRenderingMode) {
            this.current.textRenderingMode = textRenderingMode;
          }

          setHScale(scale) {
            this.current.textHScale = scale / 100;
          }

          setRenderingIntent(intent) {}

          setFlatness(flatness) {}

          setGState(states) {
            for (const [key, value] of states) {
              switch (key) {
                case "LW":
                  this.setLineWidth(value);
                  break;

                case "LC":
                  this.setLineCap(value);
                  break;

                case "LJ":
                  this.setLineJoin(value);
                  break;

                case "ML":
                  this.setMiterLimit(value);
                  break;

                case "D":
                  this.setDash(value[0], value[1]);
                  break;

                case "RI":
                  this.setRenderingIntent(value);
                  break;

                case "FL":
                  this.setFlatness(value);
                  break;

                case "Font":
                  this.setFont(value);
                  break;

                case "CA":
                  this.setStrokeAlpha(value);
                  break;

                case "ca":
                  this.setFillAlpha(value);
                  break;

                default:
                  (0, _util.warn)(`Unimplemented graphic state operator ${key}`);
                  break;
              }
            }
          }

          fill() {
            const current = this.current;

            if (current.element) {
              current.element.setAttributeNS(null, "fill", current.fillColor);
              current.element.setAttributeNS(null, "fill-opacity", current.fillAlpha);
              this.endPath();
            }
          }

          stroke() {
            const current = this.current;

            if (current.element) {
              this._setStrokeAttributes(current.element);

              current.element.setAttributeNS(null, "fill", "none");
              this.endPath();
            }
          }

          _setStrokeAttributes(element, lineWidthScale = 1) {
            const current = this.current;
            let dashArray = current.dashArray;

            if (lineWidthScale !== 1 && dashArray.length > 0) {
              dashArray = dashArray.map(function (value) {
                return lineWidthScale * value;
              });
            }

            element.setAttributeNS(null, "stroke", current.strokeColor);
            element.setAttributeNS(null, "stroke-opacity", current.strokeAlpha);
            element.setAttributeNS(null, "stroke-miterlimit", pf(current.miterLimit));
            element.setAttributeNS(null, "stroke-linecap", current.lineCap);
            element.setAttributeNS(null, "stroke-linejoin", current.lineJoin);
            element.setAttributeNS(null, "stroke-width", pf(lineWidthScale * current.lineWidth) + "px");
            element.setAttributeNS(null, "stroke-dasharray", dashArray.map(pf).join(" "));
            element.setAttributeNS(null, "stroke-dashoffset", pf(lineWidthScale * current.dashPhase) + "px");
          }

          eoFill() {
            if (this.current.element) {
              this.current.element.setAttributeNS(null, "fill-rule", "evenodd");
            }

            this.fill();
          }

          fillStroke() {
            this.stroke();
            this.fill();
          }

          eoFillStroke() {
            if (this.current.element) {
              this.current.element.setAttributeNS(null, "fill-rule", "evenodd");
            }

            this.fillStroke();
          }

          closeStroke() {
            this.closePath();
            this.stroke();
          }

          closeFillStroke() {
            this.closePath();
            this.fillStroke();
          }

          closeEOFillStroke() {
            this.closePath();
            this.eoFillStroke();
          }

          paintSolidColorImageMask() {
            const rect = this.svgFactory.createElement("svg:rect");
            rect.setAttributeNS(null, "x", "0");
            rect.setAttributeNS(null, "y", "0");
            rect.setAttributeNS(null, "width", "1px");
            rect.setAttributeNS(null, "height", "1px");
            rect.setAttributeNS(null, "fill", this.current.fillColor);

            this._ensureTransformGroup().appendChild(rect);
          }

          paintImageXObject(objId) {
            const imgData = this.objs.get(objId);

            if (!imgData) {
              (0, _util.warn)(`Dependent image with object ID ${objId} is not ready yet`);
              return;
            }

            this.paintInlineImageXObject(imgData);
          }

          paintInlineImageXObject(imgData, mask) {
            const width = imgData.width;
            const height = imgData.height;
            const imgSrc = convertImgDataToPng(imgData, this.forceDataSchema, !!mask);
            const cliprect = this.svgFactory.createElement("svg:rect");
            cliprect.setAttributeNS(null, "x", "0");
            cliprect.setAttributeNS(null, "y", "0");
            cliprect.setAttributeNS(null, "width", pf(width));
            cliprect.setAttributeNS(null, "height", pf(height));
            this.current.element = cliprect;
            this.clip("nonzero");
            const imgEl = this.svgFactory.createElement("svg:image");
            imgEl.setAttributeNS(XLINK_NS, "xlink:href", imgSrc);
            imgEl.setAttributeNS(null, "x", "0");
            imgEl.setAttributeNS(null, "y", pf(-height));
            imgEl.setAttributeNS(null, "width", pf(width) + "px");
            imgEl.setAttributeNS(null, "height", pf(height) + "px");
            imgEl.setAttributeNS(null, "transform", `scale(${pf(1 / width)} ${pf(-1 / height)})`);

            if (mask) {
              mask.appendChild(imgEl);
            } else {
              this._ensureTransformGroup().appendChild(imgEl);
            }
          }

          paintImageMaskXObject(imgData) {
            const current = this.current;
            const width = imgData.width;
            const height = imgData.height;
            const fillColor = current.fillColor;
            current.maskId = `mask${maskCount++}`;
            const mask = this.svgFactory.createElement("svg:mask");
            mask.setAttributeNS(null, "id", current.maskId);
            const rect = this.svgFactory.createElement("svg:rect");
            rect.setAttributeNS(null, "x", "0");
            rect.setAttributeNS(null, "y", "0");
            rect.setAttributeNS(null, "width", pf(width));
            rect.setAttributeNS(null, "height", pf(height));
            rect.setAttributeNS(null, "fill", fillColor);
            rect.setAttributeNS(null, "mask", `url(#${current.maskId})`);
            this.defs.appendChild(mask);

            this._ensureTransformGroup().appendChild(rect);

            this.paintInlineImageXObject(imgData, mask);
          }

          paintFormXObjectBegin(matrix, bbox) {
            if (Array.isArray(matrix) && matrix.length === 6) {
              this.transform(matrix[0], matrix[1], matrix[2], matrix[3], matrix[4], matrix[5]);
            }

            if (bbox) {
              const width = bbox[2] - bbox[0];
              const height = bbox[3] - bbox[1];
              const cliprect = this.svgFactory.createElement("svg:rect");
              cliprect.setAttributeNS(null, "x", bbox[0]);
              cliprect.setAttributeNS(null, "y", bbox[1]);
              cliprect.setAttributeNS(null, "width", pf(width));
              cliprect.setAttributeNS(null, "height", pf(height));
              this.current.element = cliprect;
              this.clip("nonzero");
              this.endPath();
            }
          }

          paintFormXObjectEnd() {}

          _initialize(viewport) {
            const svg = this.svgFactory.create(viewport.width, viewport.height);
            const definitions = this.svgFactory.createElement("svg:defs");
            svg.appendChild(definitions);
            this.defs = definitions;
            const rootGroup = this.svgFactory.createElement("svg:g");
            rootGroup.setAttributeNS(null, "transform", pm(viewport.transform));
            svg.appendChild(rootGroup);
            this.svg = rootGroup;
            return svg;
          }

          _ensureClipGroup() {
            if (!this.current.clipGroup) {
              const clipGroup = this.svgFactory.createElement("svg:g");
              clipGroup.setAttributeNS(null, "clip-path", this.current.activeClipUrl);
              this.svg.appendChild(clipGroup);
              this.current.clipGroup = clipGroup;
            }

            return this.current.clipGroup;
          }

          _ensureTransformGroup() {
            if (!this.tgrp) {
              this.tgrp = this.svgFactory.createElement("svg:g");
              this.tgrp.setAttributeNS(null, "transform", pm(this.transformMatrix));

              if (this.current.activeClipUrl) {
                this._ensureClipGroup().appendChild(this.tgrp);
              } else {
                this.svg.appendChild(this.tgrp);
              }
            }

            return this.tgrp;
          }

        };
      }
      /***/
    },
    /* 19 */

    /***/
    function (module, exports, __w_pdfjs_require__) {
      "use strict";

      Object.defineProperty(exports, "__esModule", {
        value: true
      });
      exports.PDFNodeStream = void 0;

      var _util = __w_pdfjs_require__(2);

      var _network_utils = __w_pdfjs_require__(20);

      ;

      const fs = __webpack_require__(149);

      const http = __webpack_require__(150);

      const https = __webpack_require__(151);

      const url = __webpack_require__(152);

      const fileUriRegex = /^file:\/\/\/[a-zA-Z]:\//;

      function parseUrl(sourceUrl) {
        const parsedUrl = url.parse(sourceUrl);

        if (parsedUrl.protocol === "file:" || parsedUrl.host) {
          return parsedUrl;
        }

        if (/^[a-z]:[/\\]/i.test(sourceUrl)) {
          return url.parse(`file:///${sourceUrl}`);
        }

        if (!parsedUrl.host) {
          parsedUrl.protocol = "file:";
        }

        return parsedUrl;
      }

      class PDFNodeStream {
        constructor(source) {
          this.source = source;
          this.url = parseUrl(source.url);
          this.isHttp = this.url.protocol === "http:" || this.url.protocol === "https:";
          this.isFsUrl = this.url.protocol === "file:";
          this.httpHeaders = this.isHttp && source.httpHeaders || {};
          this._fullRequestReader = null;
          this._rangeRequestReaders = [];
        }

        get _progressiveDataLength() {
          return this._fullRequestReader ? this._fullRequestReader._loaded : 0;
        }

        getFullReader() {
          (0, _util.assert)(!this._fullRequestReader, "PDFNodeStream.getFullReader can only be called once.");
          this._fullRequestReader = this.isFsUrl ? new PDFNodeStreamFsFullReader(this) : new PDFNodeStreamFullReader(this);
          return this._fullRequestReader;
        }

        getRangeReader(start, end) {
          if (end <= this._progressiveDataLength) {
            return null;
          }

          const rangeReader = this.isFsUrl ? new PDFNodeStreamFsRangeReader(this, start, end) : new PDFNodeStreamRangeReader(this, start, end);

          this._rangeRequestReaders.push(rangeReader);

          return rangeReader;
        }

        cancelAllRequests(reason) {
          if (this._fullRequestReader) {
            this._fullRequestReader.cancel(reason);
          }

          const readers = this._rangeRequestReaders.slice(0);

          readers.forEach(function (reader) {
            reader.cancel(reason);
          });
        }

      }

      exports.PDFNodeStream = PDFNodeStream;

      class BaseFullReader {
        constructor(stream) {
          this._url = stream.url;
          this._done = false;
          this._storedError = null;
          this.onProgress = null;
          const source = stream.source;
          this._contentLength = source.length;
          this._loaded = 0;
          this._filename = null;
          this._disableRange = source.disableRange || false;
          this._rangeChunkSize = source.rangeChunkSize;

          if (!this._rangeChunkSize && !this._disableRange) {
            this._disableRange = true;
          }

          this._isStreamingSupported = !source.disableStream;
          this._isRangeSupported = !source.disableRange;
          this._readableStream = null;
          this._readCapability = (0, _util.createPromiseCapability)();
          this._headersCapability = (0, _util.createPromiseCapability)();
        }

        get headersReady() {
          return this._headersCapability.promise;
        }

        get filename() {
          return this._filename;
        }

        get contentLength() {
          return this._contentLength;
        }

        get isRangeSupported() {
          return this._isRangeSupported;
        }

        get isStreamingSupported() {
          return this._isStreamingSupported;
        }

        async read() {
          await this._readCapability.promise;

          if (this._done) {
            return {
              value: undefined,
              done: true
            };
          }

          if (this._storedError) {
            throw this._storedError;
          }

          const chunk = this._readableStream.read();

          if (chunk === null) {
            this._readCapability = (0, _util.createPromiseCapability)();
            return this.read();
          }

          this._loaded += chunk.length;

          if (this.onProgress) {
            this.onProgress({
              loaded: this._loaded,
              total: this._contentLength
            });
          }

          const buffer = new Uint8Array(chunk).buffer;
          return {
            value: buffer,
            done: false
          };
        }

        cancel(reason) {
          if (!this._readableStream) {
            this._error(reason);

            return;
          }

          this._readableStream.destroy(reason);
        }

        _error(reason) {
          this._storedError = reason;

          this._readCapability.resolve();
        }

        _setReadableStream(readableStream) {
          this._readableStream = readableStream;
          readableStream.on("readable", () => {
            this._readCapability.resolve();
          });
          readableStream.on("end", () => {
            readableStream.destroy();
            this._done = true;

            this._readCapability.resolve();
          });
          readableStream.on("error", reason => {
            this._error(reason);
          });

          if (!this._isStreamingSupported && this._isRangeSupported) {
            this._error(new _util.AbortException("streaming is disabled"));
          }

          if (this._storedError) {
            this._readableStream.destroy(this._storedError);
          }
        }

      }

      class BaseRangeReader {
        constructor(stream) {
          this._url = stream.url;
          this._done = false;
          this._storedError = null;
          this.onProgress = null;
          this._loaded = 0;
          this._readableStream = null;
          this._readCapability = (0, _util.createPromiseCapability)();
          const source = stream.source;
          this._isStreamingSupported = !source.disableStream;
        }

        get isStreamingSupported() {
          return this._isStreamingSupported;
        }

        async read() {
          await this._readCapability.promise;

          if (this._done) {
            return {
              value: undefined,
              done: true
            };
          }

          if (this._storedError) {
            throw this._storedError;
          }

          const chunk = this._readableStream.read();

          if (chunk === null) {
            this._readCapability = (0, _util.createPromiseCapability)();
            return this.read();
          }

          this._loaded += chunk.length;

          if (this.onProgress) {
            this.onProgress({
              loaded: this._loaded
            });
          }

          const buffer = new Uint8Array(chunk).buffer;
          return {
            value: buffer,
            done: false
          };
        }

        cancel(reason) {
          if (!this._readableStream) {
            this._error(reason);

            return;
          }

          this._readableStream.destroy(reason);
        }

        _error(reason) {
          this._storedError = reason;

          this._readCapability.resolve();
        }

        _setReadableStream(readableStream) {
          this._readableStream = readableStream;
          readableStream.on("readable", () => {
            this._readCapability.resolve();
          });
          readableStream.on("end", () => {
            readableStream.destroy();
            this._done = true;

            this._readCapability.resolve();
          });
          readableStream.on("error", reason => {
            this._error(reason);
          });

          if (this._storedError) {
            this._readableStream.destroy(this._storedError);
          }
        }

      }

      function createRequestOptions(parsedUrl, headers) {
        return {
          protocol: parsedUrl.protocol,
          auth: parsedUrl.auth,
          host: parsedUrl.hostname,
          port: parsedUrl.port,
          path: parsedUrl.path,
          method: "GET",
          headers
        };
      }

      class PDFNodeStreamFullReader extends BaseFullReader {
        constructor(stream) {
          super(stream);

          const handleResponse = response => {
            if (response.statusCode === 404) {
              const error = new _util.MissingPDFException(`Missing PDF "${this._url}".`);
              this._storedError = error;

              this._headersCapability.reject(error);

              return;
            }

            this._headersCapability.resolve();

            this._setReadableStream(response);

            const getResponseHeader = name => {
              return this._readableStream.headers[name.toLowerCase()];
            };

            const {
              allowRangeRequests,
              suggestedLength
            } = (0, _network_utils.validateRangeRequestCapabilities)({
              getResponseHeader,
              isHttp: stream.isHttp,
              rangeChunkSize: this._rangeChunkSize,
              disableRange: this._disableRange
            });
            this._isRangeSupported = allowRangeRequests;
            this._contentLength = suggestedLength || this._contentLength;
            this._filename = (0, _network_utils.extractFilenameFromHeader)(getResponseHeader);
          };

          this._request = null;

          if (this._url.protocol === "http:") {
            this._request = http.request(createRequestOptions(this._url, stream.httpHeaders), handleResponse);
          } else {
            this._request = https.request(createRequestOptions(this._url, stream.httpHeaders), handleResponse);
          }

          this._request.on("error", reason => {
            this._storedError = reason;

            this._headersCapability.reject(reason);
          });

          this._request.end();
        }

      }

      class PDFNodeStreamRangeReader extends BaseRangeReader {
        constructor(stream, start, end) {
          super(stream);
          this._httpHeaders = {};

          for (const property in stream.httpHeaders) {
            const value = stream.httpHeaders[property];

            if (typeof value === "undefined") {
              continue;
            }

            this._httpHeaders[property] = value;
          }

          this._httpHeaders.Range = `bytes=${start}-${end - 1}`;

          const handleResponse = response => {
            if (response.statusCode === 404) {
              const error = new _util.MissingPDFException(`Missing PDF "${this._url}".`);
              this._storedError = error;
              return;
            }

            this._setReadableStream(response);
          };

          this._request = null;

          if (this._url.protocol === "http:") {
            this._request = http.request(createRequestOptions(this._url, this._httpHeaders), handleResponse);
          } else {
            this._request = https.request(createRequestOptions(this._url, this._httpHeaders), handleResponse);
          }

          this._request.on("error", reason => {
            this._storedError = reason;
          });

          this._request.end();
        }

      }

      class PDFNodeStreamFsFullReader extends BaseFullReader {
        constructor(stream) {
          super(stream);
          let path = decodeURIComponent(this._url.path);

          if (fileUriRegex.test(this._url.href)) {
            path = path.replace(/^\//, "");
          }

          fs.lstat(path, (error, stat) => {
            if (error) {
              if (error.code === "ENOENT") {
                error = new _util.MissingPDFException(`Missing PDF "${path}".`);
              }

              this._storedError = error;

              this._headersCapability.reject(error);

              return;
            }

            this._contentLength = stat.size;

            this._setReadableStream(fs.createReadStream(path));

            this._headersCapability.resolve();
          });
        }

      }

      class PDFNodeStreamFsRangeReader extends BaseRangeReader {
        constructor(stream, start, end) {
          super(stream);
          let path = decodeURIComponent(this._url.path);

          if (fileUriRegex.test(this._url.href)) {
            path = path.replace(/^\//, "");
          }

          this._setReadableStream(fs.createReadStream(path, {
            start,
            end: end - 1
          }));
        }

      }
      /***/

    },
    /* 20 */

    /***/
    function (module, exports, __w_pdfjs_require__) {
      "use strict";

      Object.defineProperty(exports, "__esModule", {
        value: true
      });
      exports.createResponseStatusError = createResponseStatusError;
      exports.extractFilenameFromHeader = extractFilenameFromHeader;
      exports.validateRangeRequestCapabilities = validateRangeRequestCapabilities;
      exports.validateResponseStatus = validateResponseStatus;

      var _util = __w_pdfjs_require__(2);

      var _content_disposition = __w_pdfjs_require__(21);

      function validateRangeRequestCapabilities({
        getResponseHeader,
        isHttp,
        rangeChunkSize,
        disableRange
      }) {
        (0, _util.assert)(rangeChunkSize > 0, "Range chunk size must be larger than zero");
        const returnValues = {
          allowRangeRequests: false,
          suggestedLength: undefined
        };
        const length = parseInt(getResponseHeader("Content-Length"), 10);

        if (!Number.isInteger(length)) {
          return returnValues;
        }

        returnValues.suggestedLength = length;

        if (length <= 2 * rangeChunkSize) {
          return returnValues;
        }

        if (disableRange || !isHttp) {
          return returnValues;
        }

        if (getResponseHeader("Accept-Ranges") !== "bytes") {
          return returnValues;
        }

        const contentEncoding = getResponseHeader("Content-Encoding") || "identity";

        if (contentEncoding !== "identity") {
          return returnValues;
        }

        returnValues.allowRangeRequests = true;
        return returnValues;
      }

      function extractFilenameFromHeader(getResponseHeader) {
        const contentDisposition = getResponseHeader("Content-Disposition");

        if (contentDisposition) {
          let filename = (0, _content_disposition.getFilenameFromContentDispositionHeader)(contentDisposition);

          if (filename.includes("%")) {
            try {
              filename = decodeURIComponent(filename);
            } catch (ex) {}
          }

          if (/\.pdf$/i.test(filename)) {
            return filename;
          }
        }

        return null;
      }

      function createResponseStatusError(status, url) {
        if (status === 404 || status === 0 && url.startsWith("file:")) {
          return new _util.MissingPDFException('Missing PDF "' + url + '".');
        }

        return new _util.UnexpectedResponseException("Unexpected server response (" + status + ') while retrieving PDF "' + url + '".', status);
      }

      function validateResponseStatus(status) {
        return status === 200 || status === 206;
      }
      /***/

    },
    /* 21 */

    /***/
    function (module, exports, __w_pdfjs_require__) {
      "use strict";

      Object.defineProperty(exports, "__esModule", {
        value: true
      });
      exports.getFilenameFromContentDispositionHeader = getFilenameFromContentDispositionHeader;

      function getFilenameFromContentDispositionHeader(contentDisposition) {
        let needsEncodingFixup = true;
        let tmp = toParamRegExp("filename\\*", "i").exec(contentDisposition);

        if (tmp) {
          tmp = tmp[1];
          let filename = rfc2616unquote(tmp);
          filename = unescape(filename);
          filename = rfc5987decode(filename);
          filename = rfc2047decode(filename);
          return fixupEncoding(filename);
        }

        tmp = rfc2231getparam(contentDisposition);

        if (tmp) {
          const filename = rfc2047decode(tmp);
          return fixupEncoding(filename);
        }

        tmp = toParamRegExp("filename", "i").exec(contentDisposition);

        if (tmp) {
          tmp = tmp[1];
          let filename = rfc2616unquote(tmp);
          filename = rfc2047decode(filename);
          return fixupEncoding(filename);
        }

        function toParamRegExp(attributePattern, flags) {
          return new RegExp("(?:^|;)\\s*" + attributePattern + "\\s*=\\s*" + "(" + '[^";\\s][^;\\s]*' + "|" + '"(?:[^"\\\\]|\\\\"?)+"?' + ")", flags);
        }

        function textdecode(encoding, value) {
          if (encoding) {
            if (!/^[\x00-\xFF]+$/.test(value)) {
              return value;
            }

            try {
              const decoder = new TextDecoder(encoding, {
                fatal: true
              });
              const bytes = Array.from(value, function (ch) {
                return ch.charCodeAt(0) & 0xff;
              });
              value = decoder.decode(new Uint8Array(bytes));
              needsEncodingFixup = false;
            } catch (e) {
              if (/^utf-?8$/i.test(encoding)) {
                try {
                  value = decodeURIComponent(escape(value));
                  needsEncodingFixup = false;
                } catch (err) {}
              }
            }
          }

          return value;
        }

        function fixupEncoding(value) {
          if (needsEncodingFixup && /[\x80-\xff]/.test(value)) {
            value = textdecode("utf-8", value);

            if (needsEncodingFixup) {
              value = textdecode("iso-8859-1", value);
            }
          }

          return value;
        }

        function rfc2231getparam(contentDispositionStr) {
          const matches = [];
          let match;
          const iter = toParamRegExp("filename\\*((?!0\\d)\\d+)(\\*?)", "ig");

          while ((match = iter.exec(contentDispositionStr)) !== null) {
            let [, n, quot, part] = match;
            n = parseInt(n, 10);

            if (n in matches) {
              if (n === 0) {
                break;
              }

              continue;
            }

            matches[n] = [quot, part];
          }

          const parts = [];

          for (let n = 0; n < matches.length; ++n) {
            if (!(n in matches)) {
              break;
            }

            let [quot, part] = matches[n];
            part = rfc2616unquote(part);

            if (quot) {
              part = unescape(part);

              if (n === 0) {
                part = rfc5987decode(part);
              }
            }

            parts.push(part);
          }

          return parts.join("");
        }

        function rfc2616unquote(value) {
          if (value.startsWith('"')) {
            const parts = value.slice(1).split('\\"');

            for (let i = 0; i < parts.length; ++i) {
              const quotindex = parts[i].indexOf('"');

              if (quotindex !== -1) {
                parts[i] = parts[i].slice(0, quotindex);
                parts.length = i + 1;
              }

              parts[i] = parts[i].replace(/\\(.)/g, "$1");
            }

            value = parts.join('"');
          }

          return value;
        }

        function rfc5987decode(extvalue) {
          const encodingend = extvalue.indexOf("'");

          if (encodingend === -1) {
            return extvalue;
          }

          const encoding = extvalue.slice(0, encodingend);
          const langvalue = extvalue.slice(encodingend + 1);
          const value = langvalue.replace(/^[^']*'/, "");
          return textdecode(encoding, value);
        }

        function rfc2047decode(value) {
          if (!value.startsWith("=?") || /[\x00-\x19\x80-\xff]/.test(value)) {
            return value;
          }

          return value.replace(/=\?([\w-]*)\?([QqBb])\?((?:[^?]|\?(?!=))*)\?=/g, function (matches, charset, encoding, text) {
            if (encoding === "q" || encoding === "Q") {
              text = text.replace(/_/g, " ");
              text = text.replace(/=([0-9a-fA-F]{2})/g, function (match, hex) {
                return String.fromCharCode(parseInt(hex, 16));
              });
              return textdecode(charset, text);
            }

            try {
              text = atob(text);
            } catch (e) {}

            return textdecode(charset, text);
          });
        }

        return "";
      }
      /***/

    },
    /* 22 */

    /***/
    function (module, exports, __w_pdfjs_require__) {
      "use strict";

      Object.defineProperty(exports, "__esModule", {
        value: true
      });
      exports.PDFNetworkStream = void 0;

      var _util = __w_pdfjs_require__(2);

      var _network_utils = __w_pdfjs_require__(20);

      ;
      const OK_RESPONSE = 200;
      const PARTIAL_CONTENT_RESPONSE = 206;

      function getArrayBuffer(xhr) {
        const data = xhr.response;

        if (typeof data !== "string") {
          return data;
        }

        const array = (0, _util.stringToBytes)(data);
        return array.buffer;
      }

      class NetworkManager {
        constructor(url, args) {
          this.url = url;
          args = args || {};
          this.isHttp = /^https?:/i.test(url);
          this.httpHeaders = this.isHttp && args.httpHeaders || {};
          this.withCredentials = args.withCredentials || false;

          this.getXhr = args.getXhr || function NetworkManager_getXhr() {
            return new XMLHttpRequest();
          };

          this.currXhrId = 0;
          this.pendingRequests = Object.create(null);
        }

        requestRange(begin, end, listeners) {
          const args = {
            begin,
            end
          };

          for (const prop in listeners) {
            args[prop] = listeners[prop];
          }

          return this.request(args);
        }

        requestFull(listeners) {
          return this.request(listeners);
        }

        request(args) {
          const xhr = this.getXhr();
          const xhrId = this.currXhrId++;
          const pendingRequest = this.pendingRequests[xhrId] = {
            xhr
          };
          xhr.open("GET", this.url);
          xhr.withCredentials = this.withCredentials;

          for (const property in this.httpHeaders) {
            const value = this.httpHeaders[property];

            if (typeof value === "undefined") {
              continue;
            }

            xhr.setRequestHeader(property, value);
          }

          if (this.isHttp && "begin" in args && "end" in args) {
            xhr.setRequestHeader("Range", `bytes=${args.begin}-${args.end - 1}`);
            pendingRequest.expectedStatus = PARTIAL_CONTENT_RESPONSE;
          } else {
            pendingRequest.expectedStatus = OK_RESPONSE;
          }

          xhr.responseType = "arraybuffer";

          if (args.onError) {
            xhr.onerror = function (evt) {
              args.onError(xhr.status);
            };
          }

          xhr.onreadystatechange = this.onStateChange.bind(this, xhrId);
          xhr.onprogress = this.onProgress.bind(this, xhrId);
          pendingRequest.onHeadersReceived = args.onHeadersReceived;
          pendingRequest.onDone = args.onDone;
          pendingRequest.onError = args.onError;
          pendingRequest.onProgress = args.onProgress;
          xhr.send(null);
          return xhrId;
        }

        onProgress(xhrId, evt) {
          const pendingRequest = this.pendingRequests[xhrId];

          if (!pendingRequest) {
            return;
          }

          if (pendingRequest.onProgress) {
            pendingRequest.onProgress(evt);
          }
        }

        onStateChange(xhrId, evt) {
          const pendingRequest = this.pendingRequests[xhrId];

          if (!pendingRequest) {
            return;
          }

          const xhr = pendingRequest.xhr;

          if (xhr.readyState >= 2 && pendingRequest.onHeadersReceived) {
            pendingRequest.onHeadersReceived();
            delete pendingRequest.onHeadersReceived;
          }

          if (xhr.readyState !== 4) {
            return;
          }

          if (!(xhrId in this.pendingRequests)) {
            return;
          }

          delete this.pendingRequests[xhrId];

          if (xhr.status === 0 && this.isHttp) {
            if (pendingRequest.onError) {
              pendingRequest.onError(xhr.status);
            }

            return;
          }

          const xhrStatus = xhr.status || OK_RESPONSE;
          const ok_response_on_range_request = xhrStatus === OK_RESPONSE && pendingRequest.expectedStatus === PARTIAL_CONTENT_RESPONSE;

          if (!ok_response_on_range_request && xhrStatus !== pendingRequest.expectedStatus) {
            if (pendingRequest.onError) {
              pendingRequest.onError(xhr.status);
            }

            return;
          }

          const chunk = getArrayBuffer(xhr);

          if (xhrStatus === PARTIAL_CONTENT_RESPONSE) {
            const rangeHeader = xhr.getResponseHeader("Content-Range");
            const matches = /bytes (\d+)-(\d+)\/(\d+)/.exec(rangeHeader);
            pendingRequest.onDone({
              begin: parseInt(matches[1], 10),
              chunk
            });
          } else if (chunk) {
            pendingRequest.onDone({
              begin: 0,
              chunk
            });
          } else if (pendingRequest.onError) {
            pendingRequest.onError(xhr.status);
          }
        }

        hasPendingRequests() {
          for (const xhrId in this.pendingRequests) {
            return true;
          }

          return false;
        }

        getRequestXhr(xhrId) {
          return this.pendingRequests[xhrId].xhr;
        }

        isPendingRequest(xhrId) {
          return xhrId in this.pendingRequests;
        }

        abortAllRequests() {
          for (const xhrId in this.pendingRequests) {
            this.abortRequest(xhrId | 0);
          }
        }

        abortRequest(xhrId) {
          const xhr = this.pendingRequests[xhrId].xhr;
          delete this.pendingRequests[xhrId];
          xhr.abort();
        }

      }

      class PDFNetworkStream {
        constructor(source) {
          this._source = source;
          this._manager = new NetworkManager(source.url, {
            httpHeaders: source.httpHeaders,
            withCredentials: source.withCredentials
          });
          this._rangeChunkSize = source.rangeChunkSize;
          this._fullRequestReader = null;
          this._rangeRequestReaders = [];
        }

        _onRangeRequestReaderClosed(reader) {
          const i = this._rangeRequestReaders.indexOf(reader);

          if (i >= 0) {
            this._rangeRequestReaders.splice(i, 1);
          }
        }

        getFullReader() {
          (0, _util.assert)(!this._fullRequestReader, "PDFNetworkStream.getFullReader can only be called once.");
          this._fullRequestReader = new PDFNetworkStreamFullRequestReader(this._manager, this._source);
          return this._fullRequestReader;
        }

        getRangeReader(begin, end) {
          const reader = new PDFNetworkStreamRangeRequestReader(this._manager, begin, end);
          reader.onClosed = this._onRangeRequestReaderClosed.bind(this);

          this._rangeRequestReaders.push(reader);

          return reader;
        }

        cancelAllRequests(reason) {
          if (this._fullRequestReader) {
            this._fullRequestReader.cancel(reason);
          }

          const readers = this._rangeRequestReaders.slice(0);

          readers.forEach(function (reader) {
            reader.cancel(reason);
          });
        }

      }

      exports.PDFNetworkStream = PDFNetworkStream;

      class PDFNetworkStreamFullRequestReader {
        constructor(manager, source) {
          this._manager = manager;
          const args = {
            onHeadersReceived: this._onHeadersReceived.bind(this),
            onDone: this._onDone.bind(this),
            onError: this._onError.bind(this),
            onProgress: this._onProgress.bind(this)
          };
          this._url = source.url;
          this._fullRequestId = manager.requestFull(args);
          this._headersReceivedCapability = (0, _util.createPromiseCapability)();
          this._disableRange = source.disableRange || false;
          this._contentLength = source.length;
          this._rangeChunkSize = source.rangeChunkSize;

          if (!this._rangeChunkSize && !this._disableRange) {
            this._disableRange = true;
          }

          this._isStreamingSupported = false;
          this._isRangeSupported = false;
          this._cachedChunks = [];
          this._requests = [];
          this._done = false;
          this._storedError = undefined;
          this._filename = null;
          this.onProgress = null;
        }

        _onHeadersReceived() {
          const fullRequestXhrId = this._fullRequestId;

          const fullRequestXhr = this._manager.getRequestXhr(fullRequestXhrId);

          const getResponseHeader = name => {
            return fullRequestXhr.getResponseHeader(name);
          };

          const {
            allowRangeRequests,
            suggestedLength
          } = (0, _network_utils.validateRangeRequestCapabilities)({
            getResponseHeader,
            isHttp: this._manager.isHttp,
            rangeChunkSize: this._rangeChunkSize,
            disableRange: this._disableRange
          });

          if (allowRangeRequests) {
            this._isRangeSupported = true;
          }

          this._contentLength = suggestedLength || this._contentLength;
          this._filename = (0, _network_utils.extractFilenameFromHeader)(getResponseHeader);

          if (this._isRangeSupported) {
            this._manager.abortRequest(fullRequestXhrId);
          }

          this._headersReceivedCapability.resolve();
        }

        _onDone(args) {
          if (args) {
            if (this._requests.length > 0) {
              const requestCapability = this._requests.shift();

              requestCapability.resolve({
                value: args.chunk,
                done: false
              });
            } else {
              this._cachedChunks.push(args.chunk);
            }
          }

          this._done = true;

          if (this._cachedChunks.length > 0) {
            return;
          }

          this._requests.forEach(function (requestCapability) {
            requestCapability.resolve({
              value: undefined,
              done: true
            });
          });

          this._requests = [];
        }

        _onError(status) {
          const url = this._url;
          const exception = (0, _network_utils.createResponseStatusError)(status, url);
          this._storedError = exception;

          this._headersReceivedCapability.reject(exception);

          this._requests.forEach(function (requestCapability) {
            requestCapability.reject(exception);
          });

          this._requests = [];
          this._cachedChunks = [];
        }

        _onProgress(data) {
          if (this.onProgress) {
            this.onProgress({
              loaded: data.loaded,
              total: data.lengthComputable ? data.total : this._contentLength
            });
          }
        }

        get filename() {
          return this._filename;
        }

        get isRangeSupported() {
          return this._isRangeSupported;
        }

        get isStreamingSupported() {
          return this._isStreamingSupported;
        }

        get contentLength() {
          return this._contentLength;
        }

        get headersReady() {
          return this._headersReceivedCapability.promise;
        }

        async read() {
          if (this._storedError) {
            throw this._storedError;
          }

          if (this._cachedChunks.length > 0) {
            const chunk = this._cachedChunks.shift();

            return {
              value: chunk,
              done: false
            };
          }

          if (this._done) {
            return {
              value: undefined,
              done: true
            };
          }

          const requestCapability = (0, _util.createPromiseCapability)();

          this._requests.push(requestCapability);

          return requestCapability.promise;
        }

        cancel(reason) {
          this._done = true;

          this._headersReceivedCapability.reject(reason);

          this._requests.forEach(function (requestCapability) {
            requestCapability.resolve({
              value: undefined,
              done: true
            });
          });

          this._requests = [];

          if (this._manager.isPendingRequest(this._fullRequestId)) {
            this._manager.abortRequest(this._fullRequestId);
          }

          this._fullRequestReader = null;
        }

      }

      class PDFNetworkStreamRangeRequestReader {
        constructor(manager, begin, end) {
          this._manager = manager;
          const args = {
            onDone: this._onDone.bind(this),
            onProgress: this._onProgress.bind(this)
          };
          this._requestId = manager.requestRange(begin, end, args);
          this._requests = [];
          this._queuedChunk = null;
          this._done = false;
          this.onProgress = null;
          this.onClosed = null;
        }

        _close() {
          if (this.onClosed) {
            this.onClosed(this);
          }
        }

        _onDone(data) {
          const chunk = data.chunk;

          if (this._requests.length > 0) {
            const requestCapability = this._requests.shift();

            requestCapability.resolve({
              value: chunk,
              done: false
            });
          } else {
            this._queuedChunk = chunk;
          }

          this._done = true;

          this._requests.forEach(function (requestCapability) {
            requestCapability.resolve({
              value: undefined,
              done: true
            });
          });

          this._requests = [];

          this._close();
        }

        _onProgress(evt) {
          if (!this.isStreamingSupported && this.onProgress) {
            this.onProgress({
              loaded: evt.loaded
            });
          }
        }

        get isStreamingSupported() {
          return false;
        }

        async read() {
          if (this._queuedChunk !== null) {
            const chunk = this._queuedChunk;
            this._queuedChunk = null;
            return {
              value: chunk,
              done: false
            };
          }

          if (this._done) {
            return {
              value: undefined,
              done: true
            };
          }

          const requestCapability = (0, _util.createPromiseCapability)();

          this._requests.push(requestCapability);

          return requestCapability.promise;
        }

        cancel(reason) {
          this._done = true;

          this._requests.forEach(function (requestCapability) {
            requestCapability.resolve({
              value: undefined,
              done: true
            });
          });

          this._requests = [];

          if (this._manager.isPendingRequest(this._requestId)) {
            this._manager.abortRequest(this._requestId);
          }

          this._close();
        }

      }
      /***/

    },
    /* 23 */

    /***/
    function (module, exports, __w_pdfjs_require__) {
      "use strict";

      Object.defineProperty(exports, "__esModule", {
        value: true
      });
      exports.PDFFetchStream = void 0;

      var _util = __w_pdfjs_require__(2);

      var _network_utils = __w_pdfjs_require__(20);

      ;

      function createFetchOptions(headers, withCredentials, abortController) {
        return {
          method: "GET",
          headers,
          signal: abortController && abortController.signal,
          mode: "cors",
          credentials: withCredentials ? "include" : "same-origin",
          redirect: "follow"
        };
      }

      function createHeaders(httpHeaders) {
        const headers = new Headers();

        for (const property in httpHeaders) {
          const value = httpHeaders[property];

          if (typeof value === "undefined") {
            continue;
          }

          headers.append(property, value);
        }

        return headers;
      }

      class PDFFetchStream {
        constructor(source) {
          this.source = source;
          this.isHttp = /^https?:/i.test(source.url);
          this.httpHeaders = this.isHttp && source.httpHeaders || {};
          this._fullRequestReader = null;
          this._rangeRequestReaders = [];
        }

        get _progressiveDataLength() {
          return this._fullRequestReader ? this._fullRequestReader._loaded : 0;
        }

        getFullReader() {
          (0, _util.assert)(!this._fullRequestReader, "PDFFetchStream.getFullReader can only be called once.");
          this._fullRequestReader = new PDFFetchStreamReader(this);
          return this._fullRequestReader;
        }

        getRangeReader(begin, end) {
          if (end <= this._progressiveDataLength) {
            return null;
          }

          const reader = new PDFFetchStreamRangeReader(this, begin, end);

          this._rangeRequestReaders.push(reader);

          return reader;
        }

        cancelAllRequests(reason) {
          if (this._fullRequestReader) {
            this._fullRequestReader.cancel(reason);
          }

          const readers = this._rangeRequestReaders.slice(0);

          readers.forEach(function (reader) {
            reader.cancel(reason);
          });
        }

      }

      exports.PDFFetchStream = PDFFetchStream;

      class PDFFetchStreamReader {
        constructor(stream) {
          this._stream = stream;
          this._reader = null;
          this._loaded = 0;
          this._filename = null;
          const source = stream.source;
          this._withCredentials = source.withCredentials || false;
          this._contentLength = source.length;
          this._headersCapability = (0, _util.createPromiseCapability)();
          this._disableRange = source.disableRange || false;
          this._rangeChunkSize = source.rangeChunkSize;

          if (!this._rangeChunkSize && !this._disableRange) {
            this._disableRange = true;
          }

          if (typeof AbortController !== "undefined") {
            this._abortController = new AbortController();
          }

          this._isStreamingSupported = !source.disableStream;
          this._isRangeSupported = !source.disableRange;
          this._headers = createHeaders(this._stream.httpHeaders);
          const url = source.url;
          fetch(url, createFetchOptions(this._headers, this._withCredentials, this._abortController)).then(response => {
            if (!(0, _network_utils.validateResponseStatus)(response.status)) {
              throw (0, _network_utils.createResponseStatusError)(response.status, url);
            }

            this._reader = response.body.getReader();

            this._headersCapability.resolve();

            const getResponseHeader = name => {
              return response.headers.get(name);
            };

            const {
              allowRangeRequests,
              suggestedLength
            } = (0, _network_utils.validateRangeRequestCapabilities)({
              getResponseHeader,
              isHttp: this._stream.isHttp,
              rangeChunkSize: this._rangeChunkSize,
              disableRange: this._disableRange
            });
            this._isRangeSupported = allowRangeRequests;
            this._contentLength = suggestedLength || this._contentLength;
            this._filename = (0, _network_utils.extractFilenameFromHeader)(getResponseHeader);

            if (!this._isStreamingSupported && this._isRangeSupported) {
              this.cancel(new _util.AbortException("Streaming is disabled."));
            }
          }).catch(this._headersCapability.reject);
          this.onProgress = null;
        }

        get headersReady() {
          return this._headersCapability.promise;
        }

        get filename() {
          return this._filename;
        }

        get contentLength() {
          return this._contentLength;
        }

        get isRangeSupported() {
          return this._isRangeSupported;
        }

        get isStreamingSupported() {
          return this._isStreamingSupported;
        }

        async read() {
          await this._headersCapability.promise;
          const {
            value,
            done
          } = await this._reader.read();

          if (done) {
            return {
              value,
              done
            };
          }

          this._loaded += value.byteLength;

          if (this.onProgress) {
            this.onProgress({
              loaded: this._loaded,
              total: this._contentLength
            });
          }

          const buffer = new Uint8Array(value).buffer;
          return {
            value: buffer,
            done: false
          };
        }

        cancel(reason) {
          if (this._reader) {
            this._reader.cancel(reason);
          }

          if (this._abortController) {
            this._abortController.abort();
          }
        }

      }

      class PDFFetchStreamRangeReader {
        constructor(stream, begin, end) {
          this._stream = stream;
          this._reader = null;
          this._loaded = 0;
          const source = stream.source;
          this._withCredentials = source.withCredentials || false;
          this._readCapability = (0, _util.createPromiseCapability)();
          this._isStreamingSupported = !source.disableStream;

          if (typeof AbortController !== "undefined") {
            this._abortController = new AbortController();
          }

          this._headers = createHeaders(this._stream.httpHeaders);

          this._headers.append("Range", `bytes=${begin}-${end - 1}`);

          const url = source.url;
          fetch(url, createFetchOptions(this._headers, this._withCredentials, this._abortController)).then(response => {
            if (!(0, _network_utils.validateResponseStatus)(response.status)) {
              throw (0, _network_utils.createResponseStatusError)(response.status, url);
            }

            this._readCapability.resolve();

            this._reader = response.body.getReader();
          });
          this.onProgress = null;
        }

        get isStreamingSupported() {
          return this._isStreamingSupported;
        }

        async read() {
          await this._readCapability.promise;
          const {
            value,
            done
          } = await this._reader.read();

          if (done) {
            return {
              value,
              done
            };
          }

          this._loaded += value.byteLength;

          if (this.onProgress) {
            this.onProgress({
              loaded: this._loaded
            });
          }

          const buffer = new Uint8Array(value).buffer;
          return {
            value: buffer,
            done: false
          };
        }

        cancel(reason) {
          if (this._reader) {
            this._reader.cancel(reason);
          }

          if (this._abortController) {
            this._abortController.abort();
          }
        }

      }
      /***/

    }
    /******/
    ])
  );
});
/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(10), __webpack_require__(144).Buffer))

/***/ }),

/***/ 144:
/***/ (function(module, exports, __webpack_require__) {

"use strict";
/* WEBPACK VAR INJECTION */(function(global) {/*!
 * The buffer module from node.js, for the browser.
 *
 * @author   Feross Aboukhadijeh <http://feross.org>
 * @license  MIT
 */

/* eslint-disable no-proto */


var base64 = __webpack_require__(145);

var ieee754 = __webpack_require__(146);

var isArray = __webpack_require__(147);

exports.Buffer = Buffer;
exports.SlowBuffer = SlowBuffer;
exports.INSPECT_MAX_BYTES = 50;
/**
 * If `Buffer.TYPED_ARRAY_SUPPORT`:
 *   === true    Use Uint8Array implementation (fastest)
 *   === false   Use Object implementation (most compatible, even IE6)
 *
 * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
 * Opera 11.6+, iOS 4.2+.
 *
 * Due to various browser bugs, sometimes the Object implementation will be used even
 * when the browser supports typed arrays.
 *
 * Note:
 *
 *   - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,
 *     See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.
 *
 *   - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.
 *
 *   - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of
 *     incorrect length in some situations.

 * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they
 * get the Object implementation, which is slower but behaves correctly.
 */

Buffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined ? global.TYPED_ARRAY_SUPPORT : typedArraySupport();
/*
 * Export kMaxLength after typed array support is determined.
 */

exports.kMaxLength = kMaxLength();

function typedArraySupport() {
  try {
    var arr = new Uint8Array(1);
    arr.__proto__ = {
      __proto__: Uint8Array.prototype,
      foo: function () {
        return 42;
      }
    };
    return arr.foo() === 42 && // typed array instances can be augmented
    typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`
    arr.subarray(1, 1).byteLength === 0; // ie10 has broken `subarray`
  } catch (e) {
    return false;
  }
}

function kMaxLength() {
  return Buffer.TYPED_ARRAY_SUPPORT ? 0x7fffffff : 0x3fffffff;
}

function createBuffer(that, length) {
  if (kMaxLength() < length) {
    throw new RangeError('Invalid typed array length');
  }

  if (Buffer.TYPED_ARRAY_SUPPORT) {
    // Return an augmented `Uint8Array` instance, for best performance
    that = new Uint8Array(length);
    that.__proto__ = Buffer.prototype;
  } else {
    // Fallback: Return an object instance of the Buffer class
    if (that === null) {
      that = new Buffer(length);
    }

    that.length = length;
  }

  return that;
}
/**
 * The Buffer constructor returns instances of `Uint8Array` that have their
 * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of
 * `Uint8Array`, so the returned instances will have all the node `Buffer` methods
 * and the `Uint8Array` methods. Square bracket notation works as expected -- it
 * returns a single octet.
 *
 * The `Uint8Array` prototype remains unmodified.
 */


function Buffer(arg, encodingOrOffset, length) {
  if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {
    return new Buffer(arg, encodingOrOffset, length);
  } // Common case.


  if (typeof arg === 'number') {
    if (typeof encodingOrOffset === 'string') {
      throw new Error('If encoding is specified then the first argument must be a string');
    }

    return allocUnsafe(this, arg);
  }

  return from(this, arg, encodingOrOffset, length);
}

Buffer.poolSize = 8192; // not used by this implementation
// TODO: Legacy, not needed anymore. Remove in next major version.

Buffer._augment = function (arr) {
  arr.__proto__ = Buffer.prototype;
  return arr;
};

function from(that, value, encodingOrOffset, length) {
  if (typeof value === 'number') {
    throw new TypeError('"value" argument must not be a number');
  }

  if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {
    return fromArrayBuffer(that, value, encodingOrOffset, length);
  }

  if (typeof value === 'string') {
    return fromString(that, value, encodingOrOffset);
  }

  return fromObject(that, value);
}
/**
 * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError
 * if value is a number.
 * Buffer.from(str[, encoding])
 * Buffer.from(array)
 * Buffer.from(buffer)
 * Buffer.from(arrayBuffer[, byteOffset[, length]])
 **/


Buffer.from = function (value, encodingOrOffset, length) {
  return from(null, value, encodingOrOffset, length);
};

if (Buffer.TYPED_ARRAY_SUPPORT) {
  Buffer.prototype.__proto__ = Uint8Array.prototype;
  Buffer.__proto__ = Uint8Array;

  if (typeof Symbol !== 'undefined' && Symbol.species && Buffer[Symbol.species] === Buffer) {
    // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97
    Object.defineProperty(Buffer, Symbol.species, {
      value: null,
      configurable: true
    });
  }
}

function assertSize(size) {
  if (typeof size !== 'number') {
    throw new TypeError('"size" argument must be a number');
  } else if (size < 0) {
    throw new RangeError('"size" argument must not be negative');
  }
}

function alloc(that, size, fill, encoding) {
  assertSize(size);

  if (size <= 0) {
    return createBuffer(that, size);
  }

  if (fill !== undefined) {
    // Only pay attention to encoding if it's a string. This
    // prevents accidentally sending in a number that would
    // be interpretted as a start offset.
    return typeof encoding === 'string' ? createBuffer(that, size).fill(fill, encoding) : createBuffer(that, size).fill(fill);
  }

  return createBuffer(that, size);
}
/**
 * Creates a new filled Buffer instance.
 * alloc(size[, fill[, encoding]])
 **/


Buffer.alloc = function (size, fill, encoding) {
  return alloc(null, size, fill, encoding);
};

function allocUnsafe(that, size) {
  assertSize(size);
  that = createBuffer(that, size < 0 ? 0 : checked(size) | 0);

  if (!Buffer.TYPED_ARRAY_SUPPORT) {
    for (var i = 0; i < size; ++i) {
      that[i] = 0;
    }
  }

  return that;
}
/**
 * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.
 * */


Buffer.allocUnsafe = function (size) {
  return allocUnsafe(null, size);
};
/**
 * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.
 */


Buffer.allocUnsafeSlow = function (size) {
  return allocUnsafe(null, size);
};

function fromString(that, string, encoding) {
  if (typeof encoding !== 'string' || encoding === '') {
    encoding = 'utf8';
  }

  if (!Buffer.isEncoding(encoding)) {
    throw new TypeError('"encoding" must be a valid string encoding');
  }

  var length = byteLength(string, encoding) | 0;
  that = createBuffer(that, length);
  var actual = that.write(string, encoding);

  if (actual !== length) {
    // Writing a hex string, for example, that contains invalid characters will
    // cause everything after the first invalid character to be ignored. (e.g.
    // 'abxxcd' will be treated as 'ab')
    that = that.slice(0, actual);
  }

  return that;
}

function fromArrayLike(that, array) {
  var length = array.length < 0 ? 0 : checked(array.length) | 0;
  that = createBuffer(that, length);

  for (var i = 0; i < length; i += 1) {
    that[i] = array[i] & 255;
  }

  return that;
}

function fromArrayBuffer(that, array, byteOffset, length) {
  array.byteLength; // this throws if `array` is not a valid ArrayBuffer

  if (byteOffset < 0 || array.byteLength < byteOffset) {
    throw new RangeError('\'offset\' is out of bounds');
  }

  if (array.byteLength < byteOffset + (length || 0)) {
    throw new RangeError('\'length\' is out of bounds');
  }

  if (byteOffset === undefined && length === undefined) {
    array = new Uint8Array(array);
  } else if (length === undefined) {
    array = new Uint8Array(array, byteOffset);
  } else {
    array = new Uint8Array(array, byteOffset, length);
  }

  if (Buffer.TYPED_ARRAY_SUPPORT) {
    // Return an augmented `Uint8Array` instance, for best performance
    that = array;
    that.__proto__ = Buffer.prototype;
  } else {
    // Fallback: Return an object instance of the Buffer class
    that = fromArrayLike(that, array);
  }

  return that;
}

function fromObject(that, obj) {
  if (Buffer.isBuffer(obj)) {
    var len = checked(obj.length) | 0;
    that = createBuffer(that, len);

    if (that.length === 0) {
      return that;
    }

    obj.copy(that, 0, 0, len);
    return that;
  }

  if (obj) {
    if (typeof ArrayBuffer !== 'undefined' && obj.buffer instanceof ArrayBuffer || 'length' in obj) {
      if (typeof obj.length !== 'number' || isnan(obj.length)) {
        return createBuffer(that, 0);
      }

      return fromArrayLike(that, obj);
    }

    if (obj.type === 'Buffer' && isArray(obj.data)) {
      return fromArrayLike(that, obj.data);
    }
  }

  throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.');
}

function checked(length) {
  // Note: cannot use `length < kMaxLength()` here because that fails when
  // length is NaN (which is otherwise coerced to zero.)
  if (length >= kMaxLength()) {
    throw new RangeError('Attempt to allocate Buffer larger than maximum ' + 'size: 0x' + kMaxLength().toString(16) + ' bytes');
  }

  return length | 0;
}

function SlowBuffer(length) {
  if (+length != length) {
    // eslint-disable-line eqeqeq
    length = 0;
  }

  return Buffer.alloc(+length);
}

Buffer.isBuffer = function isBuffer(b) {
  return !!(b != null && b._isBuffer);
};

Buffer.compare = function compare(a, b) {
  if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
    throw new TypeError('Arguments must be Buffers');
  }

  if (a === b) return 0;
  var x = a.length;
  var y = b.length;

  for (var i = 0, len = Math.min(x, y); i < len; ++i) {
    if (a[i] !== b[i]) {
      x = a[i];
      y = b[i];
      break;
    }
  }

  if (x < y) return -1;
  if (y < x) return 1;
  return 0;
};

Buffer.isEncoding = function isEncoding(encoding) {
  switch (String(encoding).toLowerCase()) {
    case 'hex':
    case 'utf8':
    case 'utf-8':
    case 'ascii':
    case 'latin1':
    case 'binary':
    case 'base64':
    case 'ucs2':
    case 'ucs-2':
    case 'utf16le':
    case 'utf-16le':
      return true;

    default:
      return false;
  }
};

Buffer.concat = function concat(list, length) {
  if (!isArray(list)) {
    throw new TypeError('"list" argument must be an Array of Buffers');
  }

  if (list.length === 0) {
    return Buffer.alloc(0);
  }

  var i;

  if (length === undefined) {
    length = 0;

    for (i = 0; i < list.length; ++i) {
      length += list[i].length;
    }
  }

  var buffer = Buffer.allocUnsafe(length);
  var pos = 0;

  for (i = 0; i < list.length; ++i) {
    var buf = list[i];

    if (!Buffer.isBuffer(buf)) {
      throw new TypeError('"list" argument must be an Array of Buffers');
    }

    buf.copy(buffer, pos);
    pos += buf.length;
  }

  return buffer;
};

function byteLength(string, encoding) {
  if (Buffer.isBuffer(string)) {
    return string.length;
  }

  if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' && (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {
    return string.byteLength;
  }

  if (typeof string !== 'string') {
    string = '' + string;
  }

  var len = string.length;
  if (len === 0) return 0; // Use a for loop to avoid recursion

  var loweredCase = false;

  for (;;) {
    switch (encoding) {
      case 'ascii':
      case 'latin1':
      case 'binary':
        return len;

      case 'utf8':
      case 'utf-8':
      case undefined:
        return utf8ToBytes(string).length;

      case 'ucs2':
      case 'ucs-2':
      case 'utf16le':
      case 'utf-16le':
        return len * 2;

      case 'hex':
        return len >>> 1;

      case 'base64':
        return base64ToBytes(string).length;

      default:
        if (loweredCase) return utf8ToBytes(string).length; // assume utf8

        encoding = ('' + encoding).toLowerCase();
        loweredCase = true;
    }
  }
}

Buffer.byteLength = byteLength;

function slowToString(encoding, start, end) {
  var loweredCase = false; // No need to verify that "this.length <= MAX_UINT32" since it's a read-only
  // property of a typed array.
  // This behaves neither like String nor Uint8Array in that we set start/end
  // to their upper/lower bounds if the value passed is out of range.
  // undefined is handled specially as per ECMA-262 6th Edition,
  // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.

  if (start === undefined || start < 0) {
    start = 0;
  } // Return early if start > this.length. Done here to prevent potential uint32
  // coercion fail below.


  if (start > this.length) {
    return '';
  }

  if (end === undefined || end > this.length) {
    end = this.length;
  }

  if (end <= 0) {
    return '';
  } // Force coersion to uint32. This will also coerce falsey/NaN values to 0.


  end >>>= 0;
  start >>>= 0;

  if (end <= start) {
    return '';
  }

  if (!encoding) encoding = 'utf8';

  while (true) {
    switch (encoding) {
      case 'hex':
        return hexSlice(this, start, end);

      case 'utf8':
      case 'utf-8':
        return utf8Slice(this, start, end);

      case 'ascii':
        return asciiSlice(this, start, end);

      case 'latin1':
      case 'binary':
        return latin1Slice(this, start, end);

      case 'base64':
        return base64Slice(this, start, end);

      case 'ucs2':
      case 'ucs-2':
      case 'utf16le':
      case 'utf-16le':
        return utf16leSlice(this, start, end);

      default:
        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding);
        encoding = (encoding + '').toLowerCase();
        loweredCase = true;
    }
  }
} // The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect
// Buffer instances.


Buffer.prototype._isBuffer = true;

function swap(b, n, m) {
  var i = b[n];
  b[n] = b[m];
  b[m] = i;
}

Buffer.prototype.swap16 = function swap16() {
  var len = this.length;

  if (len % 2 !== 0) {
    throw new RangeError('Buffer size must be a multiple of 16-bits');
  }

  for (var i = 0; i < len; i += 2) {
    swap(this, i, i + 1);
  }

  return this;
};

Buffer.prototype.swap32 = function swap32() {
  var len = this.length;

  if (len % 4 !== 0) {
    throw new RangeError('Buffer size must be a multiple of 32-bits');
  }

  for (var i = 0; i < len; i += 4) {
    swap(this, i, i + 3);
    swap(this, i + 1, i + 2);
  }

  return this;
};

Buffer.prototype.swap64 = function swap64() {
  var len = this.length;

  if (len % 8 !== 0) {
    throw new RangeError('Buffer size must be a multiple of 64-bits');
  }

  for (var i = 0; i < len; i += 8) {
    swap(this, i, i + 7);
    swap(this, i + 1, i + 6);
    swap(this, i + 2, i + 5);
    swap(this, i + 3, i + 4);
  }

  return this;
};

Buffer.prototype.toString = function toString() {
  var length = this.length | 0;
  if (length === 0) return '';
  if (arguments.length === 0) return utf8Slice(this, 0, length);
  return slowToString.apply(this, arguments);
};

Buffer.prototype.equals = function equals(b) {
  if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer');
  if (this === b) return true;
  return Buffer.compare(this, b) === 0;
};

Buffer.prototype.inspect = function inspect() {
  var str = '';
  var max = exports.INSPECT_MAX_BYTES;

  if (this.length > 0) {
    str = this.toString('hex', 0, max).match(/.{2}/g).join(' ');
    if (this.length > max) str += ' ... ';
  }

  return '<Buffer ' + str + '>';
};

Buffer.prototype.compare = function compare(target, start, end, thisStart, thisEnd) {
  if (!Buffer.isBuffer(target)) {
    throw new TypeError('Argument must be a Buffer');
  }

  if (start === undefined) {
    start = 0;
  }

  if (end === undefined) {
    end = target ? target.length : 0;
  }

  if (thisStart === undefined) {
    thisStart = 0;
  }

  if (thisEnd === undefined) {
    thisEnd = this.length;
  }

  if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {
    throw new RangeError('out of range index');
  }

  if (thisStart >= thisEnd && start >= end) {
    return 0;
  }

  if (thisStart >= thisEnd) {
    return -1;
  }

  if (start >= end) {
    return 1;
  }

  start >>>= 0;
  end >>>= 0;
  thisStart >>>= 0;
  thisEnd >>>= 0;
  if (this === target) return 0;
  var x = thisEnd - thisStart;
  var y = end - start;
  var len = Math.min(x, y);
  var thisCopy = this.slice(thisStart, thisEnd);
  var targetCopy = target.slice(start, end);

  for (var i = 0; i < len; ++i) {
    if (thisCopy[i] !== targetCopy[i]) {
      x = thisCopy[i];
      y = targetCopy[i];
      break;
    }
  }

  if (x < y) return -1;
  if (y < x) return 1;
  return 0;
}; // Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,
// OR the last index of `val` in `buffer` at offset <= `byteOffset`.
//
// Arguments:
// - buffer - a Buffer to search
// - val - a string, Buffer, or number
// - byteOffset - an index into `buffer`; will be clamped to an int32
// - encoding - an optional encoding, relevant is val is a string
// - dir - true for indexOf, false for lastIndexOf


function bidirectionalIndexOf(buffer, val, byteOffset, encoding, dir) {
  // Empty buffer means no match
  if (buffer.length === 0) return -1; // Normalize byteOffset

  if (typeof byteOffset === 'string') {
    encoding = byteOffset;
    byteOffset = 0;
  } else if (byteOffset > 0x7fffffff) {
    byteOffset = 0x7fffffff;
  } else if (byteOffset < -0x80000000) {
    byteOffset = -0x80000000;
  }

  byteOffset = +byteOffset; // Coerce to Number.

  if (isNaN(byteOffset)) {
    // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer
    byteOffset = dir ? 0 : buffer.length - 1;
  } // Normalize byteOffset: negative offsets start from the end of the buffer


  if (byteOffset < 0) byteOffset = buffer.length + byteOffset;

  if (byteOffset >= buffer.length) {
    if (dir) return -1;else byteOffset = buffer.length - 1;
  } else if (byteOffset < 0) {
    if (dir) byteOffset = 0;else return -1;
  } // Normalize val


  if (typeof val === 'string') {
    val = Buffer.from(val, encoding);
  } // Finally, search either indexOf (if dir is true) or lastIndexOf


  if (Buffer.isBuffer(val)) {
    // Special case: looking for empty string/buffer always fails
    if (val.length === 0) {
      return -1;
    }

    return arrayIndexOf(buffer, val, byteOffset, encoding, dir);
  } else if (typeof val === 'number') {
    val = val & 0xFF; // Search for a byte value [0-255]

    if (Buffer.TYPED_ARRAY_SUPPORT && typeof Uint8Array.prototype.indexOf === 'function') {
      if (dir) {
        return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset);
      } else {
        return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset);
      }
    }

    return arrayIndexOf(buffer, [val], byteOffset, encoding, dir);
  }

  throw new TypeError('val must be string, number or Buffer');
}

function arrayIndexOf(arr, val, byteOffset, encoding, dir) {
  var indexSize = 1;
  var arrLength = arr.length;
  var valLength = val.length;

  if (encoding !== undefined) {
    encoding = String(encoding).toLowerCase();

    if (encoding === 'ucs2' || encoding === 'ucs-2' || encoding === 'utf16le' || encoding === 'utf-16le') {
      if (arr.length < 2 || val.length < 2) {
        return -1;
      }

      indexSize = 2;
      arrLength /= 2;
      valLength /= 2;
      byteOffset /= 2;
    }
  }

  function read(buf, i) {
    if (indexSize === 1) {
      return buf[i];
    } else {
      return buf.readUInt16BE(i * indexSize);
    }
  }

  var i;

  if (dir) {
    var foundIndex = -1;

    for (i = byteOffset; i < arrLength; i++) {
      if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {
        if (foundIndex === -1) foundIndex = i;
        if (i - foundIndex + 1 === valLength) return foundIndex * indexSize;
      } else {
        if (foundIndex !== -1) i -= i - foundIndex;
        foundIndex = -1;
      }
    }
  } else {
    if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength;

    for (i = byteOffset; i >= 0; i--) {
      var found = true;

      for (var j = 0; j < valLength; j++) {
        if (read(arr, i + j) !== read(val, j)) {
          found = false;
          break;
        }
      }

      if (found) return i;
    }
  }

  return -1;
}

Buffer.prototype.includes = function includes(val, byteOffset, encoding) {
  return this.indexOf(val, byteOffset, encoding) !== -1;
};

Buffer.prototype.indexOf = function indexOf(val, byteOffset, encoding) {
  return bidirectionalIndexOf(this, val, byteOffset, encoding, true);
};

Buffer.prototype.lastIndexOf = function lastIndexOf(val, byteOffset, encoding) {
  return bidirectionalIndexOf(this, val, byteOffset, encoding, false);
};

function hexWrite(buf, string, offset, length) {
  offset = Number(offset) || 0;
  var remaining = buf.length - offset;

  if (!length) {
    length = remaining;
  } else {
    length = Number(length);

    if (length > remaining) {
      length = remaining;
    }
  } // must be an even number of digits


  var strLen = string.length;
  if (strLen % 2 !== 0) throw new TypeError('Invalid hex string');

  if (length > strLen / 2) {
    length = strLen / 2;
  }

  for (var i = 0; i < length; ++i) {
    var parsed = parseInt(string.substr(i * 2, 2), 16);
    if (isNaN(parsed)) return i;
    buf[offset + i] = parsed;
  }

  return i;
}

function utf8Write(buf, string, offset, length) {
  return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length);
}

function asciiWrite(buf, string, offset, length) {
  return blitBuffer(asciiToBytes(string), buf, offset, length);
}

function latin1Write(buf, string, offset, length) {
  return asciiWrite(buf, string, offset, length);
}

function base64Write(buf, string, offset, length) {
  return blitBuffer(base64ToBytes(string), buf, offset, length);
}

function ucs2Write(buf, string, offset, length) {
  return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length);
}

Buffer.prototype.write = function write(string, offset, length, encoding) {
  // Buffer#write(string)
  if (offset === undefined) {
    encoding = 'utf8';
    length = this.length;
    offset = 0; // Buffer#write(string, encoding)
  } else if (length === undefined && typeof offset === 'string') {
    encoding = offset;
    length = this.length;
    offset = 0; // Buffer#write(string, offset[, length][, encoding])
  } else if (isFinite(offset)) {
    offset = offset | 0;

    if (isFinite(length)) {
      length = length | 0;
      if (encoding === undefined) encoding = 'utf8';
    } else {
      encoding = length;
      length = undefined;
    } // legacy write(string, encoding, offset, length) - remove in v0.13

  } else {
    throw new Error('Buffer.write(string, encoding, offset[, length]) is no longer supported');
  }

  var remaining = this.length - offset;
  if (length === undefined || length > remaining) length = remaining;

  if (string.length > 0 && (length < 0 || offset < 0) || offset > this.length) {
    throw new RangeError('Attempt to write outside buffer bounds');
  }

  if (!encoding) encoding = 'utf8';
  var loweredCase = false;

  for (;;) {
    switch (encoding) {
      case 'hex':
        return hexWrite(this, string, offset, length);

      case 'utf8':
      case 'utf-8':
        return utf8Write(this, string, offset, length);

      case 'ascii':
        return asciiWrite(this, string, offset, length);

      case 'latin1':
      case 'binary':
        return latin1Write(this, string, offset, length);

      case 'base64':
        // Warning: maxLength not taken into account in base64Write
        return base64Write(this, string, offset, length);

      case 'ucs2':
      case 'ucs-2':
      case 'utf16le':
      case 'utf-16le':
        return ucs2Write(this, string, offset, length);

      default:
        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding);
        encoding = ('' + encoding).toLowerCase();
        loweredCase = true;
    }
  }
};

Buffer.prototype.toJSON = function toJSON() {
  return {
    type: 'Buffer',
    data: Array.prototype.slice.call(this._arr || this, 0)
  };
};

function base64Slice(buf, start, end) {
  if (start === 0 && end === buf.length) {
    return base64.fromByteArray(buf);
  } else {
    return base64.fromByteArray(buf.slice(start, end));
  }
}

function utf8Slice(buf, start, end) {
  end = Math.min(buf.length, end);
  var res = [];
  var i = start;

  while (i < end) {
    var firstByte = buf[i];
    var codePoint = null;
    var bytesPerSequence = firstByte > 0xEF ? 4 : firstByte > 0xDF ? 3 : firstByte > 0xBF ? 2 : 1;

    if (i + bytesPerSequence <= end) {
      var secondByte, thirdByte, fourthByte, tempCodePoint;

      switch (bytesPerSequence) {
        case 1:
          if (firstByte < 0x80) {
            codePoint = firstByte;
          }

          break;

        case 2:
          secondByte = buf[i + 1];

          if ((secondByte & 0xC0) === 0x80) {
            tempCodePoint = (firstByte & 0x1F) << 0x6 | secondByte & 0x3F;

            if (tempCodePoint > 0x7F) {
              codePoint = tempCodePoint;
            }
          }

          break;

        case 3:
          secondByte = buf[i + 1];
          thirdByte = buf[i + 2];

          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
            tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | thirdByte & 0x3F;

            if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
              codePoint = tempCodePoint;
            }
          }

          break;

        case 4:
          secondByte = buf[i + 1];
          thirdByte = buf[i + 2];
          fourthByte = buf[i + 3];

          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
            tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | fourthByte & 0x3F;

            if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
              codePoint = tempCodePoint;
            }
          }

      }
    }

    if (codePoint === null) {
      // we did not generate a valid codePoint so insert a
      // replacement char (U+FFFD) and advance only 1 byte
      codePoint = 0xFFFD;
      bytesPerSequence = 1;
    } else if (codePoint > 0xFFFF) {
      // encode to utf16 (surrogate pair dance)
      codePoint -= 0x10000;
      res.push(codePoint >>> 10 & 0x3FF | 0xD800);
      codePoint = 0xDC00 | codePoint & 0x3FF;
    }

    res.push(codePoint);
    i += bytesPerSequence;
  }

  return decodeCodePointsArray(res);
} // Based on http://stackoverflow.com/a/22747272/680742, the browser with
// the lowest limit is Chrome, with 0x10000 args.
// We go 1 magnitude less, for safety


var MAX_ARGUMENTS_LENGTH = 0x1000;

function decodeCodePointsArray(codePoints) {
  var len = codePoints.length;

  if (len <= MAX_ARGUMENTS_LENGTH) {
    return String.fromCharCode.apply(String, codePoints); // avoid extra slice()
  } // Decode in chunks to avoid "call stack size exceeded".


  var res = '';
  var i = 0;

  while (i < len) {
    res += String.fromCharCode.apply(String, codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH));
  }

  return res;
}

function asciiSlice(buf, start, end) {
  var ret = '';
  end = Math.min(buf.length, end);

  for (var i = start; i < end; ++i) {
    ret += String.fromCharCode(buf[i] & 0x7F);
  }

  return ret;
}

function latin1Slice(buf, start, end) {
  var ret = '';
  end = Math.min(buf.length, end);

  for (var i = start; i < end; ++i) {
    ret += String.fromCharCode(buf[i]);
  }

  return ret;
}

function hexSlice(buf, start, end) {
  var len = buf.length;
  if (!start || start < 0) start = 0;
  if (!end || end < 0 || end > len) end = len;
  var out = '';

  for (var i = start; i < end; ++i) {
    out += toHex(buf[i]);
  }

  return out;
}

function utf16leSlice(buf, start, end) {
  var bytes = buf.slice(start, end);
  var res = '';

  for (var i = 0; i < bytes.length; i += 2) {
    res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256);
  }

  return res;
}

Buffer.prototype.slice = function slice(start, end) {
  var len = this.length;
  start = ~~start;
  end = end === undefined ? len : ~~end;

  if (start < 0) {
    start += len;
    if (start < 0) start = 0;
  } else if (start > len) {
    start = len;
  }

  if (end < 0) {
    end += len;
    if (end < 0) end = 0;
  } else if (end > len) {
    end = len;
  }

  if (end < start) end = start;
  var newBuf;

  if (Buffer.TYPED_ARRAY_SUPPORT) {
    newBuf = this.subarray(start, end);
    newBuf.__proto__ = Buffer.prototype;
  } else {
    var sliceLen = end - start;
    newBuf = new Buffer(sliceLen, undefined);

    for (var i = 0; i < sliceLen; ++i) {
      newBuf[i] = this[i + start];
    }
  }

  return newBuf;
};
/*
 * Need to make sure that buffer isn't trying to write out of bounds.
 */


function checkOffset(offset, ext, length) {
  if (offset % 1 !== 0 || offset < 0) throw new RangeError('offset is not uint');
  if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length');
}

Buffer.prototype.readUIntLE = function readUIntLE(offset, byteLength, noAssert) {
  offset = offset | 0;
  byteLength = byteLength | 0;
  if (!noAssert) checkOffset(offset, byteLength, this.length);
  var val = this[offset];
  var mul = 1;
  var i = 0;

  while (++i < byteLength && (mul *= 0x100)) {
    val += this[offset + i] * mul;
  }

  return val;
};

Buffer.prototype.readUIntBE = function readUIntBE(offset, byteLength, noAssert) {
  offset = offset | 0;
  byteLength = byteLength | 0;

  if (!noAssert) {
    checkOffset(offset, byteLength, this.length);
  }

  var val = this[offset + --byteLength];
  var mul = 1;

  while (byteLength > 0 && (mul *= 0x100)) {
    val += this[offset + --byteLength] * mul;
  }

  return val;
};

Buffer.prototype.readUInt8 = function readUInt8(offset, noAssert) {
  if (!noAssert) checkOffset(offset, 1, this.length);
  return this[offset];
};

Buffer.prototype.readUInt16LE = function readUInt16LE(offset, noAssert) {
  if (!noAssert) checkOffset(offset, 2, this.length);
  return this[offset] | this[offset + 1] << 8;
};

Buffer.prototype.readUInt16BE = function readUInt16BE(offset, noAssert) {
  if (!noAssert) checkOffset(offset, 2, this.length);
  return this[offset] << 8 | this[offset + 1];
};

Buffer.prototype.readUInt32LE = function readUInt32LE(offset, noAssert) {
  if (!noAssert) checkOffset(offset, 4, this.length);
  return (this[offset] | this[offset + 1] << 8 | this[offset + 2] << 16) + this[offset + 3] * 0x1000000;
};

Buffer.prototype.readUInt32BE = function readUInt32BE(offset, noAssert) {
  if (!noAssert) checkOffset(offset, 4, this.length);
  return this[offset] * 0x1000000 + (this[offset + 1] << 16 | this[offset + 2] << 8 | this[offset + 3]);
};

Buffer.prototype.readIntLE = function readIntLE(offset, byteLength, noAssert) {
  offset = offset | 0;
  byteLength = byteLength | 0;
  if (!noAssert) checkOffset(offset, byteLength, this.length);
  var val = this[offset];
  var mul = 1;
  var i = 0;

  while (++i < byteLength && (mul *= 0x100)) {
    val += this[offset + i] * mul;
  }

  mul *= 0x80;
  if (val >= mul) val -= Math.pow(2, 8 * byteLength);
  return val;
};

Buffer.prototype.readIntBE = function readIntBE(offset, byteLength, noAssert) {
  offset = offset | 0;
  byteLength = byteLength | 0;
  if (!noAssert) checkOffset(offset, byteLength, this.length);
  var i = byteLength;
  var mul = 1;
  var val = this[offset + --i];

  while (i > 0 && (mul *= 0x100)) {
    val += this[offset + --i] * mul;
  }

  mul *= 0x80;
  if (val >= mul) val -= Math.pow(2, 8 * byteLength);
  return val;
};

Buffer.prototype.readInt8 = function readInt8(offset, noAssert) {
  if (!noAssert) checkOffset(offset, 1, this.length);
  if (!(this[offset] & 0x80)) return this[offset];
  return (0xff - this[offset] + 1) * -1;
};

Buffer.prototype.readInt16LE = function readInt16LE(offset, noAssert) {
  if (!noAssert) checkOffset(offset, 2, this.length);
  var val = this[offset] | this[offset + 1] << 8;
  return val & 0x8000 ? val | 0xFFFF0000 : val;
};

Buffer.prototype.readInt16BE = function readInt16BE(offset, noAssert) {
  if (!noAssert) checkOffset(offset, 2, this.length);
  var val = this[offset + 1] | this[offset] << 8;
  return val & 0x8000 ? val | 0xFFFF0000 : val;
};

Buffer.prototype.readInt32LE = function readInt32LE(offset, noAssert) {
  if (!noAssert) checkOffset(offset, 4, this.length);
  return this[offset] | this[offset + 1] << 8 | this[offset + 2] << 16 | this[offset + 3] << 24;
};

Buffer.prototype.readInt32BE = function readInt32BE(offset, noAssert) {
  if (!noAssert) checkOffset(offset, 4, this.length);
  return this[offset] << 24 | this[offset + 1] << 16 | this[offset + 2] << 8 | this[offset + 3];
};

Buffer.prototype.readFloatLE = function readFloatLE(offset, noAssert) {
  if (!noAssert) checkOffset(offset, 4, this.length);
  return ieee754.read(this, offset, true, 23, 4);
};

Buffer.prototype.readFloatBE = function readFloatBE(offset, noAssert) {
  if (!noAssert) checkOffset(offset, 4, this.length);
  return ieee754.read(this, offset, false, 23, 4);
};

Buffer.prototype.readDoubleLE = function readDoubleLE(offset, noAssert) {
  if (!noAssert) checkOffset(offset, 8, this.length);
  return ieee754.read(this, offset, true, 52, 8);
};

Buffer.prototype.readDoubleBE = function readDoubleBE(offset, noAssert) {
  if (!noAssert) checkOffset(offset, 8, this.length);
  return ieee754.read(this, offset, false, 52, 8);
};

function checkInt(buf, value, offset, ext, max, min) {
  if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance');
  if (value > max || value < min) throw new RangeError('"value" argument is out of bounds');
  if (offset + ext > buf.length) throw new RangeError('Index out of range');
}

Buffer.prototype.writeUIntLE = function writeUIntLE(value, offset, byteLength, noAssert) {
  value = +value;
  offset = offset | 0;
  byteLength = byteLength | 0;

  if (!noAssert) {
    var maxBytes = Math.pow(2, 8 * byteLength) - 1;
    checkInt(this, value, offset, byteLength, maxBytes, 0);
  }

  var mul = 1;
  var i = 0;
  this[offset] = value & 0xFF;

  while (++i < byteLength && (mul *= 0x100)) {
    this[offset + i] = value / mul & 0xFF;
  }

  return offset + byteLength;
};

Buffer.prototype.writeUIntBE = function writeUIntBE(value, offset, byteLength, noAssert) {
  value = +value;
  offset = offset | 0;
  byteLength = byteLength | 0;

  if (!noAssert) {
    var maxBytes = Math.pow(2, 8 * byteLength) - 1;
    checkInt(this, value, offset, byteLength, maxBytes, 0);
  }

  var i = byteLength - 1;
  var mul = 1;
  this[offset + i] = value & 0xFF;

  while (--i >= 0 && (mul *= 0x100)) {
    this[offset + i] = value / mul & 0xFF;
  }

  return offset + byteLength;
};

Buffer.prototype.writeUInt8 = function writeUInt8(value, offset, noAssert) {
  value = +value;
  offset = offset | 0;
  if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0);
  if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value);
  this[offset] = value & 0xff;
  return offset + 1;
};

function objectWriteUInt16(buf, value, offset, littleEndian) {
  if (value < 0) value = 0xffff + value + 1;

  for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {
    buf[offset + i] = (value & 0xff << 8 * (littleEndian ? i : 1 - i)) >>> (littleEndian ? i : 1 - i) * 8;
  }
}

Buffer.prototype.writeUInt16LE = function writeUInt16LE(value, offset, noAssert) {
  value = +value;
  offset = offset | 0;
  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0);

  if (Buffer.TYPED_ARRAY_SUPPORT) {
    this[offset] = value & 0xff;
    this[offset + 1] = value >>> 8;
  } else {
    objectWriteUInt16(this, value, offset, true);
  }

  return offset + 2;
};

Buffer.prototype.writeUInt16BE = function writeUInt16BE(value, offset, noAssert) {
  value = +value;
  offset = offset | 0;
  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0);

  if (Buffer.TYPED_ARRAY_SUPPORT) {
    this[offset] = value >>> 8;
    this[offset + 1] = value & 0xff;
  } else {
    objectWriteUInt16(this, value, offset, false);
  }

  return offset + 2;
};

function objectWriteUInt32(buf, value, offset, littleEndian) {
  if (value < 0) value = 0xffffffff + value + 1;

  for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {
    buf[offset + i] = value >>> (littleEndian ? i : 3 - i) * 8 & 0xff;
  }
}

Buffer.prototype.writeUInt32LE = function writeUInt32LE(value, offset, noAssert) {
  value = +value;
  offset = offset | 0;
  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0);

  if (Buffer.TYPED_ARRAY_SUPPORT) {
    this[offset + 3] = value >>> 24;
    this[offset + 2] = value >>> 16;
    this[offset + 1] = value >>> 8;
    this[offset] = value & 0xff;
  } else {
    objectWriteUInt32(this, value, offset, true);
  }

  return offset + 4;
};

Buffer.prototype.writeUInt32BE = function writeUInt32BE(value, offset, noAssert) {
  value = +value;
  offset = offset | 0;
  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0);

  if (Buffer.TYPED_ARRAY_SUPPORT) {
    this[offset] = value >>> 24;
    this[offset + 1] = value >>> 16;
    this[offset + 2] = value >>> 8;
    this[offset + 3] = value & 0xff;
  } else {
    objectWriteUInt32(this, value, offset, false);
  }

  return offset + 4;
};

Buffer.prototype.writeIntLE = function writeIntLE(value, offset, byteLength, noAssert) {
  value = +value;
  offset = offset | 0;

  if (!noAssert) {
    var limit = Math.pow(2, 8 * byteLength - 1);
    checkInt(this, value, offset, byteLength, limit - 1, -limit);
  }

  var i = 0;
  var mul = 1;
  var sub = 0;
  this[offset] = value & 0xFF;

  while (++i < byteLength && (mul *= 0x100)) {
    if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {
      sub = 1;
    }

    this[offset + i] = (value / mul >> 0) - sub & 0xFF;
  }

  return offset + byteLength;
};

Buffer.prototype.writeIntBE = function writeIntBE(value, offset, byteLength, noAssert) {
  value = +value;
  offset = offset | 0;

  if (!noAssert) {
    var limit = Math.pow(2, 8 * byteLength - 1);
    checkInt(this, value, offset, byteLength, limit - 1, -limit);
  }

  var i = byteLength - 1;
  var mul = 1;
  var sub = 0;
  this[offset + i] = value & 0xFF;

  while (--i >= 0 && (mul *= 0x100)) {
    if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {
      sub = 1;
    }

    this[offset + i] = (value / mul >> 0) - sub & 0xFF;
  }

  return offset + byteLength;
};

Buffer.prototype.writeInt8 = function writeInt8(value, offset, noAssert) {
  value = +value;
  offset = offset | 0;
  if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80);
  if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value);
  if (value < 0) value = 0xff + value + 1;
  this[offset] = value & 0xff;
  return offset + 1;
};

Buffer.prototype.writeInt16LE = function writeInt16LE(value, offset, noAssert) {
  value = +value;
  offset = offset | 0;
  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000);

  if (Buffer.TYPED_ARRAY_SUPPORT) {
    this[offset] = value & 0xff;
    this[offset + 1] = value >>> 8;
  } else {
    objectWriteUInt16(this, value, offset, true);
  }

  return offset + 2;
};

Buffer.prototype.writeInt16BE = function writeInt16BE(value, offset, noAssert) {
  value = +value;
  offset = offset | 0;
  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000);

  if (Buffer.TYPED_ARRAY_SUPPORT) {
    this[offset] = value >>> 8;
    this[offset + 1] = value & 0xff;
  } else {
    objectWriteUInt16(this, value, offset, false);
  }

  return offset + 2;
};

Buffer.prototype.writeInt32LE = function writeInt32LE(value, offset, noAssert) {
  value = +value;
  offset = offset | 0;
  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000);

  if (Buffer.TYPED_ARRAY_SUPPORT) {
    this[offset] = value & 0xff;
    this[offset + 1] = value >>> 8;
    this[offset + 2] = value >>> 16;
    this[offset + 3] = value >>> 24;
  } else {
    objectWriteUInt32(this, value, offset, true);
  }

  return offset + 4;
};

Buffer.prototype.writeInt32BE = function writeInt32BE(value, offset, noAssert) {
  value = +value;
  offset = offset | 0;
  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000);
  if (value < 0) value = 0xffffffff + value + 1;

  if (Buffer.TYPED_ARRAY_SUPPORT) {
    this[offset] = value >>> 24;
    this[offset + 1] = value >>> 16;
    this[offset + 2] = value >>> 8;
    this[offset + 3] = value & 0xff;
  } else {
    objectWriteUInt32(this, value, offset, false);
  }

  return offset + 4;
};

function checkIEEE754(buf, value, offset, ext, max, min) {
  if (offset + ext > buf.length) throw new RangeError('Index out of range');
  if (offset < 0) throw new RangeError('Index out of range');
}

function writeFloat(buf, value, offset, littleEndian, noAssert) {
  if (!noAssert) {
    checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38);
  }

  ieee754.write(buf, value, offset, littleEndian, 23, 4);
  return offset + 4;
}

Buffer.prototype.writeFloatLE = function writeFloatLE(value, offset, noAssert) {
  return writeFloat(this, value, offset, true, noAssert);
};

Buffer.prototype.writeFloatBE = function writeFloatBE(value, offset, noAssert) {
  return writeFloat(this, value, offset, false, noAssert);
};

function writeDouble(buf, value, offset, littleEndian, noAssert) {
  if (!noAssert) {
    checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308);
  }

  ieee754.write(buf, value, offset, littleEndian, 52, 8);
  return offset + 8;
}

Buffer.prototype.writeDoubleLE = function writeDoubleLE(value, offset, noAssert) {
  return writeDouble(this, value, offset, true, noAssert);
};

Buffer.prototype.writeDoubleBE = function writeDoubleBE(value, offset, noAssert) {
  return writeDouble(this, value, offset, false, noAssert);
}; // copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)


Buffer.prototype.copy = function copy(target, targetStart, start, end) {
  if (!start) start = 0;
  if (!end && end !== 0) end = this.length;
  if (targetStart >= target.length) targetStart = target.length;
  if (!targetStart) targetStart = 0;
  if (end > 0 && end < start) end = start; // Copy 0 bytes; we're done

  if (end === start) return 0;
  if (target.length === 0 || this.length === 0) return 0; // Fatal error conditions

  if (targetStart < 0) {
    throw new RangeError('targetStart out of bounds');
  }

  if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds');
  if (end < 0) throw new RangeError('sourceEnd out of bounds'); // Are we oob?

  if (end > this.length) end = this.length;

  if (target.length - targetStart < end - start) {
    end = target.length - targetStart + start;
  }

  var len = end - start;
  var i;

  if (this === target && start < targetStart && targetStart < end) {
    // descending copy from end
    for (i = len - 1; i >= 0; --i) {
      target[i + targetStart] = this[i + start];
    }
  } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {
    // ascending copy from start
    for (i = 0; i < len; ++i) {
      target[i + targetStart] = this[i + start];
    }
  } else {
    Uint8Array.prototype.set.call(target, this.subarray(start, start + len), targetStart);
  }

  return len;
}; // Usage:
//    buffer.fill(number[, offset[, end]])
//    buffer.fill(buffer[, offset[, end]])
//    buffer.fill(string[, offset[, end]][, encoding])


Buffer.prototype.fill = function fill(val, start, end, encoding) {
  // Handle string cases:
  if (typeof val === 'string') {
    if (typeof start === 'string') {
      encoding = start;
      start = 0;
      end = this.length;
    } else if (typeof end === 'string') {
      encoding = end;
      end = this.length;
    }

    if (val.length === 1) {
      var code = val.charCodeAt(0);

      if (code < 256) {
        val = code;
      }
    }

    if (encoding !== undefined && typeof encoding !== 'string') {
      throw new TypeError('encoding must be a string');
    }

    if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {
      throw new TypeError('Unknown encoding: ' + encoding);
    }
  } else if (typeof val === 'number') {
    val = val & 255;
  } // Invalid ranges are not set to a default, so can range check early.


  if (start < 0 || this.length < start || this.length < end) {
    throw new RangeError('Out of range index');
  }

  if (end <= start) {
    return this;
  }

  start = start >>> 0;
  end = end === undefined ? this.length : end >>> 0;
  if (!val) val = 0;
  var i;

  if (typeof val === 'number') {
    for (i = start; i < end; ++i) {
      this[i] = val;
    }
  } else {
    var bytes = Buffer.isBuffer(val) ? val : utf8ToBytes(new Buffer(val, encoding).toString());
    var len = bytes.length;

    for (i = 0; i < end - start; ++i) {
      this[i + start] = bytes[i % len];
    }
  }

  return this;
}; // HELPER FUNCTIONS
// ================


var INVALID_BASE64_RE = /[^+\/0-9A-Za-z-_]/g;

function base64clean(str) {
  // Node strips out invalid characters like \n and \t from the string, base64-js does not
  str = stringtrim(str).replace(INVALID_BASE64_RE, ''); // Node converts strings with length < 2 to ''

  if (str.length < 2) return ''; // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not

  while (str.length % 4 !== 0) {
    str = str + '=';
  }

  return str;
}

function stringtrim(str) {
  if (str.trim) return str.trim();
  return str.replace(/^\s+|\s+$/g, '');
}

function toHex(n) {
  if (n < 16) return '0' + n.toString(16);
  return n.toString(16);
}

function utf8ToBytes(string, units) {
  units = units || Infinity;
  var codePoint;
  var length = string.length;
  var leadSurrogate = null;
  var bytes = [];

  for (var i = 0; i < length; ++i) {
    codePoint = string.charCodeAt(i); // is surrogate component

    if (codePoint > 0xD7FF && codePoint < 0xE000) {
      // last char was a lead
      if (!leadSurrogate) {
        // no lead yet
        if (codePoint > 0xDBFF) {
          // unexpected trail
          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);
          continue;
        } else if (i + 1 === length) {
          // unpaired lead
          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);
          continue;
        } // valid lead


        leadSurrogate = codePoint;
        continue;
      } // 2 leads in a row


      if (codePoint < 0xDC00) {
        if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);
        leadSurrogate = codePoint;
        continue;
      } // valid surrogate pair


      codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000;
    } else if (leadSurrogate) {
      // valid bmp char, but last char was a lead
      if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);
    }

    leadSurrogate = null; // encode utf8

    if (codePoint < 0x80) {
      if ((units -= 1) < 0) break;
      bytes.push(codePoint);
    } else if (codePoint < 0x800) {
      if ((units -= 2) < 0) break;
      bytes.push(codePoint >> 0x6 | 0xC0, codePoint & 0x3F | 0x80);
    } else if (codePoint < 0x10000) {
      if ((units -= 3) < 0) break;
      bytes.push(codePoint >> 0xC | 0xE0, codePoint >> 0x6 & 0x3F | 0x80, codePoint & 0x3F | 0x80);
    } else if (codePoint < 0x110000) {
      if ((units -= 4) < 0) break;
      bytes.push(codePoint >> 0x12 | 0xF0, codePoint >> 0xC & 0x3F | 0x80, codePoint >> 0x6 & 0x3F | 0x80, codePoint & 0x3F | 0x80);
    } else {
      throw new Error('Invalid code point');
    }
  }

  return bytes;
}

function asciiToBytes(str) {
  var byteArray = [];

  for (var i = 0; i < str.length; ++i) {
    // Node's code seems to be doing this and not & 0x7F..
    byteArray.push(str.charCodeAt(i) & 0xFF);
  }

  return byteArray;
}

function utf16leToBytes(str, units) {
  var c, hi, lo;
  var byteArray = [];

  for (var i = 0; i < str.length; ++i) {
    if ((units -= 2) < 0) break;
    c = str.charCodeAt(i);
    hi = c >> 8;
    lo = c % 256;
    byteArray.push(lo);
    byteArray.push(hi);
  }

  return byteArray;
}

function base64ToBytes(str) {
  return base64.toByteArray(base64clean(str));
}

function blitBuffer(src, dst, offset, length) {
  for (var i = 0; i < length; ++i) {
    if (i + offset >= dst.length || i >= src.length) break;
    dst[i + offset] = src[i];
  }

  return i;
}

function isnan(val) {
  return val !== val; // eslint-disable-line no-self-compare
}
/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(19)))

/***/ }),

/***/ 145:
/***/ (function(module, exports, __webpack_require__) {

"use strict";


exports.byteLength = byteLength;
exports.toByteArray = toByteArray;
exports.fromByteArray = fromByteArray;
var lookup = [];
var revLookup = [];
var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array;
var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';

for (var i = 0, len = code.length; i < len; ++i) {
  lookup[i] = code[i];
  revLookup[code.charCodeAt(i)] = i;
} // Support decoding URL-safe base64 strings, as Node.js does.
// See: https://en.wikipedia.org/wiki/Base64#URL_applications


revLookup['-'.charCodeAt(0)] = 62;
revLookup['_'.charCodeAt(0)] = 63;

function getLens(b64) {
  var len = b64.length;

  if (len % 4 > 0) {
    throw new Error('Invalid string. Length must be a multiple of 4');
  } // Trim off extra bytes after placeholder bytes are found
  // See: https://github.com/beatgammit/base64-js/issues/42


  var validLen = b64.indexOf('=');
  if (validLen === -1) validLen = len;
  var placeHoldersLen = validLen === len ? 0 : 4 - validLen % 4;
  return [validLen, placeHoldersLen];
} // base64 is 4/3 + up to two characters of the original data


function byteLength(b64) {
  var lens = getLens(b64);
  var validLen = lens[0];
  var placeHoldersLen = lens[1];
  return (validLen + placeHoldersLen) * 3 / 4 - placeHoldersLen;
}

function _byteLength(b64, validLen, placeHoldersLen) {
  return (validLen + placeHoldersLen) * 3 / 4 - placeHoldersLen;
}

function toByteArray(b64) {
  var tmp;
  var lens = getLens(b64);
  var validLen = lens[0];
  var placeHoldersLen = lens[1];
  var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen));
  var curByte = 0; // if there are placeholders, only get up to the last complete 4 chars

  var len = placeHoldersLen > 0 ? validLen - 4 : validLen;
  var i;

  for (i = 0; i < len; i += 4) {
    tmp = revLookup[b64.charCodeAt(i)] << 18 | revLookup[b64.charCodeAt(i + 1)] << 12 | revLookup[b64.charCodeAt(i + 2)] << 6 | revLookup[b64.charCodeAt(i + 3)];
    arr[curByte++] = tmp >> 16 & 0xFF;
    arr[curByte++] = tmp >> 8 & 0xFF;
    arr[curByte++] = tmp & 0xFF;
  }

  if (placeHoldersLen === 2) {
    tmp = revLookup[b64.charCodeAt(i)] << 2 | revLookup[b64.charCodeAt(i + 1)] >> 4;
    arr[curByte++] = tmp & 0xFF;
  }

  if (placeHoldersLen === 1) {
    tmp = revLookup[b64.charCodeAt(i)] << 10 | revLookup[b64.charCodeAt(i + 1)] << 4 | revLookup[b64.charCodeAt(i + 2)] >> 2;
    arr[curByte++] = tmp >> 8 & 0xFF;
    arr[curByte++] = tmp & 0xFF;
  }

  return arr;
}

function tripletToBase64(num) {
  return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F];
}

function encodeChunk(uint8, start, end) {
  var tmp;
  var output = [];

  for (var i = start; i < end; i += 3) {
    tmp = (uint8[i] << 16 & 0xFF0000) + (uint8[i + 1] << 8 & 0xFF00) + (uint8[i + 2] & 0xFF);
    output.push(tripletToBase64(tmp));
  }

  return output.join('');
}

function fromByteArray(uint8) {
  var tmp;
  var len = uint8.length;
  var extraBytes = len % 3; // if we have 1 byte left, pad 2 bytes

  var parts = [];
  var maxChunkLength = 16383; // must be multiple of 3
  // go through the array every three bytes, we'll deal with trailing stuff later

  for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {
    parts.push(encodeChunk(uint8, i, i + maxChunkLength > len2 ? len2 : i + maxChunkLength));
  } // pad the end with zeros, but make sure to not forget the extra bytes


  if (extraBytes === 1) {
    tmp = uint8[len - 1];
    parts.push(lookup[tmp >> 2] + lookup[tmp << 4 & 0x3F] + '==');
  } else if (extraBytes === 2) {
    tmp = (uint8[len - 2] << 8) + uint8[len - 1];
    parts.push(lookup[tmp >> 10] + lookup[tmp >> 4 & 0x3F] + lookup[tmp << 2 & 0x3F] + '=');
  }

  return parts.join('');
}

/***/ }),

/***/ 146:
/***/ (function(module, exports) {

exports.read = function (buffer, offset, isLE, mLen, nBytes) {
  var e, m;
  var eLen = nBytes * 8 - mLen - 1;
  var eMax = (1 << eLen) - 1;
  var eBias = eMax >> 1;
  var nBits = -7;
  var i = isLE ? nBytes - 1 : 0;
  var d = isLE ? -1 : 1;
  var s = buffer[offset + i];
  i += d;
  e = s & (1 << -nBits) - 1;
  s >>= -nBits;
  nBits += eLen;

  for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}

  m = e & (1 << -nBits) - 1;
  e >>= -nBits;
  nBits += mLen;

  for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}

  if (e === 0) {
    e = 1 - eBias;
  } else if (e === eMax) {
    return m ? NaN : (s ? -1 : 1) * Infinity;
  } else {
    m = m + Math.pow(2, mLen);
    e = e - eBias;
  }

  return (s ? -1 : 1) * m * Math.pow(2, e - mLen);
};

exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
  var e, m, c;
  var eLen = nBytes * 8 - mLen - 1;
  var eMax = (1 << eLen) - 1;
  var eBias = eMax >> 1;
  var rt = mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0;
  var i = isLE ? 0 : nBytes - 1;
  var d = isLE ? 1 : -1;
  var s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0;
  value = Math.abs(value);

  if (isNaN(value) || value === Infinity) {
    m = isNaN(value) ? 1 : 0;
    e = eMax;
  } else {
    e = Math.floor(Math.log(value) / Math.LN2);

    if (value * (c = Math.pow(2, -e)) < 1) {
      e--;
      c *= 2;
    }

    if (e + eBias >= 1) {
      value += rt / c;
    } else {
      value += rt * Math.pow(2, 1 - eBias);
    }

    if (value * c >= 2) {
      e++;
      c /= 2;
    }

    if (e + eBias >= eMax) {
      m = 0;
      e = eMax;
    } else if (e + eBias >= 1) {
      m = (value * c - 1) * Math.pow(2, mLen);
      e = e + eBias;
    } else {
      m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen);
      e = 0;
    }
  }

  for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}

  e = e << mLen | m;
  eLen += mLen;

  for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}

  buffer[offset + i - d] |= s * 128;
};

/***/ }),

/***/ 147:
/***/ (function(module, exports) {

var toString = {}.toString;

module.exports = Array.isArray || function (arr) {
  return toString.call(arr) == '[object Array]';
};

/***/ }),

/***/ 148:
/***/ (function(module, exports) {

/* (ignored) */

/***/ }),

/***/ 149:
/***/ (function(module, exports) {

/* (ignored) */

/***/ }),

/***/ 150:
/***/ (function(module, exports) {

/* (ignored) */

/***/ }),

/***/ 151:
/***/ (function(module, exports) {

/* (ignored) */

/***/ }),

/***/ 152:
/***/ (function(module, exports) {

/* (ignored) */

/***/ }),

/***/ 19:
/***/ (function(module, exports) {

var g; // This works in non-strict mode

g = function () {
  return this;
}();

try {
  // This works if eval is allowed (see CSP)
  g = g || new Function("return this")();
} catch (e) {
  // This works if the window reference is available
  if (typeof window === "object") g = window;
} // g can still be undefined, but nothing to do about it...
// We return undefined, instead of nothing here, so it's
// easier to handle this case. if(!global) { ...}


module.exports = g;

/***/ }),

/***/ 39:
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.initFancybox = void 0;
const jquery_1 = __importDefault(__webpack_require__(5));
__webpack_require__(40);
__webpack_require__(41);
function initFancybox(name) {
    const pageDataElem = jquery_1.default("#page-data");
    const lang = pageDataElem.data("lang");
    jquery_1.default(`[data-fancybox="${name}"]`).fancybox({
        infobar: false,
        lang,
        i18n: {
            cs: {
                CLOSE: "Zavřít",
                NEXT: "Další",
                PREV: "Předchozí",
                ERROR: "Obsah nelze načíst. Zkuste to prosím později.",
                PLAY_START: "Spustit automatické přehrávání",
                PLAY_STOP: "Zastavit automatické přehrávání",
                FULL_SCREEN: "Celá obrazovka",
                THUMBS: "Náhledy",
                DOWNLOAD: "Stáhnout",
                SHARE: "Sdílet",
                ZOOM: "Přiblížit/Oddálit"
            }
        },
        buttons: [
            "zoom",
            "share",
            "slideShow",
            "fullScreen",
            // "download",
            "thumbs",
            "close"
        ],
        share: {
            url: function (instance, item) {
                return ((!instance.currentHash && !(item.type === "inline" || item.type === "html")
                    ? item.origSrc || item.src
                    : false) || window.location);
            },
            tpl: '<div class="fancybox-share">' +
                "<h1>{{SHARE}}</h1>" +
                "<p>" +
                '<a class="fancybox-share__button fancybox-share__button--fb" href="https://www.facebook.com/sharer/sharer.php?u={{url}}">' +
                '<svg viewBox="0 0 512 512" xmlns="http://www.w3.org/2000/svg"><path d="m287 456v-299c0-21 6-35 35-35h38v-63c-7-1-29-3-55-3-54 0-91 33-91 94v306m143-254h-205v72h196" /></svg>' +
                "<span>Facebook</span>" +
                "</a>" +
                '<a class="fancybox-share__button fancybox-share__button--tw" href="https://twitter.com/intent/tweet?url={{url}}&text={{descr}}">' +
                '<svg viewBox="0 0 512 512" xmlns="http://www.w3.org/2000/svg"><path d="m456 133c-14 7-31 11-47 13 17-10 30-27 37-46-15 10-34 16-52 20-61-62-157-7-141 75-68-3-129-35-169-85-22 37-11 86 26 109-13 0-26-4-37-9 0 39 28 72 65 80-12 3-25 4-37 2 10 33 41 57 77 57-42 30-77 38-122 34 170 111 378-32 359-208 16-11 30-25 41-42z" /></svg>' +
                "<span>Twitter</span>" +
                "</a>" +
                "</p>" +
                '<p><input class="fancybox-share__input" type="text" value="{{url_raw}}" /></p>' +
                "</div>"
        }
    });
}
exports.initFancybox = initFancybox;


/***/ }),

/***/ 40:
/***/ (function(module, exports, __webpack_require__) {

/* WEBPACK VAR INJECTION */(function(jQuery) {// ==================================================
// fancyBox v3.5.7
//
// Licensed GPLv3 for open source use
// or fancyBox Commercial License for commercial use
//
// http://fancyapps.com/fancybox/
// Copyright 2019 fancyApps
//
// ==================================================
!function (t, e, n, o) {
  "use strict";

  function i(t, e) {
    var o,
        i,
        a,
        s = [],
        r = 0;
    t && t.isDefaultPrevented() || (t.preventDefault(), e = e || {}, t && t.data && (e = h(t.data.options, e)), o = e.$target || n(t.currentTarget).trigger("blur"), (a = n.fancybox.getInstance()) && a.$trigger && a.$trigger.is(o) || (e.selector ? s = n(e.selector) : (i = o.attr("data-fancybox") || "", i ? (s = t.data ? t.data.items : [], s = s.length ? s.filter('[data-fancybox="' + i + '"]') : n('[data-fancybox="' + i + '"]')) : s = [o]), r = n(s).index(o), r < 0 && (r = 0), a = n.fancybox.open(s, e, r), a.$trigger = o));
  }

  if (t.console = t.console || {
    info: function (t) {}
  }, n) {
    if (n.fn.fancybox) return void console.info("fancyBox already initialized");

    var a = {
      closeExisting: !1,
      loop: !1,
      gutter: 50,
      keyboard: !0,
      preventCaptionOverlap: !0,
      arrows: !0,
      infobar: !0,
      smallBtn: "auto",
      toolbar: "auto",
      buttons: ["zoom", "slideShow", "thumbs", "close"],
      idleTime: 3,
      protect: !1,
      modal: !1,
      image: {
        preload: !1
      },
      ajax: {
        settings: {
          data: {
            fancybox: !0
          }
        }
      },
      iframe: {
        tpl: '<iframe id="fancybox-frame{rnd}" name="fancybox-frame{rnd}" class="fancybox-iframe" allowfullscreen="allowfullscreen" allow="autoplay; fullscreen" src=""></iframe>',
        preload: !0,
        css: {},
        attr: {
          scrolling: "auto"
        }
      },
      video: {
        tpl: '<video class="fancybox-video" controls controlsList="nodownload" poster="{{poster}}"><source src="{{src}}" type="{{format}}" />Sorry, your browser doesn\'t support embedded videos, <a href="{{src}}">download</a> and watch with your favorite video player!</video>',
        format: "",
        autoStart: !0
      },
      defaultType: "image",
      animationEffect: "zoom",
      animationDuration: 366,
      zoomOpacity: "auto",
      transitionEffect: "fade",
      transitionDuration: 366,
      slideClass: "",
      baseClass: "",
      baseTpl: '<div class="fancybox-container" role="dialog" tabindex="-1"><div class="fancybox-bg"></div><div class="fancybox-inner"><div class="fancybox-infobar"><span data-fancybox-index></span>&nbsp;/&nbsp;<span data-fancybox-count></span></div><div class="fancybox-toolbar">{{buttons}}</div><div class="fancybox-navigation">{{arrows}}</div><div class="fancybox-stage"></div><div class="fancybox-caption"><div class="fancybox-caption__body"></div></div></div></div>',
      spinnerTpl: '<div class="fancybox-loading"></div>',
      errorTpl: '<div class="fancybox-error"><p>{{ERROR}}</p></div>',
      btnTpl: {
        download: '<a download data-fancybox-download class="fancybox-button fancybox-button--download" title="{{DOWNLOAD}}" href="javascript:;"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M18.62 17.09V19H5.38v-1.91zm-2.97-6.96L17 11.45l-5 4.87-5-4.87 1.36-1.32 2.68 2.64V5h1.92v7.77z"/></svg></a>',
        zoom: '<button data-fancybox-zoom class="fancybox-button fancybox-button--zoom" title="{{ZOOM}}"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M18.7 17.3l-3-3a5.9 5.9 0 0 0-.6-7.6 5.9 5.9 0 0 0-8.4 0 5.9 5.9 0 0 0 0 8.4 5.9 5.9 0 0 0 7.7.7l3 3a1 1 0 0 0 1.3 0c.4-.5.4-1 0-1.5zM8.1 13.8a4 4 0 0 1 0-5.7 4 4 0 0 1 5.7 0 4 4 0 0 1 0 5.7 4 4 0 0 1-5.7 0z"/></svg></button>',
        close: '<button data-fancybox-close class="fancybox-button fancybox-button--close" title="{{CLOSE}}"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 10.6L6.6 5.2 5.2 6.6l5.4 5.4-5.4 5.4 1.4 1.4 5.4-5.4 5.4 5.4 1.4-1.4-5.4-5.4 5.4-5.4-1.4-1.4-5.4 5.4z"/></svg></button>',
        arrowLeft: '<button data-fancybox-prev class="fancybox-button fancybox-button--arrow_left" title="{{PREV}}"><div><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M11.28 15.7l-1.34 1.37L5 12l4.94-5.07 1.34 1.38-2.68 2.72H19v1.94H8.6z"/></svg></div></button>',
        arrowRight: '<button data-fancybox-next class="fancybox-button fancybox-button--arrow_right" title="{{NEXT}}"><div><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M15.4 12.97l-2.68 2.72 1.34 1.38L19 12l-4.94-5.07-1.34 1.38 2.68 2.72H5v1.94z"/></svg></div></button>',
        smallBtn: '<button type="button" data-fancybox-close class="fancybox-button fancybox-close-small" title="{{CLOSE}}"><svg xmlns="http://www.w3.org/2000/svg" version="1" viewBox="0 0 24 24"><path d="M13 12l5-5-1-1-5 5-5-5-1 1 5 5-5 5 1 1 5-5 5 5 1-1z"/></svg></button>'
      },
      parentEl: "body",
      hideScrollbar: !0,
      autoFocus: !0,
      backFocus: !0,
      trapFocus: !0,
      fullScreen: {
        autoStart: !1
      },
      touch: {
        vertical: !0,
        momentum: !0
      },
      hash: null,
      media: {},
      slideShow: {
        autoStart: !1,
        speed: 3e3
      },
      thumbs: {
        autoStart: !1,
        hideOnClose: !0,
        parentEl: ".fancybox-container",
        axis: "y"
      },
      wheel: "auto",
      onInit: n.noop,
      beforeLoad: n.noop,
      afterLoad: n.noop,
      beforeShow: n.noop,
      afterShow: n.noop,
      beforeClose: n.noop,
      afterClose: n.noop,
      onActivate: n.noop,
      onDeactivate: n.noop,
      clickContent: function (t, e) {
        return "image" === t.type && "zoom";
      },
      clickSlide: "close",
      clickOutside: "close",
      dblclickContent: !1,
      dblclickSlide: !1,
      dblclickOutside: !1,
      mobile: {
        preventCaptionOverlap: !1,
        idleTime: !1,
        clickContent: function (t, e) {
          return "image" === t.type && "toggleControls";
        },
        clickSlide: function (t, e) {
          return "image" === t.type ? "toggleControls" : "close";
        },
        dblclickContent: function (t, e) {
          return "image" === t.type && "zoom";
        },
        dblclickSlide: function (t, e) {
          return "image" === t.type && "zoom";
        }
      },
      lang: "en",
      i18n: {
        en: {
          CLOSE: "Close",
          NEXT: "Next",
          PREV: "Previous",
          ERROR: "The requested content cannot be loaded. <br/> Please try again later.",
          PLAY_START: "Start slideshow",
          PLAY_STOP: "Pause slideshow",
          FULL_SCREEN: "Full screen",
          THUMBS: "Thumbnails",
          DOWNLOAD: "Download",
          SHARE: "Share",
          ZOOM: "Zoom"
        },
        de: {
          CLOSE: "Schlie&szlig;en",
          NEXT: "Weiter",
          PREV: "Zur&uuml;ck",
          ERROR: "Die angeforderten Daten konnten nicht geladen werden. <br/> Bitte versuchen Sie es sp&auml;ter nochmal.",
          PLAY_START: "Diaschau starten",
          PLAY_STOP: "Diaschau beenden",
          FULL_SCREEN: "Vollbild",
          THUMBS: "Vorschaubilder",
          DOWNLOAD: "Herunterladen",
          SHARE: "Teilen",
          ZOOM: "Vergr&ouml;&szlig;ern"
        }
      }
    },
        s = n(t),
        r = n(e),
        c = 0,
        l = function (t) {
      return t && t.hasOwnProperty && t instanceof n;
    },
        d = function () {
      return t.requestAnimationFrame || t.webkitRequestAnimationFrame || t.mozRequestAnimationFrame || t.oRequestAnimationFrame || function (e) {
        return t.setTimeout(e, 1e3 / 60);
      };
    }(),
        u = function () {
      return t.cancelAnimationFrame || t.webkitCancelAnimationFrame || t.mozCancelAnimationFrame || t.oCancelAnimationFrame || function (e) {
        t.clearTimeout(e);
      };
    }(),
        f = function () {
      var t,
          n = e.createElement("fakeelement"),
          o = {
        transition: "transitionend",
        OTransition: "oTransitionEnd",
        MozTransition: "transitionend",
        WebkitTransition: "webkitTransitionEnd"
      };

      for (t in o) if (void 0 !== n.style[t]) return o[t];

      return "transitionend";
    }(),
        p = function (t) {
      return t && t.length && t[0].offsetHeight;
    },
        h = function (t, e) {
      var o = n.extend(!0, {}, t, e);
      return n.each(e, function (t, e) {
        n.isArray(e) && (o[t] = e);
      }), o;
    },
        g = function (t) {
      var o, i;
      return !(!t || t.ownerDocument !== e) && (n(".fancybox-container").css("pointer-events", "none"), o = {
        x: t.getBoundingClientRect().left + t.offsetWidth / 2,
        y: t.getBoundingClientRect().top + t.offsetHeight / 2
      }, i = e.elementFromPoint(o.x, o.y) === t, n(".fancybox-container").css("pointer-events", ""), i);
    },
        b = function (t, e, o) {
      var i = this;
      i.opts = h({
        index: o
      }, n.fancybox.defaults), n.isPlainObject(e) && (i.opts = h(i.opts, e)), n.fancybox.isMobile && (i.opts = h(i.opts, i.opts.mobile)), i.id = i.opts.id || ++c, i.currIndex = parseInt(i.opts.index, 10) || 0, i.prevIndex = null, i.prevPos = null, i.currPos = 0, i.firstRun = !0, i.group = [], i.slides = {}, i.addContent(t), i.group.length && i.init();
    };

    n.extend(b.prototype, {
      init: function () {
        var o,
            i,
            a = this,
            s = a.group[a.currIndex],
            r = s.opts;
        r.closeExisting && n.fancybox.close(!0), n("body").addClass("fancybox-active"), !n.fancybox.getInstance() && !1 !== r.hideScrollbar && !n.fancybox.isMobile && e.body.scrollHeight > t.innerHeight && (n("head").append('<style id="fancybox-style-noscroll" type="text/css">.compensate-for-scrollbar{margin-right:' + (t.innerWidth - e.documentElement.clientWidth) + "px;}</style>"), n("body").addClass("compensate-for-scrollbar")), i = "", n.each(r.buttons, function (t, e) {
          i += r.btnTpl[e] || "";
        }), o = n(a.translate(a, r.baseTpl.replace("{{buttons}}", i).replace("{{arrows}}", r.btnTpl.arrowLeft + r.btnTpl.arrowRight))).attr("id", "fancybox-container-" + a.id).addClass(r.baseClass).data("FancyBox", a).appendTo(r.parentEl), a.$refs = {
          container: o
        }, ["bg", "inner", "infobar", "toolbar", "stage", "caption", "navigation"].forEach(function (t) {
          a.$refs[t] = o.find(".fancybox-" + t);
        }), a.trigger("onInit"), a.activate(), a.jumpTo(a.currIndex);
      },
      translate: function (t, e) {
        var n = t.opts.i18n[t.opts.lang] || t.opts.i18n.en;
        return e.replace(/\{\{(\w+)\}\}/g, function (t, e) {
          return void 0 === n[e] ? t : n[e];
        });
      },
      addContent: function (t) {
        var e,
            o = this,
            i = n.makeArray(t);
        n.each(i, function (t, e) {
          var i,
              a,
              s,
              r,
              c,
              l = {},
              d = {};
          n.isPlainObject(e) ? (l = e, d = e.opts || e) : "object" === n.type(e) && n(e).length ? (i = n(e), d = i.data() || {}, d = n.extend(!0, {}, d, d.options), d.$orig = i, l.src = o.opts.src || d.src || i.attr("href"), l.type || l.src || (l.type = "inline", l.src = e)) : l = {
            type: "html",
            src: e + ""
          }, l.opts = n.extend(!0, {}, o.opts, d), n.isArray(d.buttons) && (l.opts.buttons = d.buttons), n.fancybox.isMobile && l.opts.mobile && (l.opts = h(l.opts, l.opts.mobile)), a = l.type || l.opts.type, r = l.src || "", !a && r && ((s = r.match(/\.(mp4|mov|ogv|webm)((\?|#).*)?$/i)) ? (a = "video", l.opts.video.format || (l.opts.video.format = "video/" + ("ogv" === s[1] ? "ogg" : s[1]))) : r.match(/(^data:image\/[a-z0-9+\/=]*,)|(\.(jp(e|g|eg)|gif|png|bmp|webp|svg|ico)((\?|#).*)?$)/i) ? a = "image" : r.match(/\.(pdf)((\?|#).*)?$/i) ? (a = "iframe", l = n.extend(!0, l, {
            contentType: "pdf",
            opts: {
              iframe: {
                preload: !1
              }
            }
          })) : "#" === r.charAt(0) && (a = "inline")), a ? l.type = a : o.trigger("objectNeedsType", l), l.contentType || (l.contentType = n.inArray(l.type, ["html", "inline", "ajax"]) > -1 ? "html" : l.type), l.index = o.group.length, "auto" == l.opts.smallBtn && (l.opts.smallBtn = n.inArray(l.type, ["html", "inline", "ajax"]) > -1), "auto" === l.opts.toolbar && (l.opts.toolbar = !l.opts.smallBtn), l.$thumb = l.opts.$thumb || null, l.opts.$trigger && l.index === o.opts.index && (l.$thumb = l.opts.$trigger.find("img:first"), l.$thumb.length && (l.opts.$orig = l.opts.$trigger)), l.$thumb && l.$thumb.length || !l.opts.$orig || (l.$thumb = l.opts.$orig.find("img:first")), l.$thumb && !l.$thumb.length && (l.$thumb = null), l.thumb = l.opts.thumb || (l.$thumb ? l.$thumb[0].src : null), "function" === n.type(l.opts.caption) && (l.opts.caption = l.opts.caption.apply(e, [o, l])), "function" === n.type(o.opts.caption) && (l.opts.caption = o.opts.caption.apply(e, [o, l])), l.opts.caption instanceof n || (l.opts.caption = void 0 === l.opts.caption ? "" : l.opts.caption + ""), "ajax" === l.type && (c = r.split(/\s+/, 2), c.length > 1 && (l.src = c.shift(), l.opts.filter = c.shift())), l.opts.modal && (l.opts = n.extend(!0, l.opts, {
            trapFocus: !0,
            infobar: 0,
            toolbar: 0,
            smallBtn: 0,
            keyboard: 0,
            slideShow: 0,
            fullScreen: 0,
            thumbs: 0,
            touch: 0,
            clickContent: !1,
            clickSlide: !1,
            clickOutside: !1,
            dblclickContent: !1,
            dblclickSlide: !1,
            dblclickOutside: !1
          })), o.group.push(l);
        }), Object.keys(o.slides).length && (o.updateControls(), (e = o.Thumbs) && e.isActive && (e.create(), e.focus()));
      },
      addEvents: function () {
        var e = this;
        e.removeEvents(), e.$refs.container.on("click.fb-close", "[data-fancybox-close]", function (t) {
          t.stopPropagation(), t.preventDefault(), e.close(t);
        }).on("touchstart.fb-prev click.fb-prev", "[data-fancybox-prev]", function (t) {
          t.stopPropagation(), t.preventDefault(), e.previous();
        }).on("touchstart.fb-next click.fb-next", "[data-fancybox-next]", function (t) {
          t.stopPropagation(), t.preventDefault(), e.next();
        }).on("click.fb", "[data-fancybox-zoom]", function (t) {
          e[e.isScaledDown() ? "scaleToActual" : "scaleToFit"]();
        }), s.on("orientationchange.fb resize.fb", function (t) {
          t && t.originalEvent && "resize" === t.originalEvent.type ? (e.requestId && u(e.requestId), e.requestId = d(function () {
            e.update(t);
          })) : (e.current && "iframe" === e.current.type && e.$refs.stage.hide(), setTimeout(function () {
            e.$refs.stage.show(), e.update(t);
          }, n.fancybox.isMobile ? 600 : 250));
        }), r.on("keydown.fb", function (t) {
          var o = n.fancybox ? n.fancybox.getInstance() : null,
              i = o.current,
              a = t.keyCode || t.which;
          if (9 == a) return void (i.opts.trapFocus && e.focus(t));
          if (!(!i.opts.keyboard || t.ctrlKey || t.altKey || t.shiftKey || n(t.target).is("input,textarea,video,audio,select"))) return 8 === a || 27 === a ? (t.preventDefault(), void e.close(t)) : 37 === a || 38 === a ? (t.preventDefault(), void e.previous()) : 39 === a || 40 === a ? (t.preventDefault(), void e.next()) : void e.trigger("afterKeydown", t, a);
        }), e.group[e.currIndex].opts.idleTime && (e.idleSecondsCounter = 0, r.on("mousemove.fb-idle mouseleave.fb-idle mousedown.fb-idle touchstart.fb-idle touchmove.fb-idle scroll.fb-idle keydown.fb-idle", function (t) {
          e.idleSecondsCounter = 0, e.isIdle && e.showControls(), e.isIdle = !1;
        }), e.idleInterval = t.setInterval(function () {
          ++e.idleSecondsCounter >= e.group[e.currIndex].opts.idleTime && !e.isDragging && (e.isIdle = !0, e.idleSecondsCounter = 0, e.hideControls());
        }, 1e3));
      },
      removeEvents: function () {
        var e = this;
        s.off("orientationchange.fb resize.fb"), r.off("keydown.fb .fb-idle"), this.$refs.container.off(".fb-close .fb-prev .fb-next"), e.idleInterval && (t.clearInterval(e.idleInterval), e.idleInterval = null);
      },
      previous: function (t) {
        return this.jumpTo(this.currPos - 1, t);
      },
      next: function (t) {
        return this.jumpTo(this.currPos + 1, t);
      },
      jumpTo: function (t, e) {
        var o,
            i,
            a,
            s,
            r,
            c,
            l,
            d,
            u,
            f = this,
            h = f.group.length;

        if (!(f.isDragging || f.isClosing || f.isAnimating && f.firstRun)) {
          if (t = parseInt(t, 10), !(a = f.current ? f.current.opts.loop : f.opts.loop) && (t < 0 || t >= h)) return !1;
          if (o = f.firstRun = !Object.keys(f.slides).length, r = f.current, f.prevIndex = f.currIndex, f.prevPos = f.currPos, s = f.createSlide(t), h > 1 && ((a || s.index < h - 1) && f.createSlide(t + 1), (a || s.index > 0) && f.createSlide(t - 1)), f.current = s, f.currIndex = s.index, f.currPos = s.pos, f.trigger("beforeShow", o), f.updateControls(), s.forcedDuration = void 0, n.isNumeric(e) ? s.forcedDuration = e : e = s.opts[o ? "animationDuration" : "transitionDuration"], e = parseInt(e, 10), i = f.isMoved(s), s.$slide.addClass("fancybox-slide--current"), o) return s.opts.animationEffect && e && f.$refs.container.css("transition-duration", e + "ms"), f.$refs.container.addClass("fancybox-is-open").trigger("focus"), f.loadSlide(s), void f.preload("image");
          c = n.fancybox.getTranslate(r.$slide), l = n.fancybox.getTranslate(f.$refs.stage), n.each(f.slides, function (t, e) {
            n.fancybox.stop(e.$slide, !0);
          }), r.pos !== s.pos && (r.isComplete = !1), r.$slide.removeClass("fancybox-slide--complete fancybox-slide--current"), i ? (u = c.left - (r.pos * c.width + r.pos * r.opts.gutter), n.each(f.slides, function (t, o) {
            o.$slide.removeClass("fancybox-animated").removeClass(function (t, e) {
              return (e.match(/(^|\s)fancybox-fx-\S+/g) || []).join(" ");
            });
            var i = o.pos * c.width + o.pos * o.opts.gutter;
            n.fancybox.setTranslate(o.$slide, {
              top: 0,
              left: i - l.left + u
            }), o.pos !== s.pos && o.$slide.addClass("fancybox-slide--" + (o.pos > s.pos ? "next" : "previous")), p(o.$slide), n.fancybox.animate(o.$slide, {
              top: 0,
              left: (o.pos - s.pos) * c.width + (o.pos - s.pos) * o.opts.gutter
            }, e, function () {
              o.$slide.css({
                transform: "",
                opacity: ""
              }).removeClass("fancybox-slide--next fancybox-slide--previous"), o.pos === f.currPos && f.complete();
            });
          })) : e && s.opts.transitionEffect && (d = "fancybox-animated fancybox-fx-" + s.opts.transitionEffect, r.$slide.addClass("fancybox-slide--" + (r.pos > s.pos ? "next" : "previous")), n.fancybox.animate(r.$slide, d, e, function () {
            r.$slide.removeClass(d).removeClass("fancybox-slide--next fancybox-slide--previous");
          }, !1)), s.isLoaded ? f.revealContent(s) : f.loadSlide(s), f.preload("image");
        }
      },
      createSlide: function (t) {
        var e,
            o,
            i = this;
        return o = t % i.group.length, o = o < 0 ? i.group.length + o : o, !i.slides[t] && i.group[o] && (e = n('<div class="fancybox-slide"></div>').appendTo(i.$refs.stage), i.slides[t] = n.extend(!0, {}, i.group[o], {
          pos: t,
          $slide: e,
          isLoaded: !1
        }), i.updateSlide(i.slides[t])), i.slides[t];
      },
      scaleToActual: function (t, e, o) {
        var i,
            a,
            s,
            r,
            c,
            l = this,
            d = l.current,
            u = d.$content,
            f = n.fancybox.getTranslate(d.$slide).width,
            p = n.fancybox.getTranslate(d.$slide).height,
            h = d.width,
            g = d.height;
        l.isAnimating || l.isMoved() || !u || "image" != d.type || !d.isLoaded || d.hasError || (l.isAnimating = !0, n.fancybox.stop(u), t = void 0 === t ? .5 * f : t, e = void 0 === e ? .5 * p : e, i = n.fancybox.getTranslate(u), i.top -= n.fancybox.getTranslate(d.$slide).top, i.left -= n.fancybox.getTranslate(d.$slide).left, r = h / i.width, c = g / i.height, a = .5 * f - .5 * h, s = .5 * p - .5 * g, h > f && (a = i.left * r - (t * r - t), a > 0 && (a = 0), a < f - h && (a = f - h)), g > p && (s = i.top * c - (e * c - e), s > 0 && (s = 0), s < p - g && (s = p - g)), l.updateCursor(h, g), n.fancybox.animate(u, {
          top: s,
          left: a,
          scaleX: r,
          scaleY: c
        }, o || 366, function () {
          l.isAnimating = !1;
        }), l.SlideShow && l.SlideShow.isActive && l.SlideShow.stop());
      },
      scaleToFit: function (t) {
        var e,
            o = this,
            i = o.current,
            a = i.$content;
        o.isAnimating || o.isMoved() || !a || "image" != i.type || !i.isLoaded || i.hasError || (o.isAnimating = !0, n.fancybox.stop(a), e = o.getFitPos(i), o.updateCursor(e.width, e.height), n.fancybox.animate(a, {
          top: e.top,
          left: e.left,
          scaleX: e.width / a.width(),
          scaleY: e.height / a.height()
        }, t || 366, function () {
          o.isAnimating = !1;
        }));
      },
      getFitPos: function (t) {
        var e,
            o,
            i,
            a,
            s = this,
            r = t.$content,
            c = t.$slide,
            l = t.width || t.opts.width,
            d = t.height || t.opts.height,
            u = {};
        return !!(t.isLoaded && r && r.length) && (e = n.fancybox.getTranslate(s.$refs.stage).width, o = n.fancybox.getTranslate(s.$refs.stage).height, e -= parseFloat(c.css("paddingLeft")) + parseFloat(c.css("paddingRight")) + parseFloat(r.css("marginLeft")) + parseFloat(r.css("marginRight")), o -= parseFloat(c.css("paddingTop")) + parseFloat(c.css("paddingBottom")) + parseFloat(r.css("marginTop")) + parseFloat(r.css("marginBottom")), l && d || (l = e, d = o), i = Math.min(1, e / l, o / d), l *= i, d *= i, l > e - .5 && (l = e), d > o - .5 && (d = o), "image" === t.type ? (u.top = Math.floor(.5 * (o - d)) + parseFloat(c.css("paddingTop")), u.left = Math.floor(.5 * (e - l)) + parseFloat(c.css("paddingLeft"))) : "video" === t.contentType && (a = t.opts.width && t.opts.height ? l / d : t.opts.ratio || 16 / 9, d > l / a ? d = l / a : l > d * a && (l = d * a)), u.width = l, u.height = d, u);
      },
      update: function (t) {
        var e = this;
        n.each(e.slides, function (n, o) {
          e.updateSlide(o, t);
        });
      },
      updateSlide: function (t, e) {
        var o = this,
            i = t && t.$content,
            a = t.width || t.opts.width,
            s = t.height || t.opts.height,
            r = t.$slide;
        o.adjustCaption(t), i && (a || s || "video" === t.contentType) && !t.hasError && (n.fancybox.stop(i), n.fancybox.setTranslate(i, o.getFitPos(t)), t.pos === o.currPos && (o.isAnimating = !1, o.updateCursor())), o.adjustLayout(t), r.length && (r.trigger("refresh"), t.pos === o.currPos && o.$refs.toolbar.add(o.$refs.navigation.find(".fancybox-button--arrow_right")).toggleClass("compensate-for-scrollbar", r.get(0).scrollHeight > r.get(0).clientHeight)), o.trigger("onUpdate", t, e);
      },
      centerSlide: function (t) {
        var e = this,
            o = e.current,
            i = o.$slide;
        !e.isClosing && o && (i.siblings().css({
          transform: "",
          opacity: ""
        }), i.parent().children().removeClass("fancybox-slide--previous fancybox-slide--next"), n.fancybox.animate(i, {
          top: 0,
          left: 0,
          opacity: 1
        }, void 0 === t ? 0 : t, function () {
          i.css({
            transform: "",
            opacity: ""
          }), o.isComplete || e.complete();
        }, !1));
      },
      isMoved: function (t) {
        var e,
            o,
            i = t || this.current;
        return !!i && (o = n.fancybox.getTranslate(this.$refs.stage), e = n.fancybox.getTranslate(i.$slide), !i.$slide.hasClass("fancybox-animated") && (Math.abs(e.top - o.top) > .5 || Math.abs(e.left - o.left) > .5));
      },
      updateCursor: function (t, e) {
        var o,
            i,
            a = this,
            s = a.current,
            r = a.$refs.container;
        s && !a.isClosing && a.Guestures && (r.removeClass("fancybox-is-zoomable fancybox-can-zoomIn fancybox-can-zoomOut fancybox-can-swipe fancybox-can-pan"), o = a.canPan(t, e), i = !!o || a.isZoomable(), r.toggleClass("fancybox-is-zoomable", i), n("[data-fancybox-zoom]").prop("disabled", !i), o ? r.addClass("fancybox-can-pan") : i && ("zoom" === s.opts.clickContent || n.isFunction(s.opts.clickContent) && "zoom" == s.opts.clickContent(s)) ? r.addClass("fancybox-can-zoomIn") : s.opts.touch && (s.opts.touch.vertical || a.group.length > 1) && "video" !== s.contentType && r.addClass("fancybox-can-swipe"));
      },
      isZoomable: function () {
        var t,
            e = this,
            n = e.current;

        if (n && !e.isClosing && "image" === n.type && !n.hasError) {
          if (!n.isLoaded) return !0;
          if ((t = e.getFitPos(n)) && (n.width > t.width || n.height > t.height)) return !0;
        }

        return !1;
      },
      isScaledDown: function (t, e) {
        var o = this,
            i = !1,
            a = o.current,
            s = a.$content;
        return void 0 !== t && void 0 !== e ? i = t < a.width && e < a.height : s && (i = n.fancybox.getTranslate(s), i = i.width < a.width && i.height < a.height), i;
      },
      canPan: function (t, e) {
        var o = this,
            i = o.current,
            a = null,
            s = !1;
        return "image" === i.type && (i.isComplete || t && e) && !i.hasError && (s = o.getFitPos(i), void 0 !== t && void 0 !== e ? a = {
          width: t,
          height: e
        } : i.isComplete && (a = n.fancybox.getTranslate(i.$content)), a && s && (s = Math.abs(a.width - s.width) > 1.5 || Math.abs(a.height - s.height) > 1.5)), s;
      },
      loadSlide: function (t) {
        var e,
            o,
            i,
            a = this;

        if (!t.isLoading && !t.isLoaded) {
          if (t.isLoading = !0, !1 === a.trigger("beforeLoad", t)) return t.isLoading = !1, !1;

          switch (e = t.type, o = t.$slide, o.off("refresh").trigger("onReset").addClass(t.opts.slideClass), e) {
            case "image":
              a.setImage(t);
              break;

            case "iframe":
              a.setIframe(t);
              break;

            case "html":
              a.setContent(t, t.src || t.content);
              break;

            case "video":
              a.setContent(t, t.opts.video.tpl.replace(/\{\{src\}\}/gi, t.src).replace("{{format}}", t.opts.videoFormat || t.opts.video.format || "").replace("{{poster}}", t.thumb || ""));
              break;

            case "inline":
              n(t.src).length ? a.setContent(t, n(t.src)) : a.setError(t);
              break;

            case "ajax":
              a.showLoading(t), i = n.ajax(n.extend({}, t.opts.ajax.settings, {
                url: t.src,
                success: function (e, n) {
                  "success" === n && a.setContent(t, e);
                },
                error: function (e, n) {
                  e && "abort" !== n && a.setError(t);
                }
              })), o.one("onReset", function () {
                i.abort();
              });
              break;

            default:
              a.setError(t);
          }

          return !0;
        }
      },
      setImage: function (t) {
        var o,
            i = this;
        setTimeout(function () {
          var e = t.$image;
          i.isClosing || !t.isLoading || e && e.length && e[0].complete || t.hasError || i.showLoading(t);
        }, 50), i.checkSrcset(t), t.$content = n('<div class="fancybox-content"></div>').addClass("fancybox-is-hidden").appendTo(t.$slide.addClass("fancybox-slide--image")), !1 !== t.opts.preload && t.opts.width && t.opts.height && t.thumb && (t.width = t.opts.width, t.height = t.opts.height, o = e.createElement("img"), o.onerror = function () {
          n(this).remove(), t.$ghost = null;
        }, o.onload = function () {
          i.afterLoad(t);
        }, t.$ghost = n(o).addClass("fancybox-image").appendTo(t.$content).attr("src", t.thumb)), i.setBigImage(t);
      },
      checkSrcset: function (e) {
        var n,
            o,
            i,
            a,
            s = e.opts.srcset || e.opts.image.srcset;

        if (s) {
          i = t.devicePixelRatio || 1, a = t.innerWidth * i, o = s.split(",").map(function (t) {
            var e = {};
            return t.trim().split(/\s+/).forEach(function (t, n) {
              var o = parseInt(t.substring(0, t.length - 1), 10);
              if (0 === n) return e.url = t;
              o && (e.value = o, e.postfix = t[t.length - 1]);
            }), e;
          }), o.sort(function (t, e) {
            return t.value - e.value;
          });

          for (var r = 0; r < o.length; r++) {
            var c = o[r];

            if ("w" === c.postfix && c.value >= a || "x" === c.postfix && c.value >= i) {
              n = c;
              break;
            }
          }

          !n && o.length && (n = o[o.length - 1]), n && (e.src = n.url, e.width && e.height && "w" == n.postfix && (e.height = e.width / e.height * n.value, e.width = n.value), e.opts.srcset = s);
        }
      },
      setBigImage: function (t) {
        var o = this,
            i = e.createElement("img"),
            a = n(i);
        t.$image = a.one("error", function () {
          o.setError(t);
        }).one("load", function () {
          var e;
          t.$ghost || (o.resolveImageSlideSize(t, this.naturalWidth, this.naturalHeight), o.afterLoad(t)), o.isClosing || (t.opts.srcset && (e = t.opts.sizes, e && "auto" !== e || (e = (t.width / t.height > 1 && s.width() / s.height() > 1 ? "100" : Math.round(t.width / t.height * 100)) + "vw"), a.attr("sizes", e).attr("srcset", t.opts.srcset)), t.$ghost && setTimeout(function () {
            t.$ghost && !o.isClosing && t.$ghost.hide();
          }, Math.min(300, Math.max(1e3, t.height / 1600))), o.hideLoading(t));
        }).addClass("fancybox-image").attr("src", t.src).appendTo(t.$content), (i.complete || "complete" == i.readyState) && a.naturalWidth && a.naturalHeight ? a.trigger("load") : i.error && a.trigger("error");
      },
      resolveImageSlideSize: function (t, e, n) {
        var o = parseInt(t.opts.width, 10),
            i = parseInt(t.opts.height, 10);
        t.width = e, t.height = n, o > 0 && (t.width = o, t.height = Math.floor(o * n / e)), i > 0 && (t.width = Math.floor(i * e / n), t.height = i);
      },
      setIframe: function (t) {
        var e,
            o = this,
            i = t.opts.iframe,
            a = t.$slide;
        t.$content = n('<div class="fancybox-content' + (i.preload ? " fancybox-is-hidden" : "") + '"></div>').css(i.css).appendTo(a), a.addClass("fancybox-slide--" + t.contentType), t.$iframe = e = n(i.tpl.replace(/\{rnd\}/g, new Date().getTime())).attr(i.attr).appendTo(t.$content), i.preload ? (o.showLoading(t), e.on("load.fb error.fb", function (e) {
          this.isReady = 1, t.$slide.trigger("refresh"), o.afterLoad(t);
        }), a.on("refresh.fb", function () {
          var n,
              o,
              s = t.$content,
              r = i.css.width,
              c = i.css.height;

          if (1 === e[0].isReady) {
            try {
              n = e.contents(), o = n.find("body");
            } catch (t) {}

            o && o.length && o.children().length && (a.css("overflow", "visible"), s.css({
              width: "100%",
              "max-width": "100%",
              height: "9999px"
            }), void 0 === r && (r = Math.ceil(Math.max(o[0].clientWidth, o.outerWidth(!0)))), s.css("width", r || "").css("max-width", ""), void 0 === c && (c = Math.ceil(Math.max(o[0].clientHeight, o.outerHeight(!0)))), s.css("height", c || ""), a.css("overflow", "auto")), s.removeClass("fancybox-is-hidden");
          }
        })) : o.afterLoad(t), e.attr("src", t.src), a.one("onReset", function () {
          try {
            n(this).find("iframe").hide().unbind().attr("src", "//about:blank");
          } catch (t) {}

          n(this).off("refresh.fb").empty(), t.isLoaded = !1, t.isRevealed = !1;
        });
      },
      setContent: function (t, e) {
        var o = this;
        o.isClosing || (o.hideLoading(t), t.$content && n.fancybox.stop(t.$content), t.$slide.empty(), l(e) && e.parent().length ? ((e.hasClass("fancybox-content") || e.parent().hasClass("fancybox-content")) && e.parents(".fancybox-slide").trigger("onReset"), t.$placeholder = n("<div>").hide().insertAfter(e), e.css("display", "inline-block")) : t.hasError || ("string" === n.type(e) && (e = n("<div>").append(n.trim(e)).contents()), t.opts.filter && (e = n("<div>").html(e).find(t.opts.filter))), t.$slide.one("onReset", function () {
          n(this).find("video,audio").trigger("pause"), t.$placeholder && (t.$placeholder.after(e.removeClass("fancybox-content").hide()).remove(), t.$placeholder = null), t.$smallBtn && (t.$smallBtn.remove(), t.$smallBtn = null), t.hasError || (n(this).empty(), t.isLoaded = !1, t.isRevealed = !1);
        }), n(e).appendTo(t.$slide), n(e).is("video,audio") && (n(e).addClass("fancybox-video"), n(e).wrap("<div></div>"), t.contentType = "video", t.opts.width = t.opts.width || n(e).attr("width"), t.opts.height = t.opts.height || n(e).attr("height")), t.$content = t.$slide.children().filter("div,form,main,video,audio,article,.fancybox-content").first(), t.$content.siblings().hide(), t.$content.length || (t.$content = t.$slide.wrapInner("<div></div>").children().first()), t.$content.addClass("fancybox-content"), t.$slide.addClass("fancybox-slide--" + t.contentType), o.afterLoad(t));
      },
      setError: function (t) {
        t.hasError = !0, t.$slide.trigger("onReset").removeClass("fancybox-slide--" + t.contentType).addClass("fancybox-slide--error"), t.contentType = "html", this.setContent(t, this.translate(t, t.opts.errorTpl)), t.pos === this.currPos && (this.isAnimating = !1);
      },
      showLoading: function (t) {
        var e = this;
        (t = t || e.current) && !t.$spinner && (t.$spinner = n(e.translate(e, e.opts.spinnerTpl)).appendTo(t.$slide).hide().fadeIn("fast"));
      },
      hideLoading: function (t) {
        var e = this;
        (t = t || e.current) && t.$spinner && (t.$spinner.stop().remove(), delete t.$spinner);
      },
      afterLoad: function (t) {
        var e = this;
        e.isClosing || (t.isLoading = !1, t.isLoaded = !0, e.trigger("afterLoad", t), e.hideLoading(t), !t.opts.smallBtn || t.$smallBtn && t.$smallBtn.length || (t.$smallBtn = n(e.translate(t, t.opts.btnTpl.smallBtn)).appendTo(t.$content)), t.opts.protect && t.$content && !t.hasError && (t.$content.on("contextmenu.fb", function (t) {
          return 2 == t.button && t.preventDefault(), !0;
        }), "image" === t.type && n('<div class="fancybox-spaceball"></div>').appendTo(t.$content)), e.adjustCaption(t), e.adjustLayout(t), t.pos === e.currPos && e.updateCursor(), e.revealContent(t));
      },
      adjustCaption: function (t) {
        var e,
            n = this,
            o = t || n.current,
            i = o.opts.caption,
            a = o.opts.preventCaptionOverlap,
            s = n.$refs.caption,
            r = !1;
        s.toggleClass("fancybox-caption--separate", a), a && i && i.length && (o.pos !== n.currPos ? (e = s.clone().appendTo(s.parent()), e.children().eq(0).empty().html(i), r = e.outerHeight(!0), e.empty().remove()) : n.$caption && (r = n.$caption.outerHeight(!0)), o.$slide.css("padding-bottom", r || ""));
      },
      adjustLayout: function (t) {
        var e,
            n,
            o,
            i,
            a = this,
            s = t || a.current;
        s.isLoaded && !0 !== s.opts.disableLayoutFix && (s.$content.css("margin-bottom", ""), s.$content.outerHeight() > s.$slide.height() + .5 && (o = s.$slide[0].style["padding-bottom"], i = s.$slide.css("padding-bottom"), parseFloat(i) > 0 && (e = s.$slide[0].scrollHeight, s.$slide.css("padding-bottom", 0), Math.abs(e - s.$slide[0].scrollHeight) < 1 && (n = i), s.$slide.css("padding-bottom", o))), s.$content.css("margin-bottom", n));
      },
      revealContent: function (t) {
        var e,
            o,
            i,
            a,
            s = this,
            r = t.$slide,
            c = !1,
            l = !1,
            d = s.isMoved(t),
            u = t.isRevealed;
        return t.isRevealed = !0, e = t.opts[s.firstRun ? "animationEffect" : "transitionEffect"], i = t.opts[s.firstRun ? "animationDuration" : "transitionDuration"], i = parseInt(void 0 === t.forcedDuration ? i : t.forcedDuration, 10), !d && t.pos === s.currPos && i || (e = !1), "zoom" === e && (t.pos === s.currPos && i && "image" === t.type && !t.hasError && (l = s.getThumbPos(t)) ? c = s.getFitPos(t) : e = "fade"), "zoom" === e ? (s.isAnimating = !0, c.scaleX = c.width / l.width, c.scaleY = c.height / l.height, a = t.opts.zoomOpacity, "auto" == a && (a = Math.abs(t.width / t.height - l.width / l.height) > .1), a && (l.opacity = .1, c.opacity = 1), n.fancybox.setTranslate(t.$content.removeClass("fancybox-is-hidden"), l), p(t.$content), void n.fancybox.animate(t.$content, c, i, function () {
          s.isAnimating = !1, s.complete();
        })) : (s.updateSlide(t), e ? (n.fancybox.stop(r), o = "fancybox-slide--" + (t.pos >= s.prevPos ? "next" : "previous") + " fancybox-animated fancybox-fx-" + e, r.addClass(o).removeClass("fancybox-slide--current"), t.$content.removeClass("fancybox-is-hidden"), p(r), "image" !== t.type && t.$content.hide().show(0), void n.fancybox.animate(r, "fancybox-slide--current", i, function () {
          r.removeClass(o).css({
            transform: "",
            opacity: ""
          }), t.pos === s.currPos && s.complete();
        }, !0)) : (t.$content.removeClass("fancybox-is-hidden"), u || !d || "image" !== t.type || t.hasError || t.$content.hide().fadeIn("fast"), void (t.pos === s.currPos && s.complete())));
      },
      getThumbPos: function (t) {
        var e,
            o,
            i,
            a,
            s,
            r = !1,
            c = t.$thumb;
        return !(!c || !g(c[0])) && (e = n.fancybox.getTranslate(c), o = parseFloat(c.css("border-top-width") || 0), i = parseFloat(c.css("border-right-width") || 0), a = parseFloat(c.css("border-bottom-width") || 0), s = parseFloat(c.css("border-left-width") || 0), r = {
          top: e.top + o,
          left: e.left + s,
          width: e.width - i - s,
          height: e.height - o - a,
          scaleX: 1,
          scaleY: 1
        }, e.width > 0 && e.height > 0 && r);
      },
      complete: function () {
        var t,
            e = this,
            o = e.current,
            i = {};
        !e.isMoved() && o.isLoaded && (o.isComplete || (o.isComplete = !0, o.$slide.siblings().trigger("onReset"), e.preload("inline"), p(o.$slide), o.$slide.addClass("fancybox-slide--complete"), n.each(e.slides, function (t, o) {
          o.pos >= e.currPos - 1 && o.pos <= e.currPos + 1 ? i[o.pos] = o : o && (n.fancybox.stop(o.$slide), o.$slide.off().remove());
        }), e.slides = i), e.isAnimating = !1, e.updateCursor(), e.trigger("afterShow"), o.opts.video.autoStart && o.$slide.find("video,audio").filter(":visible:first").trigger("play").one("ended", function () {
          Document.exitFullscreen ? Document.exitFullscreen() : this.webkitExitFullscreen && this.webkitExitFullscreen(), e.next();
        }), o.opts.autoFocus && "html" === o.contentType && (t = o.$content.find("input[autofocus]:enabled:visible:first"), t.length ? t.trigger("focus") : e.focus(null, !0)), o.$slide.scrollTop(0).scrollLeft(0));
      },
      preload: function (t) {
        var e,
            n,
            o = this;
        o.group.length < 2 || (n = o.slides[o.currPos + 1], e = o.slides[o.currPos - 1], e && e.type === t && o.loadSlide(e), n && n.type === t && o.loadSlide(n));
      },
      focus: function (t, o) {
        var i,
            a,
            s = this,
            r = ["a[href]", "area[href]", 'input:not([disabled]):not([type="hidden"]):not([aria-hidden])', "select:not([disabled]):not([aria-hidden])", "textarea:not([disabled]):not([aria-hidden])", "button:not([disabled]):not([aria-hidden])", "iframe", "object", "embed", "video", "audio", "[contenteditable]", '[tabindex]:not([tabindex^="-"])'].join(",");
        s.isClosing || (i = !t && s.current && s.current.isComplete ? s.current.$slide.find("*:visible" + (o ? ":not(.fancybox-close-small)" : "")) : s.$refs.container.find("*:visible"), i = i.filter(r).filter(function () {
          return "hidden" !== n(this).css("visibility") && !n(this).hasClass("disabled");
        }), i.length ? (a = i.index(e.activeElement), t && t.shiftKey ? (a < 0 || 0 == a) && (t.preventDefault(), i.eq(i.length - 1).trigger("focus")) : (a < 0 || a == i.length - 1) && (t && t.preventDefault(), i.eq(0).trigger("focus"))) : s.$refs.container.trigger("focus"));
      },
      activate: function () {
        var t = this;
        n(".fancybox-container").each(function () {
          var e = n(this).data("FancyBox");
          e && e.id !== t.id && !e.isClosing && (e.trigger("onDeactivate"), e.removeEvents(), e.isVisible = !1);
        }), t.isVisible = !0, (t.current || t.isIdle) && (t.update(), t.updateControls()), t.trigger("onActivate"), t.addEvents();
      },
      close: function (t, e) {
        var o,
            i,
            a,
            s,
            r,
            c,
            l,
            u = this,
            f = u.current,
            h = function () {
          u.cleanUp(t);
        };

        return !u.isClosing && (u.isClosing = !0, !1 === u.trigger("beforeClose", t) ? (u.isClosing = !1, d(function () {
          u.update();
        }), !1) : (u.removeEvents(), a = f.$content, o = f.opts.animationEffect, i = n.isNumeric(e) ? e : o ? f.opts.animationDuration : 0, f.$slide.removeClass("fancybox-slide--complete fancybox-slide--next fancybox-slide--previous fancybox-animated"), !0 !== t ? n.fancybox.stop(f.$slide) : o = !1, f.$slide.siblings().trigger("onReset").remove(), i && u.$refs.container.removeClass("fancybox-is-open").addClass("fancybox-is-closing").css("transition-duration", i + "ms"), u.hideLoading(f), u.hideControls(!0), u.updateCursor(), "zoom" !== o || a && i && "image" === f.type && !u.isMoved() && !f.hasError && (l = u.getThumbPos(f)) || (o = "fade"), "zoom" === o ? (n.fancybox.stop(a), s = n.fancybox.getTranslate(a), c = {
          top: s.top,
          left: s.left,
          scaleX: s.width / l.width,
          scaleY: s.height / l.height,
          width: l.width,
          height: l.height
        }, r = f.opts.zoomOpacity, "auto" == r && (r = Math.abs(f.width / f.height - l.width / l.height) > .1), r && (l.opacity = 0), n.fancybox.setTranslate(a, c), p(a), n.fancybox.animate(a, l, i, h), !0) : (o && i ? n.fancybox.animate(f.$slide.addClass("fancybox-slide--previous").removeClass("fancybox-slide--current"), "fancybox-animated fancybox-fx-" + o, i, h) : !0 === t ? setTimeout(h, i) : h(), !0)));
      },
      cleanUp: function (e) {
        var o,
            i,
            a,
            s = this,
            r = s.current.opts.$orig;
        s.current.$slide.trigger("onReset"), s.$refs.container.empty().remove(), s.trigger("afterClose", e), s.current.opts.backFocus && (r && r.length && r.is(":visible") || (r = s.$trigger), r && r.length && (i = t.scrollX, a = t.scrollY, r.trigger("focus"), n("html, body").scrollTop(a).scrollLeft(i))), s.current = null, o = n.fancybox.getInstance(), o ? o.activate() : (n("body").removeClass("fancybox-active compensate-for-scrollbar"), n("#fancybox-style-noscroll").remove());
      },
      trigger: function (t, e) {
        var o,
            i = Array.prototype.slice.call(arguments, 1),
            a = this,
            s = e && e.opts ? e : a.current;
        if (s ? i.unshift(s) : s = a, i.unshift(a), n.isFunction(s.opts[t]) && (o = s.opts[t].apply(s, i)), !1 === o) return o;
        "afterClose" !== t && a.$refs ? a.$refs.container.trigger(t + ".fb", i) : r.trigger(t + ".fb", i);
      },
      updateControls: function () {
        var t = this,
            o = t.current,
            i = o.index,
            a = t.$refs.container,
            s = t.$refs.caption,
            r = o.opts.caption;
        o.$slide.trigger("refresh"), r && r.length ? (t.$caption = s, s.children().eq(0).html(r)) : t.$caption = null, t.hasHiddenControls || t.isIdle || t.showControls(), a.find("[data-fancybox-count]").html(t.group.length), a.find("[data-fancybox-index]").html(i + 1), a.find("[data-fancybox-prev]").prop("disabled", !o.opts.loop && i <= 0), a.find("[data-fancybox-next]").prop("disabled", !o.opts.loop && i >= t.group.length - 1), "image" === o.type ? a.find("[data-fancybox-zoom]").show().end().find("[data-fancybox-download]").attr("href", o.opts.image.src || o.src).show() : o.opts.toolbar && a.find("[data-fancybox-download],[data-fancybox-zoom]").hide(), n(e.activeElement).is(":hidden,[disabled]") && t.$refs.container.trigger("focus");
      },
      hideControls: function (t) {
        var e = this,
            n = ["infobar", "toolbar", "nav"];
        !t && e.current.opts.preventCaptionOverlap || n.push("caption"), this.$refs.container.removeClass(n.map(function (t) {
          return "fancybox-show-" + t;
        }).join(" ")), this.hasHiddenControls = !0;
      },
      showControls: function () {
        var t = this,
            e = t.current ? t.current.opts : t.opts,
            n = t.$refs.container;
        t.hasHiddenControls = !1, t.idleSecondsCounter = 0, n.toggleClass("fancybox-show-toolbar", !(!e.toolbar || !e.buttons)).toggleClass("fancybox-show-infobar", !!(e.infobar && t.group.length > 1)).toggleClass("fancybox-show-caption", !!t.$caption).toggleClass("fancybox-show-nav", !!(e.arrows && t.group.length > 1)).toggleClass("fancybox-is-modal", !!e.modal);
      },
      toggleControls: function () {
        this.hasHiddenControls ? this.showControls() : this.hideControls();
      }
    }), n.fancybox = {
      version: "3.5.7",
      defaults: a,
      getInstance: function (t) {
        var e = n('.fancybox-container:not(".fancybox-is-closing"):last').data("FancyBox"),
            o = Array.prototype.slice.call(arguments, 1);
        return e instanceof b && ("string" === n.type(t) ? e[t].apply(e, o) : "function" === n.type(t) && t.apply(e, o), e);
      },
      open: function (t, e, n) {
        return new b(t, e, n);
      },
      close: function (t) {
        var e = this.getInstance();
        e && (e.close(), !0 === t && this.close(t));
      },
      destroy: function () {
        this.close(!0), r.add("body").off("click.fb-start", "**");
      },
      isMobile: /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent),
      use3d: function () {
        var n = e.createElement("div");
        return t.getComputedStyle && t.getComputedStyle(n) && t.getComputedStyle(n).getPropertyValue("transform") && !(e.documentMode && e.documentMode < 11);
      }(),
      getTranslate: function (t) {
        var e;
        return !(!t || !t.length) && (e = t[0].getBoundingClientRect(), {
          top: e.top || 0,
          left: e.left || 0,
          width: e.width,
          height: e.height,
          opacity: parseFloat(t.css("opacity"))
        });
      },
      setTranslate: function (t, e) {
        var n = "",
            o = {};
        if (t && e) return void 0 === e.left && void 0 === e.top || (n = (void 0 === e.left ? t.position().left : e.left) + "px, " + (void 0 === e.top ? t.position().top : e.top) + "px", n = this.use3d ? "translate3d(" + n + ", 0px)" : "translate(" + n + ")"), void 0 !== e.scaleX && void 0 !== e.scaleY ? n += " scale(" + e.scaleX + ", " + e.scaleY + ")" : void 0 !== e.scaleX && (n += " scaleX(" + e.scaleX + ")"), n.length && (o.transform = n), void 0 !== e.opacity && (o.opacity = e.opacity), void 0 !== e.width && (o.width = e.width), void 0 !== e.height && (o.height = e.height), t.css(o);
      },
      animate: function (t, e, o, i, a) {
        var s,
            r = this;
        n.isFunction(o) && (i = o, o = null), r.stop(t), s = r.getTranslate(t), t.on(f, function (c) {
          (!c || !c.originalEvent || t.is(c.originalEvent.target) && "z-index" != c.originalEvent.propertyName) && (r.stop(t), n.isNumeric(o) && t.css("transition-duration", ""), n.isPlainObject(e) ? void 0 !== e.scaleX && void 0 !== e.scaleY && r.setTranslate(t, {
            top: e.top,
            left: e.left,
            width: s.width * e.scaleX,
            height: s.height * e.scaleY,
            scaleX: 1,
            scaleY: 1
          }) : !0 !== a && t.removeClass(e), n.isFunction(i) && i(c));
        }), n.isNumeric(o) && t.css("transition-duration", o + "ms"), n.isPlainObject(e) ? (void 0 !== e.scaleX && void 0 !== e.scaleY && (delete e.width, delete e.height, t.parent().hasClass("fancybox-slide--image") && t.parent().addClass("fancybox-is-scaling")), n.fancybox.setTranslate(t, e)) : t.addClass(e), t.data("timer", setTimeout(function () {
          t.trigger(f);
        }, o + 33));
      },
      stop: function (t, e) {
        t && t.length && (clearTimeout(t.data("timer")), e && t.trigger(f), t.off(f).css("transition-duration", ""), t.parent().removeClass("fancybox-is-scaling"));
      }
    }, n.fn.fancybox = function (t) {
      var e;
      return t = t || {}, e = t.selector || !1, e ? n("body").off("click.fb-start", e).on("click.fb-start", e, {
        options: t
      }, i) : this.off("click.fb-start").on("click.fb-start", {
        items: this,
        options: t
      }, i), this;
    }, r.on("click.fb-start", "[data-fancybox]", i), r.on("click.fb-start", "[data-fancybox-trigger]", function (t) {
      n('[data-fancybox="' + n(this).attr("data-fancybox-trigger") + '"]').eq(n(this).attr("data-fancybox-index") || 0).trigger("click.fb-start", {
        $trigger: n(this)
      });
    }), function () {
      var t = null;
      r.on("mousedown mouseup focus blur", ".fancybox-button", function (e) {
        switch (e.type) {
          case "mousedown":
            t = n(this);
            break;

          case "mouseup":
            t = null;
            break;

          case "focusin":
            n(".fancybox-button").removeClass("fancybox-focus"), n(this).is(t) || n(this).is("[disabled]") || n(this).addClass("fancybox-focus");
            break;

          case "focusout":
            n(".fancybox-button").removeClass("fancybox-focus");
        }
      });
    }();
  }
}(window, document, jQuery), function (t) {
  "use strict";

  var e = {
    youtube: {
      matcher: /(youtube\.com|youtu\.be|youtube\-nocookie\.com)\/(watch\?(.*&)?v=|v\/|u\/|embed\/?)?(videoseries\?list=(.*)|[\w-]{11}|\?listType=(.*)&list=(.*))(.*)/i,
      params: {
        autoplay: 1,
        autohide: 1,
        fs: 1,
        rel: 0,
        hd: 1,
        wmode: "transparent",
        enablejsapi: 1,
        html5: 1
      },
      paramPlace: 8,
      type: "iframe",
      url: "https://www.youtube-nocookie.com/embed/$4",
      thumb: "https://img.youtube.com/vi/$4/hqdefault.jpg"
    },
    vimeo: {
      matcher: /^.+vimeo.com\/(.*\/)?([\d]+)(.*)?/,
      params: {
        autoplay: 1,
        hd: 1,
        show_title: 1,
        show_byline: 1,
        show_portrait: 0,
        fullscreen: 1
      },
      paramPlace: 3,
      type: "iframe",
      url: "//player.vimeo.com/video/$2"
    },
    instagram: {
      matcher: /(instagr\.am|instagram\.com)\/p\/([a-zA-Z0-9_\-]+)\/?/i,
      type: "image",
      url: "//$1/p/$2/media/?size=l"
    },
    gmap_place: {
      matcher: /(maps\.)?google\.([a-z]{2,3}(\.[a-z]{2})?)\/(((maps\/(place\/(.*)\/)?\@(.*),(\d+.?\d+?)z))|(\?ll=))(.*)?/i,
      type: "iframe",
      url: function (t) {
        return "//maps.google." + t[2] + "/?ll=" + (t[9] ? t[9] + "&z=" + Math.floor(t[10]) + (t[12] ? t[12].replace(/^\//, "&") : "") : t[12] + "").replace(/\?/, "&") + "&output=" + (t[12] && t[12].indexOf("layer=c") > 0 ? "svembed" : "embed");
      }
    },
    gmap_search: {
      matcher: /(maps\.)?google\.([a-z]{2,3}(\.[a-z]{2})?)\/(maps\/search\/)(.*)/i,
      type: "iframe",
      url: function (t) {
        return "//maps.google." + t[2] + "/maps?q=" + t[5].replace("query=", "q=").replace("api=1", "") + "&output=embed";
      }
    }
  },
      n = function (e, n, o) {
    if (e) return o = o || "", "object" === t.type(o) && (o = t.param(o, !0)), t.each(n, function (t, n) {
      e = e.replace("$" + t, n || "");
    }), o.length && (e += (e.indexOf("?") > 0 ? "&" : "?") + o), e;
  };

  t(document).on("objectNeedsType.fb", function (o, i, a) {
    var s,
        r,
        c,
        l,
        d,
        u,
        f,
        p = a.src || "",
        h = !1;
    s = t.extend(!0, {}, e, a.opts.media), t.each(s, function (e, o) {
      if (c = p.match(o.matcher)) {
        if (h = o.type, f = e, u = {}, o.paramPlace && c[o.paramPlace]) {
          d = c[o.paramPlace], "?" == d[0] && (d = d.substring(1)), d = d.split("&");

          for (var i = 0; i < d.length; ++i) {
            var s = d[i].split("=", 2);
            2 == s.length && (u[s[0]] = decodeURIComponent(s[1].replace(/\+/g, " ")));
          }
        }

        return l = t.extend(!0, {}, o.params, a.opts[e], u), p = "function" === t.type(o.url) ? o.url.call(this, c, l, a) : n(o.url, c, l), r = "function" === t.type(o.thumb) ? o.thumb.call(this, c, l, a) : n(o.thumb, c), "youtube" === e ? p = p.replace(/&t=((\d+)m)?(\d+)s/, function (t, e, n, o) {
          return "&start=" + ((n ? 60 * parseInt(n, 10) : 0) + parseInt(o, 10));
        }) : "vimeo" === e && (p = p.replace("&%23", "#")), !1;
      }
    }), h ? (a.opts.thumb || a.opts.$thumb && a.opts.$thumb.length || (a.opts.thumb = r), "iframe" === h && (a.opts = t.extend(!0, a.opts, {
      iframe: {
        preload: !1,
        attr: {
          scrolling: "no"
        }
      }
    })), t.extend(a, {
      type: h,
      src: p,
      origSrc: a.src,
      contentSource: f,
      contentType: "image" === h ? "image" : "gmap_place" == f || "gmap_search" == f ? "map" : "video"
    })) : p && (a.type = a.opts.defaultType);
  });
  var o = {
    youtube: {
      src: "https://www.youtube.com/iframe_api",
      class: "YT",
      loading: !1,
      loaded: !1
    },
    vimeo: {
      src: "https://player.vimeo.com/api/player.js",
      class: "Vimeo",
      loading: !1,
      loaded: !1
    },
    load: function (t) {
      var e,
          n = this;
      if (this[t].loaded) return void setTimeout(function () {
        n.done(t);
      });
      this[t].loading || (this[t].loading = !0, e = document.createElement("script"), e.type = "text/javascript", e.src = this[t].src, "youtube" === t ? window.onYouTubeIframeAPIReady = function () {
        n[t].loaded = !0, n.done(t);
      } : e.onload = function () {
        n[t].loaded = !0, n.done(t);
      }, document.body.appendChild(e));
    },
    done: function (e) {
      var n, o, i;
      "youtube" === e && delete window.onYouTubeIframeAPIReady, (n = t.fancybox.getInstance()) && (o = n.current.$content.find("iframe"), "youtube" === e && void 0 !== YT && YT ? i = new YT.Player(o.attr("id"), {
        events: {
          onStateChange: function (t) {
            0 == t.data && n.next();
          }
        }
      }) : "vimeo" === e && void 0 !== Vimeo && Vimeo && (i = new Vimeo.Player(o), i.on("ended", function () {
        n.next();
      })));
    }
  };
  t(document).on({
    "afterShow.fb": function (t, e, n) {
      e.group.length > 1 && ("youtube" === n.contentSource || "vimeo" === n.contentSource) && o.load(n.contentSource);
    }
  });
}(jQuery), function (t, e, n) {
  "use strict";

  var o = function () {
    return t.requestAnimationFrame || t.webkitRequestAnimationFrame || t.mozRequestAnimationFrame || t.oRequestAnimationFrame || function (e) {
      return t.setTimeout(e, 1e3 / 60);
    };
  }(),
      i = function () {
    return t.cancelAnimationFrame || t.webkitCancelAnimationFrame || t.mozCancelAnimationFrame || t.oCancelAnimationFrame || function (e) {
      t.clearTimeout(e);
    };
  }(),
      a = function (e) {
    var n = [];
    e = e.originalEvent || e || t.e, e = e.touches && e.touches.length ? e.touches : e.changedTouches && e.changedTouches.length ? e.changedTouches : [e];

    for (var o in e) e[o].pageX ? n.push({
      x: e[o].pageX,
      y: e[o].pageY
    }) : e[o].clientX && n.push({
      x: e[o].clientX,
      y: e[o].clientY
    });

    return n;
  },
      s = function (t, e, n) {
    return e && t ? "x" === n ? t.x - e.x : "y" === n ? t.y - e.y : Math.sqrt(Math.pow(t.x - e.x, 2) + Math.pow(t.y - e.y, 2)) : 0;
  },
      r = function (t) {
    if (t.is('a,area,button,[role="button"],input,label,select,summary,textarea,video,audio,iframe') || n.isFunction(t.get(0).onclick) || t.data("selectable")) return !0;

    for (var e = 0, o = t[0].attributes, i = o.length; e < i; e++) if ("data-fancybox-" === o[e].nodeName.substr(0, 14)) return !0;

    return !1;
  },
      c = function (e) {
    var n = t.getComputedStyle(e)["overflow-y"],
        o = t.getComputedStyle(e)["overflow-x"],
        i = ("scroll" === n || "auto" === n) && e.scrollHeight > e.clientHeight,
        a = ("scroll" === o || "auto" === o) && e.scrollWidth > e.clientWidth;
    return i || a;
  },
      l = function (t) {
    for (var e = !1;;) {
      if (e = c(t.get(0))) break;
      if (t = t.parent(), !t.length || t.hasClass("fancybox-stage") || t.is("body")) break;
    }

    return e;
  },
      d = function (t) {
    var e = this;
    e.instance = t, e.$bg = t.$refs.bg, e.$stage = t.$refs.stage, e.$container = t.$refs.container, e.destroy(), e.$container.on("touchstart.fb.touch mousedown.fb.touch", n.proxy(e, "ontouchstart"));
  };

  d.prototype.destroy = function () {
    var t = this;
    t.$container.off(".fb.touch"), n(e).off(".fb.touch"), t.requestId && (i(t.requestId), t.requestId = null), t.tapped && (clearTimeout(t.tapped), t.tapped = null);
  }, d.prototype.ontouchstart = function (o) {
    var i = this,
        c = n(o.target),
        d = i.instance,
        u = d.current,
        f = u.$slide,
        p = u.$content,
        h = "touchstart" == o.type;

    if (h && i.$container.off("mousedown.fb.touch"), (!o.originalEvent || 2 != o.originalEvent.button) && f.length && c.length && !r(c) && !r(c.parent()) && (c.is("img") || !(o.originalEvent.clientX > c[0].clientWidth + c.offset().left))) {
      if (!u || d.isAnimating || u.$slide.hasClass("fancybox-animated")) return o.stopPropagation(), void o.preventDefault();
      i.realPoints = i.startPoints = a(o), i.startPoints.length && (u.touch && o.stopPropagation(), i.startEvent = o, i.canTap = !0, i.$target = c, i.$content = p, i.opts = u.opts.touch, i.isPanning = !1, i.isSwiping = !1, i.isZooming = !1, i.isScrolling = !1, i.canPan = d.canPan(), i.startTime = new Date().getTime(), i.distanceX = i.distanceY = i.distance = 0, i.canvasWidth = Math.round(f[0].clientWidth), i.canvasHeight = Math.round(f[0].clientHeight), i.contentLastPos = null, i.contentStartPos = n.fancybox.getTranslate(i.$content) || {
        top: 0,
        left: 0
      }, i.sliderStartPos = n.fancybox.getTranslate(f), i.stagePos = n.fancybox.getTranslate(d.$refs.stage), i.sliderStartPos.top -= i.stagePos.top, i.sliderStartPos.left -= i.stagePos.left, i.contentStartPos.top -= i.stagePos.top, i.contentStartPos.left -= i.stagePos.left, n(e).off(".fb.touch").on(h ? "touchend.fb.touch touchcancel.fb.touch" : "mouseup.fb.touch mouseleave.fb.touch", n.proxy(i, "ontouchend")).on(h ? "touchmove.fb.touch" : "mousemove.fb.touch", n.proxy(i, "ontouchmove")), n.fancybox.isMobile && e.addEventListener("scroll", i.onscroll, !0), ((i.opts || i.canPan) && (c.is(i.$stage) || i.$stage.find(c).length) || (c.is(".fancybox-image") && o.preventDefault(), n.fancybox.isMobile && c.parents(".fancybox-caption").length)) && (i.isScrollable = l(c) || l(c.parent()), n.fancybox.isMobile && i.isScrollable || o.preventDefault(), (1 === i.startPoints.length || u.hasError) && (i.canPan ? (n.fancybox.stop(i.$content), i.isPanning = !0) : i.isSwiping = !0, i.$container.addClass("fancybox-is-grabbing")), 2 === i.startPoints.length && "image" === u.type && (u.isLoaded || u.$ghost) && (i.canTap = !1, i.isSwiping = !1, i.isPanning = !1, i.isZooming = !0, n.fancybox.stop(i.$content), i.centerPointStartX = .5 * (i.startPoints[0].x + i.startPoints[1].x) - n(t).scrollLeft(), i.centerPointStartY = .5 * (i.startPoints[0].y + i.startPoints[1].y) - n(t).scrollTop(), i.percentageOfImageAtPinchPointX = (i.centerPointStartX - i.contentStartPos.left) / i.contentStartPos.width, i.percentageOfImageAtPinchPointY = (i.centerPointStartY - i.contentStartPos.top) / i.contentStartPos.height, i.startDistanceBetweenFingers = s(i.startPoints[0], i.startPoints[1]))));
    }
  }, d.prototype.onscroll = function (t) {
    var n = this;
    n.isScrolling = !0, e.removeEventListener("scroll", n.onscroll, !0);
  }, d.prototype.ontouchmove = function (t) {
    var e = this;
    return void 0 !== t.originalEvent.buttons && 0 === t.originalEvent.buttons ? void e.ontouchend(t) : e.isScrolling ? void (e.canTap = !1) : (e.newPoints = a(t), void ((e.opts || e.canPan) && e.newPoints.length && e.newPoints.length && (e.isSwiping && !0 === e.isSwiping || t.preventDefault(), e.distanceX = s(e.newPoints[0], e.startPoints[0], "x"), e.distanceY = s(e.newPoints[0], e.startPoints[0], "y"), e.distance = s(e.newPoints[0], e.startPoints[0]), e.distance > 0 && (e.isSwiping ? e.onSwipe(t) : e.isPanning ? e.onPan() : e.isZooming && e.onZoom()))));
  }, d.prototype.onSwipe = function (e) {
    var a,
        s = this,
        r = s.instance,
        c = s.isSwiping,
        l = s.sliderStartPos.left || 0;
    if (!0 !== c) "x" == c && (s.distanceX > 0 && (s.instance.group.length < 2 || 0 === s.instance.current.index && !s.instance.current.opts.loop) ? l += Math.pow(s.distanceX, .8) : s.distanceX < 0 && (s.instance.group.length < 2 || s.instance.current.index === s.instance.group.length - 1 && !s.instance.current.opts.loop) ? l -= Math.pow(-s.distanceX, .8) : l += s.distanceX), s.sliderLastPos = {
      top: "x" == c ? 0 : s.sliderStartPos.top + s.distanceY,
      left: l
    }, s.requestId && (i(s.requestId), s.requestId = null), s.requestId = o(function () {
      s.sliderLastPos && (n.each(s.instance.slides, function (t, e) {
        var o = e.pos - s.instance.currPos;
        n.fancybox.setTranslate(e.$slide, {
          top: s.sliderLastPos.top,
          left: s.sliderLastPos.left + o * s.canvasWidth + o * e.opts.gutter
        });
      }), s.$container.addClass("fancybox-is-sliding"));
    });else if (Math.abs(s.distance) > 10) {
      if (s.canTap = !1, r.group.length < 2 && s.opts.vertical ? s.isSwiping = "y" : r.isDragging || !1 === s.opts.vertical || "auto" === s.opts.vertical && n(t).width() > 800 ? s.isSwiping = "x" : (a = Math.abs(180 * Math.atan2(s.distanceY, s.distanceX) / Math.PI), s.isSwiping = a > 45 && a < 135 ? "y" : "x"), "y" === s.isSwiping && n.fancybox.isMobile && s.isScrollable) return void (s.isScrolling = !0);
      r.isDragging = s.isSwiping, s.startPoints = s.newPoints, n.each(r.slides, function (t, e) {
        var o, i;
        n.fancybox.stop(e.$slide), o = n.fancybox.getTranslate(e.$slide), i = n.fancybox.getTranslate(r.$refs.stage), e.$slide.css({
          transform: "",
          opacity: "",
          "transition-duration": ""
        }).removeClass("fancybox-animated").removeClass(function (t, e) {
          return (e.match(/(^|\s)fancybox-fx-\S+/g) || []).join(" ");
        }), e.pos === r.current.pos && (s.sliderStartPos.top = o.top - i.top, s.sliderStartPos.left = o.left - i.left), n.fancybox.setTranslate(e.$slide, {
          top: o.top - i.top,
          left: o.left - i.left
        });
      }), r.SlideShow && r.SlideShow.isActive && r.SlideShow.stop();
    }
  }, d.prototype.onPan = function () {
    var t = this;
    if (s(t.newPoints[0], t.realPoints[0]) < (n.fancybox.isMobile ? 10 : 5)) return void (t.startPoints = t.newPoints);
    t.canTap = !1, t.contentLastPos = t.limitMovement(), t.requestId && i(t.requestId), t.requestId = o(function () {
      n.fancybox.setTranslate(t.$content, t.contentLastPos);
    });
  }, d.prototype.limitMovement = function () {
    var t,
        e,
        n,
        o,
        i,
        a,
        s = this,
        r = s.canvasWidth,
        c = s.canvasHeight,
        l = s.distanceX,
        d = s.distanceY,
        u = s.contentStartPos,
        f = u.left,
        p = u.top,
        h = u.width,
        g = u.height;
    return i = h > r ? f + l : f, a = p + d, t = Math.max(0, .5 * r - .5 * h), e = Math.max(0, .5 * c - .5 * g), n = Math.min(r - h, .5 * r - .5 * h), o = Math.min(c - g, .5 * c - .5 * g), l > 0 && i > t && (i = t - 1 + Math.pow(-t + f + l, .8) || 0), l < 0 && i < n && (i = n + 1 - Math.pow(n - f - l, .8) || 0), d > 0 && a > e && (a = e - 1 + Math.pow(-e + p + d, .8) || 0), d < 0 && a < o && (a = o + 1 - Math.pow(o - p - d, .8) || 0), {
      top: a,
      left: i
    };
  }, d.prototype.limitPosition = function (t, e, n, o) {
    var i = this,
        a = i.canvasWidth,
        s = i.canvasHeight;
    return n > a ? (t = t > 0 ? 0 : t, t = t < a - n ? a - n : t) : t = Math.max(0, a / 2 - n / 2), o > s ? (e = e > 0 ? 0 : e, e = e < s - o ? s - o : e) : e = Math.max(0, s / 2 - o / 2), {
      top: e,
      left: t
    };
  }, d.prototype.onZoom = function () {
    var e = this,
        a = e.contentStartPos,
        r = a.width,
        c = a.height,
        l = a.left,
        d = a.top,
        u = s(e.newPoints[0], e.newPoints[1]),
        f = u / e.startDistanceBetweenFingers,
        p = Math.floor(r * f),
        h = Math.floor(c * f),
        g = (r - p) * e.percentageOfImageAtPinchPointX,
        b = (c - h) * e.percentageOfImageAtPinchPointY,
        m = (e.newPoints[0].x + e.newPoints[1].x) / 2 - n(t).scrollLeft(),
        v = (e.newPoints[0].y + e.newPoints[1].y) / 2 - n(t).scrollTop(),
        y = m - e.centerPointStartX,
        x = v - e.centerPointStartY,
        w = l + (g + y),
        $ = d + (b + x),
        S = {
      top: $,
      left: w,
      scaleX: f,
      scaleY: f
    };
    e.canTap = !1, e.newWidth = p, e.newHeight = h, e.contentLastPos = S, e.requestId && i(e.requestId), e.requestId = o(function () {
      n.fancybox.setTranslate(e.$content, e.contentLastPos);
    });
  }, d.prototype.ontouchend = function (t) {
    var o = this,
        s = o.isSwiping,
        r = o.isPanning,
        c = o.isZooming,
        l = o.isScrolling;
    if (o.endPoints = a(t), o.dMs = Math.max(new Date().getTime() - o.startTime, 1), o.$container.removeClass("fancybox-is-grabbing"), n(e).off(".fb.touch"), e.removeEventListener("scroll", o.onscroll, !0), o.requestId && (i(o.requestId), o.requestId = null), o.isSwiping = !1, o.isPanning = !1, o.isZooming = !1, o.isScrolling = !1, o.instance.isDragging = !1, o.canTap) return o.onTap(t);
    o.speed = 100, o.velocityX = o.distanceX / o.dMs * .5, o.velocityY = o.distanceY / o.dMs * .5, r ? o.endPanning() : c ? o.endZooming() : o.endSwiping(s, l);
  }, d.prototype.endSwiping = function (t, e) {
    var o = this,
        i = !1,
        a = o.instance.group.length,
        s = Math.abs(o.distanceX),
        r = "x" == t && a > 1 && (o.dMs > 130 && s > 10 || s > 50);
    o.sliderLastPos = null, "y" == t && !e && Math.abs(o.distanceY) > 50 ? (n.fancybox.animate(o.instance.current.$slide, {
      top: o.sliderStartPos.top + o.distanceY + 150 * o.velocityY,
      opacity: 0
    }, 200), i = o.instance.close(!0, 250)) : r && o.distanceX > 0 ? i = o.instance.previous(300) : r && o.distanceX < 0 && (i = o.instance.next(300)), !1 !== i || "x" != t && "y" != t || o.instance.centerSlide(200), o.$container.removeClass("fancybox-is-sliding");
  }, d.prototype.endPanning = function () {
    var t,
        e,
        o,
        i = this;
    i.contentLastPos && (!1 === i.opts.momentum || i.dMs > 350 ? (t = i.contentLastPos.left, e = i.contentLastPos.top) : (t = i.contentLastPos.left + 500 * i.velocityX, e = i.contentLastPos.top + 500 * i.velocityY), o = i.limitPosition(t, e, i.contentStartPos.width, i.contentStartPos.height), o.width = i.contentStartPos.width, o.height = i.contentStartPos.height, n.fancybox.animate(i.$content, o, 366));
  }, d.prototype.endZooming = function () {
    var t,
        e,
        o,
        i,
        a = this,
        s = a.instance.current,
        r = a.newWidth,
        c = a.newHeight;
    a.contentLastPos && (t = a.contentLastPos.left, e = a.contentLastPos.top, i = {
      top: e,
      left: t,
      width: r,
      height: c,
      scaleX: 1,
      scaleY: 1
    }, n.fancybox.setTranslate(a.$content, i), r < a.canvasWidth && c < a.canvasHeight ? a.instance.scaleToFit(150) : r > s.width || c > s.height ? a.instance.scaleToActual(a.centerPointStartX, a.centerPointStartY, 150) : (o = a.limitPosition(t, e, r, c), n.fancybox.animate(a.$content, o, 150)));
  }, d.prototype.onTap = function (e) {
    var o,
        i = this,
        s = n(e.target),
        r = i.instance,
        c = r.current,
        l = e && a(e) || i.startPoints,
        d = l[0] ? l[0].x - n(t).scrollLeft() - i.stagePos.left : 0,
        u = l[0] ? l[0].y - n(t).scrollTop() - i.stagePos.top : 0,
        f = function (t) {
      var o = c.opts[t];
      if (n.isFunction(o) && (o = o.apply(r, [c, e])), o) switch (o) {
        case "close":
          r.close(i.startEvent);
          break;

        case "toggleControls":
          r.toggleControls();
          break;

        case "next":
          r.next();
          break;

        case "nextOrClose":
          r.group.length > 1 ? r.next() : r.close(i.startEvent);
          break;

        case "zoom":
          "image" == c.type && (c.isLoaded || c.$ghost) && (r.canPan() ? r.scaleToFit() : r.isScaledDown() ? r.scaleToActual(d, u) : r.group.length < 2 && r.close(i.startEvent));
      }
    };

    if ((!e.originalEvent || 2 != e.originalEvent.button) && (s.is("img") || !(d > s[0].clientWidth + s.offset().left))) {
      if (s.is(".fancybox-bg,.fancybox-inner,.fancybox-outer,.fancybox-container")) o = "Outside";else if (s.is(".fancybox-slide")) o = "Slide";else {
        if (!r.current.$content || !r.current.$content.find(s).addBack().filter(s).length) return;
        o = "Content";
      }

      if (i.tapped) {
        if (clearTimeout(i.tapped), i.tapped = null, Math.abs(d - i.tapX) > 50 || Math.abs(u - i.tapY) > 50) return this;
        f("dblclick" + o);
      } else i.tapX = d, i.tapY = u, c.opts["dblclick" + o] && c.opts["dblclick" + o] !== c.opts["click" + o] ? i.tapped = setTimeout(function () {
        i.tapped = null, r.isAnimating || f("click" + o);
      }, 500) : f("click" + o);

      return this;
    }
  }, n(e).on("onActivate.fb", function (t, e) {
    e && !e.Guestures && (e.Guestures = new d(e));
  }).on("beforeClose.fb", function (t, e) {
    e && e.Guestures && e.Guestures.destroy();
  });
}(window, document, jQuery), function (t, e) {
  "use strict";

  e.extend(!0, e.fancybox.defaults, {
    btnTpl: {
      slideShow: '<button data-fancybox-play class="fancybox-button fancybox-button--play" title="{{PLAY_START}}"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M6.5 5.4v13.2l11-6.6z"/></svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M8.33 5.75h2.2v12.5h-2.2V5.75zm5.15 0h2.2v12.5h-2.2V5.75z"/></svg></button>'
    },
    slideShow: {
      autoStart: !1,
      speed: 3e3,
      progress: !0
    }
  });

  var n = function (t) {
    this.instance = t, this.init();
  };

  e.extend(n.prototype, {
    timer: null,
    isActive: !1,
    $button: null,
    init: function () {
      var t = this,
          n = t.instance,
          o = n.group[n.currIndex].opts.slideShow;
      t.$button = n.$refs.toolbar.find("[data-fancybox-play]").on("click", function () {
        t.toggle();
      }), n.group.length < 2 || !o ? t.$button.hide() : o.progress && (t.$progress = e('<div class="fancybox-progress"></div>').appendTo(n.$refs.inner));
    },
    set: function (t) {
      var n = this,
          o = n.instance,
          i = o.current;
      i && (!0 === t || i.opts.loop || o.currIndex < o.group.length - 1) ? n.isActive && "video" !== i.contentType && (n.$progress && e.fancybox.animate(n.$progress.show(), {
        scaleX: 1
      }, i.opts.slideShow.speed), n.timer = setTimeout(function () {
        o.current.opts.loop || o.current.index != o.group.length - 1 ? o.next() : o.jumpTo(0);
      }, i.opts.slideShow.speed)) : (n.stop(), o.idleSecondsCounter = 0, o.showControls());
    },
    clear: function () {
      var t = this;
      clearTimeout(t.timer), t.timer = null, t.$progress && t.$progress.removeAttr("style").hide();
    },
    start: function () {
      var t = this,
          e = t.instance.current;
      e && (t.$button.attr("title", (e.opts.i18n[e.opts.lang] || e.opts.i18n.en).PLAY_STOP).removeClass("fancybox-button--play").addClass("fancybox-button--pause"), t.isActive = !0, e.isComplete && t.set(!0), t.instance.trigger("onSlideShowChange", !0));
    },
    stop: function () {
      var t = this,
          e = t.instance.current;
      t.clear(), t.$button.attr("title", (e.opts.i18n[e.opts.lang] || e.opts.i18n.en).PLAY_START).removeClass("fancybox-button--pause").addClass("fancybox-button--play"), t.isActive = !1, t.instance.trigger("onSlideShowChange", !1), t.$progress && t.$progress.removeAttr("style").hide();
    },
    toggle: function () {
      var t = this;
      t.isActive ? t.stop() : t.start();
    }
  }), e(t).on({
    "onInit.fb": function (t, e) {
      e && !e.SlideShow && (e.SlideShow = new n(e));
    },
    "beforeShow.fb": function (t, e, n, o) {
      var i = e && e.SlideShow;
      o ? i && n.opts.slideShow.autoStart && i.start() : i && i.isActive && i.clear();
    },
    "afterShow.fb": function (t, e, n) {
      var o = e && e.SlideShow;
      o && o.isActive && o.set();
    },
    "afterKeydown.fb": function (n, o, i, a, s) {
      var r = o && o.SlideShow;
      !r || !i.opts.slideShow || 80 !== s && 32 !== s || e(t.activeElement).is("button,a,input") || (a.preventDefault(), r.toggle());
    },
    "beforeClose.fb onDeactivate.fb": function (t, e) {
      var n = e && e.SlideShow;
      n && n.stop();
    }
  }), e(t).on("visibilitychange", function () {
    var n = e.fancybox.getInstance(),
        o = n && n.SlideShow;
    o && o.isActive && (t.hidden ? o.clear() : o.set());
  });
}(document, jQuery), function (t, e) {
  "use strict";

  var n = function () {
    for (var e = [["requestFullscreen", "exitFullscreen", "fullscreenElement", "fullscreenEnabled", "fullscreenchange", "fullscreenerror"], ["webkitRequestFullscreen", "webkitExitFullscreen", "webkitFullscreenElement", "webkitFullscreenEnabled", "webkitfullscreenchange", "webkitfullscreenerror"], ["webkitRequestFullScreen", "webkitCancelFullScreen", "webkitCurrentFullScreenElement", "webkitCancelFullScreen", "webkitfullscreenchange", "webkitfullscreenerror"], ["mozRequestFullScreen", "mozCancelFullScreen", "mozFullScreenElement", "mozFullScreenEnabled", "mozfullscreenchange", "mozfullscreenerror"], ["msRequestFullscreen", "msExitFullscreen", "msFullscreenElement", "msFullscreenEnabled", "MSFullscreenChange", "MSFullscreenError"]], n = {}, o = 0; o < e.length; o++) {
      var i = e[o];

      if (i && i[1] in t) {
        for (var a = 0; a < i.length; a++) n[e[0][a]] = i[a];

        return n;
      }
    }

    return !1;
  }();

  if (n) {
    var o = {
      request: function (e) {
        e = e || t.documentElement, e[n.requestFullscreen](e.ALLOW_KEYBOARD_INPUT);
      },
      exit: function () {
        t[n.exitFullscreen]();
      },
      toggle: function (e) {
        e = e || t.documentElement, this.isFullscreen() ? this.exit() : this.request(e);
      },
      isFullscreen: function () {
        return Boolean(t[n.fullscreenElement]);
      },
      enabled: function () {
        return Boolean(t[n.fullscreenEnabled]);
      }
    };
    e.extend(!0, e.fancybox.defaults, {
      btnTpl: {
        fullScreen: '<button data-fancybox-fullscreen class="fancybox-button fancybox-button--fsenter" title="{{FULL_SCREEN}}"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M7 14H5v5h5v-2H7v-3zm-2-4h2V7h3V5H5v5zm12 7h-3v2h5v-5h-2v3zM14 5v2h3v3h2V5h-5z"/></svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M5 16h3v3h2v-5H5zm3-8H5v2h5V5H8zm6 11h2v-3h3v-2h-5zm2-11V5h-2v5h5V8z"/></svg></button>'
      },
      fullScreen: {
        autoStart: !1
      }
    }), e(t).on(n.fullscreenchange, function () {
      var t = o.isFullscreen(),
          n = e.fancybox.getInstance();
      n && (n.current && "image" === n.current.type && n.isAnimating && (n.isAnimating = !1, n.update(!0, !0, 0), n.isComplete || n.complete()), n.trigger("onFullscreenChange", t), n.$refs.container.toggleClass("fancybox-is-fullscreen", t), n.$refs.toolbar.find("[data-fancybox-fullscreen]").toggleClass("fancybox-button--fsenter", !t).toggleClass("fancybox-button--fsexit", t));
    });
  }

  e(t).on({
    "onInit.fb": function (t, e) {
      var i;
      if (!n) return void e.$refs.toolbar.find("[data-fancybox-fullscreen]").remove();
      e && e.group[e.currIndex].opts.fullScreen ? (i = e.$refs.container, i.on("click.fb-fullscreen", "[data-fancybox-fullscreen]", function (t) {
        t.stopPropagation(), t.preventDefault(), o.toggle();
      }), e.opts.fullScreen && !0 === e.opts.fullScreen.autoStart && o.request(), e.FullScreen = o) : e && e.$refs.toolbar.find("[data-fancybox-fullscreen]").hide();
    },
    "afterKeydown.fb": function (t, e, n, o, i) {
      e && e.FullScreen && 70 === i && (o.preventDefault(), e.FullScreen.toggle());
    },
    "beforeClose.fb": function (t, e) {
      e && e.FullScreen && e.$refs.container.hasClass("fancybox-is-fullscreen") && o.exit();
    }
  });
}(document, jQuery), function (t, e) {
  "use strict";

  var n = "fancybox-thumbs";
  e.fancybox.defaults = e.extend(!0, {
    btnTpl: {
      thumbs: '<button data-fancybox-thumbs class="fancybox-button fancybox-button--thumbs" title="{{THUMBS}}"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M14.59 14.59h3.76v3.76h-3.76v-3.76zm-4.47 0h3.76v3.76h-3.76v-3.76zm-4.47 0h3.76v3.76H5.65v-3.76zm8.94-4.47h3.76v3.76h-3.76v-3.76zm-4.47 0h3.76v3.76h-3.76v-3.76zm-4.47 0h3.76v3.76H5.65v-3.76zm8.94-4.47h3.76v3.76h-3.76V5.65zm-4.47 0h3.76v3.76h-3.76V5.65zm-4.47 0h3.76v3.76H5.65V5.65z"/></svg></button>'
    },
    thumbs: {
      autoStart: !1,
      hideOnClose: !0,
      parentEl: ".fancybox-container",
      axis: "y"
    }
  }, e.fancybox.defaults);

  var o = function (t) {
    this.init(t);
  };

  e.extend(o.prototype, {
    $button: null,
    $grid: null,
    $list: null,
    isVisible: !1,
    isActive: !1,
    init: function (t) {
      var e = this,
          n = t.group,
          o = 0;
      e.instance = t, e.opts = n[t.currIndex].opts.thumbs, t.Thumbs = e, e.$button = t.$refs.toolbar.find("[data-fancybox-thumbs]");

      for (var i = 0, a = n.length; i < a && (n[i].thumb && o++, !(o > 1)); i++);

      o > 1 && e.opts ? (e.$button.removeAttr("style").on("click", function () {
        e.toggle();
      }), e.isActive = !0) : e.$button.hide();
    },
    create: function () {
      var t,
          o = this,
          i = o.instance,
          a = o.opts.parentEl,
          s = [];
      o.$grid || (o.$grid = e('<div class="' + n + " " + n + "-" + o.opts.axis + '"></div>').appendTo(i.$refs.container.find(a).addBack().filter(a)), o.$grid.on("click", "a", function () {
        i.jumpTo(e(this).attr("data-index"));
      })), o.$list || (o.$list = e('<div class="' + n + '__list">').appendTo(o.$grid)), e.each(i.group, function (e, n) {
        t = n.thumb, t || "image" !== n.type || (t = n.src), s.push('<a href="javascript:;" tabindex="0" data-index="' + e + '"' + (t && t.length ? ' style="background-image:url(' + t + ')"' : 'class="fancybox-thumbs-missing"') + "></a>");
      }), o.$list[0].innerHTML = s.join(""), "x" === o.opts.axis && o.$list.width(parseInt(o.$grid.css("padding-right"), 10) + i.group.length * o.$list.children().eq(0).outerWidth(!0));
    },
    focus: function (t) {
      var e,
          n,
          o = this,
          i = o.$list,
          a = o.$grid;
      o.instance.current && (e = i.children().removeClass("fancybox-thumbs-active").filter('[data-index="' + o.instance.current.index + '"]').addClass("fancybox-thumbs-active"), n = e.position(), "y" === o.opts.axis && (n.top < 0 || n.top > i.height() - e.outerHeight()) ? i.stop().animate({
        scrollTop: i.scrollTop() + n.top
      }, t) : "x" === o.opts.axis && (n.left < a.scrollLeft() || n.left > a.scrollLeft() + (a.width() - e.outerWidth())) && i.parent().stop().animate({
        scrollLeft: n.left
      }, t));
    },
    update: function () {
      var t = this;
      t.instance.$refs.container.toggleClass("fancybox-show-thumbs", this.isVisible), t.isVisible ? (t.$grid || t.create(), t.instance.trigger("onThumbsShow"), t.focus(0)) : t.$grid && t.instance.trigger("onThumbsHide"), t.instance.update();
    },
    hide: function () {
      this.isVisible = !1, this.update();
    },
    show: function () {
      this.isVisible = !0, this.update();
    },
    toggle: function () {
      this.isVisible = !this.isVisible, this.update();
    }
  }), e(t).on({
    "onInit.fb": function (t, e) {
      var n;
      e && !e.Thumbs && (n = new o(e), n.isActive && !0 === n.opts.autoStart && n.show());
    },
    "beforeShow.fb": function (t, e, n, o) {
      var i = e && e.Thumbs;
      i && i.isVisible && i.focus(o ? 0 : 250);
    },
    "afterKeydown.fb": function (t, e, n, o, i) {
      var a = e && e.Thumbs;
      a && a.isActive && 71 === i && (o.preventDefault(), a.toggle());
    },
    "beforeClose.fb": function (t, e) {
      var n = e && e.Thumbs;
      n && n.isVisible && !1 !== n.opts.hideOnClose && n.$grid.hide();
    }
  });
}(document, jQuery), function (t, e) {
  "use strict";

  function n(t) {
    var e = {
      "&": "&amp;",
      "<": "&lt;",
      ">": "&gt;",
      '"': "&quot;",
      "'": "&#39;",
      "/": "&#x2F;",
      "`": "&#x60;",
      "=": "&#x3D;"
    };
    return String(t).replace(/[&<>"'`=\/]/g, function (t) {
      return e[t];
    });
  }

  e.extend(!0, e.fancybox.defaults, {
    btnTpl: {
      share: '<button data-fancybox-share class="fancybox-button fancybox-button--share" title="{{SHARE}}"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M2.55 19c1.4-8.4 9.1-9.8 11.9-9.8V5l7 7-7 6.3v-3.5c-2.8 0-10.5 2.1-11.9 4.2z"/></svg></button>'
    },
    share: {
      url: function (t, e) {
        return !t.currentHash && "inline" !== e.type && "html" !== e.type && (e.origSrc || e.src) || window.location;
      },
      tpl: '<div class="fancybox-share"><h1>{{SHARE}}</h1><p><a class="fancybox-share__button fancybox-share__button--fb" href="https://www.facebook.com/sharer/sharer.php?u={{url}}"><svg viewBox="0 0 512 512" xmlns="http://www.w3.org/2000/svg"><path d="m287 456v-299c0-21 6-35 35-35h38v-63c-7-1-29-3-55-3-54 0-91 33-91 94v306m143-254h-205v72h196" /></svg><span>Facebook</span></a><a class="fancybox-share__button fancybox-share__button--tw" href="https://twitter.com/intent/tweet?url={{url}}&text={{descr}}"><svg viewBox="0 0 512 512" xmlns="http://www.w3.org/2000/svg"><path d="m456 133c-14 7-31 11-47 13 17-10 30-27 37-46-15 10-34 16-52 20-61-62-157-7-141 75-68-3-129-35-169-85-22 37-11 86 26 109-13 0-26-4-37-9 0 39 28 72 65 80-12 3-25 4-37 2 10 33 41 57 77 57-42 30-77 38-122 34 170 111 378-32 359-208 16-11 30-25 41-42z" /></svg><span>Twitter</span></a><a class="fancybox-share__button fancybox-share__button--pt" href="https://www.pinterest.com/pin/create/button/?url={{url}}&description={{descr}}&media={{media}}"><svg viewBox="0 0 512 512" xmlns="http://www.w3.org/2000/svg"><path d="m265 56c-109 0-164 78-164 144 0 39 15 74 47 87 5 2 10 0 12-5l4-19c2-6 1-8-3-13-9-11-15-25-15-45 0-58 43-110 113-110 62 0 96 38 96 88 0 67-30 122-73 122-24 0-42-19-36-44 6-29 20-60 20-81 0-19-10-35-31-35-25 0-44 26-44 60 0 21 7 36 7 36l-30 125c-8 37-1 83 0 87 0 3 4 4 5 2 2-3 32-39 42-75l16-64c8 16 31 29 56 29 74 0 124-67 124-157 0-69-58-132-146-132z" fill="#fff"/></svg><span>Pinterest</span></a></p><p><input class="fancybox-share__input" type="text" value="{{url_raw}}" onclick="select()" /></p></div>'
    }
  }), e(t).on("click", "[data-fancybox-share]", function () {
    var t,
        o,
        i = e.fancybox.getInstance(),
        a = i.current || null;
    a && ("function" === e.type(a.opts.share.url) && (t = a.opts.share.url.apply(a, [i, a])), o = a.opts.share.tpl.replace(/\{\{media\}\}/g, "image" === a.type ? encodeURIComponent(a.src) : "").replace(/\{\{url\}\}/g, encodeURIComponent(t)).replace(/\{\{url_raw\}\}/g, n(t)).replace(/\{\{descr\}\}/g, i.$caption ? encodeURIComponent(i.$caption.text()) : ""), e.fancybox.open({
      src: i.translate(i, o),
      type: "html",
      opts: {
        touch: !1,
        animationEffect: !1,
        afterLoad: function (t, e) {
          i.$refs.container.one("beforeClose.fb", function () {
            t.close(null, 0);
          }), e.$content.find(".fancybox-share__button").click(function () {
            return window.open(this.href, "Share", "width=550, height=450"), !1;
          });
        },
        mobile: {
          autoFocus: !1
        }
      }
    }));
  });
}(document, jQuery), function (t, e, n) {
  "use strict";

  function o() {
    var e = t.location.hash.substr(1),
        n = e.split("-"),
        o = n.length > 1 && /^\+?\d+$/.test(n[n.length - 1]) ? parseInt(n.pop(-1), 10) || 1 : 1,
        i = n.join("-");
    return {
      hash: e,
      index: o < 1 ? 1 : o,
      gallery: i
    };
  }

  function i(t) {
    "" !== t.gallery && n("[data-fancybox='" + n.escapeSelector(t.gallery) + "']").eq(t.index - 1).focus().trigger("click.fb-start");
  }

  function a(t) {
    var e, n;
    return !!t && (e = t.current ? t.current.opts : t.opts, "" !== (n = e.hash || (e.$orig ? e.$orig.data("fancybox") || e.$orig.data("fancybox-trigger") : "")) && n);
  }

  n.escapeSelector || (n.escapeSelector = function (t) {
    return (t + "").replace(/([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g, function (t, e) {
      return e ? "\0" === t ? "�" : t.slice(0, -1) + "\\" + t.charCodeAt(t.length - 1).toString(16) + " " : "\\" + t;
    });
  }), n(function () {
    !1 !== n.fancybox.defaults.hash && (n(e).on({
      "onInit.fb": function (t, e) {
        var n, i;
        !1 !== e.group[e.currIndex].opts.hash && (n = o(), (i = a(e)) && n.gallery && i == n.gallery && (e.currIndex = n.index - 1));
      },
      "beforeShow.fb": function (n, o, i, s) {
        var r;
        i && !1 !== i.opts.hash && (r = a(o)) && (o.currentHash = r + (o.group.length > 1 ? "-" + (i.index + 1) : ""), t.location.hash !== "#" + o.currentHash && (s && !o.origHash && (o.origHash = t.location.hash), o.hashTimer && clearTimeout(o.hashTimer), o.hashTimer = setTimeout(function () {
          "replaceState" in t.history ? (t.history[s ? "pushState" : "replaceState"]({}, e.title, t.location.pathname + t.location.search + "#" + o.currentHash), s && (o.hasCreatedHistory = !0)) : t.location.hash = o.currentHash, o.hashTimer = null;
        }, 300)));
      },
      "beforeClose.fb": function (n, o, i) {
        i && !1 !== i.opts.hash && (clearTimeout(o.hashTimer), o.currentHash && o.hasCreatedHistory ? t.history.back() : o.currentHash && ("replaceState" in t.history ? t.history.replaceState({}, e.title, t.location.pathname + t.location.search + (o.origHash || "")) : t.location.hash = o.origHash), o.currentHash = null);
      }
    }), n(t).on("hashchange.fb", function () {
      var t = o(),
          e = null;
      n.each(n(".fancybox-container").get().reverse(), function (t, o) {
        var i = n(o).data("FancyBox");
        if (i && i.currentHash) return e = i, !1;
      }), e ? e.currentHash === t.gallery + "-" + t.index || 1 === t.index && e.currentHash == t.gallery || (e.currentHash = null, e.close()) : "" !== t.gallery && i(t);
    }), setTimeout(function () {
      n.fancybox.getInstance() || i(o());
    }, 50));
  });
}(window, document, jQuery), function (t, e) {
  "use strict";

  var n = new Date().getTime();
  e(t).on({
    "onInit.fb": function (t, e, o) {
      e.$refs.stage.on("mousewheel DOMMouseScroll wheel MozMousePixelScroll", function (t) {
        var o = e.current,
            i = new Date().getTime();
        e.group.length < 2 || !1 === o.opts.wheel || "auto" === o.opts.wheel && "image" !== o.type || (t.preventDefault(), t.stopPropagation(), o.$slide.hasClass("fancybox-animated") || (t = t.originalEvent || t, i - n < 250 || (n = i, e[(-t.deltaY || -t.deltaX || t.wheelDelta || -t.detail) < 0 ? "next" : "previous"]())));
      });
    }
  });
}(document, jQuery);
/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(5)))

/***/ }),

/***/ 41:
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
// extracted by mini-css-extract-plugin


/***/ }),

/***/ 8:
/***/ (function(module, exports, __webpack_require__) {

// style-loader: Adds some css to the DOM by adding a <style> tag

// load the styles
var content = __webpack_require__(9);
if(typeof content === 'string') content = [[module.i, content, '']];
if(content.locals) module.exports = content.locals;
// add the styles to the DOM
var add = __webpack_require__(0).default
var update = add("5f2c79cf", content, true, {});

/***/ }),

/***/ 9:
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
// extracted by mini-css-extract-plugin


/***/ })

/******/ });